{"version":3,"sources":["Images/AVCS/ADM_ICA_DD_rgb.png","Components/Mobile/CSS/sales.module.css","Images/summaries/icon-ordermanagment.png","Images/summaries/icon-fleetmanagment.png","Images/bg_shipmanager.jpg","Components/Mobile/CSS/MainStyles.module.css","Images/AVCS/AVCS_LOGO.png","Images/AVCS/ADM_TM.png","Images/Routes/Route-Icon.svg","Components/Mobile/Images/OldShip-Fading.jpg","Images/summaries/icon-news.png","Components/MapControl/LeafletRuler/leaflet-polyline-measure.js","Global/MUI/withRoot.js","Global/Services/httpService.js","Global/Stores/notificationStore.js","Global/Stores/userStore.js","Global/Stores/saleStore.js","Global/Stores/globalStore.js","Global/Stores/mapStore.js","Global/Stores/fleetStore.js","Global/Stores/basketStore.js","Global/Hooks/useAppSession.js","Global/Stores/catalogueStore.js","Global/Stores/avcsoStore.js","Components/Mobile/Navigation/BottomNav.jsx","Global/Data/Menu.js","Global/Data/Config.js","Components/Mobile/Navigation/TopNav.jsx","Components/MapControl/Helpers/GlobalHelper.js","Components/MapControl/Polygons/ItemPolygon.jsx","Components/MapControl/Polygons/SalesOrderLinePolygon.jsx","Components/MapControl/MapFunctions.js","Components/Widgets/OrderLineStatus.jsx","Components/MapControl/Popup/MapPopupSalesOrderLines.jsx","Components/MapControl/Layers/Base/BaseRoute.jsx","Components/MapControl/Layers/Catalogue/GeneralRoutesLayer.jsx","Components/MapControl/Layers/SalesOrderLayer.jsx","Components/MapControl/Polygons/SalesQuoteLinePolygon.jsx","Components/Widgets/StatusCircle.jsx","Components/MapControl/Popup/MapPopupSalesQuoteLines.jsx","Components/MapControl/Layers/SalesQuoteLayer.jsx","Components/MapControl/Polygons/HoldingLinePolygon.jsx","Components/Widgets/HoldingLineStatus.jsx","Components/MapControl/Popup/MapPopupHoldingLines.jsx","Components/MapControl/Layers/HoldingLayer.jsx","Global/Stores/folioStore.js","Components/MapControl/Polygons/FolioLinePolygon.jsx","Components/MapControl/Layers/FolioItemsLayer.jsx","Components/MapControl/Layers/FolioVesselItemsLayer.jsx","Components/MapControl/Markers/leaflet-tracksymbol.jsx","Components/MapControl/Markers/TrackMarker.jsx","Components/MapControl/Layers/FleetPositionsLayer.jsx","Components/MapControl/Popup/MapPopupSalesShipmentLines.jsx","Components/MapControl/Layers/SalesShipmentLayer.jsx","Components/MapControl/Popup/MapPopupPurchaseOrderLines.jsx","Components/MapControl/Layers/WorldAreaLayer.jsx","Components/MapControl/Layers/PurchaseOrderLayer.jsx","Components/MapControl/Layers/FolioLayer.jsx","Components/MapControl/Layers/FlatFeeContractLayer.jsx","Global/Stores/columnStore.js","Components/MapControl/Markers/MapAVCSOLogo.jsx","Components/MapControl/Layers/AVCSO/AvcsoLayer.jsx","Components/MapControl/Layers/AVCSO/Layers.js","Components/MapControl/Layers/AVCSO/AvcsOLayerOptions.jsx","Components/MapControl/Layers/AVCSO/DisplayParams.js","Components/Desktop/Misc/SearchFilter.jsx","Components/MapControl/Layers/Routing/RouteContainer.jsx","Components/MapControl/Markers/MapInfo.jsx","Components/MapControl/Layers/Catalogue/CatalogueMapPopup.jsx","Components/MapControl/Layers/Catalogue/CatalogueSelectLayer.jsx","Components/MapControl/Layers/Catalogue/CatalogueBasketLayer.jsx","Components/MapControl/Layers/AVCSO/AvcsoFeaturePopup.jsx","Components/MapControl/Layers/AVCSO/AvcsoFeatureContainer.jsx","Components/MapControl/Layers/Catalogue/AvcsoItemsLayer.jsx","Components/MapControl/Layers/Catalogue/AvcsoBasketLayer.jsx","Components/MapControl/LeafletRuler/LeafletRuler.jsx","Components/MapControl/MapControl.jsx","Components/Mobile/Navigation/FloatingMenuButton.jsx","Components/Mobile/Navigation/MenuCategory.jsx","Global/Data/Methods.js","Components/Mobile/Misc/Loading.jsx","Components/Mobile/Custom/ContentColumn.jsx","Components/Mobile/Navigation/Breadcrumb.jsx","Components/Mobile/AccountManagement/Profile/Profile.jsx","Components/Mobile/AccountManagement/Profile/ViewProfile.jsx","Components/Mobile/AccountManagement/Users/UserList.jsx","Components/Mobile/AccountManagement/Users/UserCreate.jsx","Components/Mobile/AccountManagement/Users/UserDetail.jsx","Components/Mobile/AccountManagement/AccountSettings.jsx","Components/Widgets/NumberStatus.jsx","Components/Mobile/Misc/ListItemLink.jsx","Components/Mobile/News/AnnouncementSummary.jsx","Components/Mobile/News/NewsList.jsx","Components/Mobile/Home.jsx","Components/Mobile/Help/UserManual.jsx","Global/Data/FAQs.js","Components/Mobile/Help/FAQs.jsx","Components/Mobile/Help/ContactUs.jsx","Components/Mobile/Help/HelpStatement.jsx","Components/Mobile/Help.jsx","Components/Mobile/Misc/SearchFilter.jsx","Components/Mobile/_StyledComponents/ListItemVessel.jsx","Components/Widgets/OrderStatus.jsx","Components/Mobile/_StyledComponents/ListItemSub.jsx","Components/Mobile/Sales/Quotes/VesselQuotes.jsx","Components/Mobile/Sales/Quotes/Quotes.jsx","Components/Mobile/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetailHeader.jsx","Components/Widgets/QuoteLineStatusButton.jsx","Components/Mobile/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetailList.jsx","Components/Mobile/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetail.jsx","Components/Mobile/Misc/MailTo.jsx","Components/Mobile/Misc/DownloadFile.jsx","Components/Mobile/Sales/Quotes/VesselQuoteDetail/QuoteDetailHeader.jsx","Components/Mobile/Misc/ValidationWidget.jsx","Components/Mobile/Sales/Quotes/VesselQuoteDetail/QuoteDetailList.jsx","Components/Mobile/Sales/Quotes/VesselQuoteDetail/QuoteConfirmation.jsx","Components/Mobile/Sales/Quotes/VesselQuoteDetail/QuoteDetailFooter.jsx","Components/Mobile/Sales/Quotes/VesselQuoteDetail/VesselQuoteDetail.jsx","Components/Mobile/Sales/Order.QuotationsApprove.jsx","Components/Mobile/Sales/Basket/CatalogueBasketReview.jsx","Components/Desktop/_StyledComponents/ListItemVessel.jsx","Components/Mobile/Sales/Basket/CatalogueSelectVessel.jsx","Components/Widgets/Buttons/UploadButton.jsx","Components/Widgets/Buttons/UploadBasketButton.jsx","Components/Widgets/Buttons/UploadRouteButton.jsx","Components/Desktop/Misc/Loading.jsx","Components/Custom/ContentColumn.jsx","Components/Desktop/Sales/Catalogue/RouteCreate/RouteCreate.jsx","Components/Widgets/Buttons/CreateRouteButton.jsx","Components/Mobile/Sales/Basket/CatalogueSelectItems.jsx","Components/Mobile/Sales/Basket/CatalogueBasketConfirm.jsx","Components/Mobile/Sales/Basket/Catalogue.jsx","Components/Mobile/Sales/Order.CatalogueSales.jsx","Components/Mobile/Sales/Orders/VesselOrderLineDetail/VesselOrderLineDetailHeader.jsx","Components/Mobile/Misc/LineDetailTable.jsx","Components/Mobile/Sales/Orders/VesselOrderLineDetail/VesselOrderLineDetail.jsx","Components/Widgets/OrderStatusVessel.jsx","Components/Mobile/Sales/Orders/VesselOrders.jsx","Components/Mobile/Sales/Orders/Orders.jsx","Components/Mobile/Sales/Orders/VesselOrderDetail/OrderDetailHeader.jsx","Components/Mobile/Sales/Orders/VesselOrderDetail/OrderDetailList.jsx","Components/Mobile/Sales/Orders/VesselOrderDetail/OrderDetailFooter.jsx","Components/Widgets/Filters/OrderStatusFilter.jsx","Components/Mobile/Sales/Orders/VesselOrderDetail/VesselOrderDetail.jsx","Components/Mobile/Sales/Order.History.jsx","Components/Mobile/Sales/Shipments/VesselShipments.jsx","Components/Mobile/Sales/Shipments/Shipments.jsx","Components/Mobile/Sales/Shipments/VesselShipmentDetail/VesselShipmentDetail.jsx","Components/Mobile/Sales/Order.ShipmentTracking.jsx","Components/Mobile/Sales/FlatFee/FlatFee.jsx","Components/Mobile/Sales/FlatFee/FlatFeeOrders.jsx","Components/Mobile/Sales/FlatFee/FlatFeeOrderDetail.jsx","Components/Mobile/Misc/LineDetailTable2.jsx","Components/Mobile/Sales/FlatFee/FlatFeeOrderLineDetail.jsx","Components/Mobile/Sales/Order.FlatFeeContracts.jsx","Components/Mobile/Sales/AVCSO/AVCSO_SelectItems.jsx","Components/Mobile/Sales/AVCSO/AVCSO_BasketReview.jsx","Components/Mobile/Sales/AVCSO/AVCSO_BasketConfirm.jsx","Components/Mobile/Sales/AVCSO/AVCSO.jsx","Components/Mobile/Sales/AVCSOnline.jsx","Components/Widgets/ProductGroupStatus.jsx","Components/Mobile/FleetManagement/Holdings/Holdings.jsx","Components/Widgets/Buttons/CloseButtonLink.jsx","Components/Mobile/FleetManagement/Holdings/VesselHoldingsLineDetail/VesselHoldingsLineDetail.jsx","Components/Mobile/FleetManagement/Holdings/VesselHoldingsDetail/HoldingDetailHeader.jsx","Components/Mobile/FleetManagement/Holdings/VesselHoldingsDetail/HoldingDetailList.jsx","Components/Widgets/Filters/HoldingsFilter.jsx","Components/Mobile/FleetManagement/Holdings/VesselHoldingsDetail/VesselHoldingsDetail.jsx","Components/Mobile/FleetManagement/Fleet.Holdings.jsx","Components/Widgets/Status/ChipStatus.jsx","Components/Mobile/FleetManagement/FleetStatus/FleetStatus.jsx","Components/Mobile/FleetManagement/FleetStatus/FleetStatusDetail.jsx","Components/Mobile/FleetManagement/Fleet.Status.jsx","Components/Mobile/FleetManagement/Navigator/Navigator.jsx","Components/Mobile/FleetManagement/Navigator/NavigatorUpdateList.jsx","Components/Mobile/FleetManagement/Fleet.NavigatorUpdates.jsx","Components/Mobile/FleetManagement/Details/FleetDetails.jsx","Components/Mobile/FleetManagement/Fleet.Tracking.jsx","Components/Mobile/FleetManagement/Details/FleetDetailsVessel.jsx","Components/Mobile/FleetManagement/Fleet.Overview.jsx","Components/Mobile/Misc/SelectList.jsx","Components/Mobile/_StyledComponents/ListFoilioItems.jsx","Components/Custom/ContentColumnNoMemo.jsx","Components/Mobile/Folios/ViewFolios/ViewFolios.jsx","Components/Mobile/Folios/Holdings/FolioHoldingsDetail/FolioItemDetailHeader.jsx","Components/Mobile/Folios/Holdings/FolioHoldingsDetail/FolioItemDetailList.jsx","Components/Mobile/Folios/Holdings/FolioHoldingsDetail/FolioItems.jsx","Components/Mobile/Folios/Folios.jsx","Components/Mobile/News/NewsDetail.jsx","Components/Mobile/News/News.jsx","Components/Mobile/404.jsx","Components/Mobile/Mobile.jsx","Components/Desktop/NavBar/NavMenuItem.jsx","Components/Desktop/NavBar/NavIconAccount.jsx","Components/Desktop/NavBar/NavBarLogo.jsx","Components/Desktop/NavBar/NavIconHelp.jsx","Components/Desktop/NavBar/NavBarBreadCrumbs.jsx","Components/Desktop/NavBar/NavBar.jsx","Components/Desktop/Misc/ListItemLink.jsx","Components/Desktop/Home/Summaries/SummaryCardHeader.jsx","Components/Desktop/Home/Summaries/SummaryCard.jsx","Components/Desktop/Home/Summaries/SalesSummary.jsx","Components/Desktop/Home/Summaries/FleetSummary.jsx","Components/Desktop/Home/Summaries/AnnouncementSummary.jsx","Components/Desktop/Home/Home.jsx","Components/Desktop/_StyledComponents/ListItemSub.jsx","Components/Desktop/Sales/Orders/VesselOrders.jsx","Components/Desktop/Sales/Orders/Orders.jsx","Components/Desktop/Sales/SalesOverview.jsx","Components/Desktop/Sales/Quotes/VesselQuotes.jsx","Components/Desktop/Sales/Quotes/Quotes.jsx","Components/Desktop/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetailHeader.jsx","Components/Desktop/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetailList.jsx","Components/Desktop/Misc/LineDetailTable.jsx","Components/Desktop/Sales/Quotes/VesselQuoteLineDetail/VesselQuoteLineDetail.jsx","Components/Desktop/Sales/Orders/VesselOrderLineDetail/VesselOrderLineDetailHeader.jsx","Components/Desktop/Sales/Orders/VesselOrderLineDetail/VesselOrderLineDetail.jsx","Components/Desktop/Misc/MailTo.jsx","Components/Desktop/Misc/DownloadFile.jsx","Components/Desktop/Sales/Orders/VesselOrderDetail/OrderDetailHeader.jsx","Components/Desktop/Sales/Orders/VesselOrderDetail/OrderDetailList.jsx","Components/Desktop/Sales/Orders/VesselOrderDetail/OrderDetailFooter.jsx","Components/Desktop/Sales/Orders/VesselOrderDetail/VesselOrderDetail.jsx","Components/Widgets/QuoteStatus.jsx","Components/Desktop/Sales/Quotes/VesselQuoteDetail/QuoteDetailHeader.jsx","Components/Desktop/Misc/ValidationWidget.jsx","Components/Desktop/Sales/Quotes/VesselQuoteDetail/QuoteDetailList.jsx","Components/Desktop/Sales/Quotes/VesselQuoteDetail/QuoteConfirmation.jsx","Components/Desktop/Sales/Quotes/VesselQuoteDetail/QuoteDetailFooter.jsx","Components/Desktop/Sales/Quotes/VesselQuoteDetail/VesselQuoteDetail.jsx","Components/Desktop/Sales/Catalogue/Catalogue.jsx","Components/Desktop/Sales/Catalogue/Basket/CatalogueBasketReview.jsx","Components/Desktop/Sales/Catalogue/RouteCreate/RouteUpload.jsx","Components/Desktop/Sales/Shipments/VesselShipments.jsx","Components/Desktop/Sales/Shipments/Shipments.jsx","Components/Desktop/Sales/Shipments/VesselShipmentDetail/VesselShipmentDetail.jsx","Components/Desktop/Sales/FlatFee/FlatFee.jsx","Components/Desktop/Sales/FlatFee/FlatFeeOrders.jsx","Components/Desktop/Sales/FlatFee/FlatFeeOrderDetail.jsx","Components/Desktop/Misc/LineDetailTable2.jsx","Components/Desktop/Sales/FlatFee/FlatFeeOrderLineDetail.jsx","Components/Desktop/Sales/Catalogue/Basket/CatalogueSelectVessel.jsx","Components/Desktop/Sales/Catalogue/Basket/CatalogueSelectItems.jsx","Components/Desktop/Sales/Catalogue/Basket/CatalogueBasketConfirm.jsx","Components/Desktop/Sales/AVCSO/AVCSO.jsx","Components/Desktop/Sales/AVCSO/AVCSO_SelectItems.jsx","Components/Desktop/Sales/AVCSO/AVCSO_BasketReview.jsx","Components/Desktop/Sales/AVCSO/AVCSO_BasketConfirm.jsx","Components/Desktop/Sales/Sales.jsx","Components/Desktop/Fleet/FleetOverview.jsx","Components/Desktop/Fleet/Holdings/Holdings.jsx","Components/Desktop/Fleet/Holdings/VesselHoldingsLineDetail/VesselHoldingsLineDetail.jsx","Components/Desktop/Fleet/Holdings/VesselHoldingsDetail/HoldingDetailHeader.jsx","Components/Desktop/Fleet/Holdings/VesselHoldingsDetail/HoldingDetailList.jsx","Components/Desktop/Fleet/Holdings/VesselHoldingsDetail/VesselHoldingsDetail.jsx","Components/Desktop/Fleet/FleetStatus/FleetStatus.jsx","Components/Desktop/Fleet/FleetStatus/FleetStatusDetail.jsx","Components/Desktop/Fleet/Navigator/Navigator.jsx","Components/Desktop/Fleet/Navigator/NavigatorUpdateList.jsx","Components/Desktop/Fleet/Details/FleetDetails.jsx","Components/Desktop/Fleet/Details/FleetDetailsVessel.jsx","Components/Desktop/Fleet/Fleet.jsx","Components/Desktop/Misc/SelectList.jsx","Components/Desktop/_StyledComponents/ListFoilioItems.jsx","Components/Desktop/Folios/ViewFolios/ViewFolios.jsx","Components/Desktop/Folios/Holdings/FolioHoldingsDetail/FolioItemDetailHeader.jsx","Components/Desktop/Folios/Holdings/FolioHoldingsDetail/FolioItemDetailList.jsx","Components/Desktop/Folios/Holdings/FolioHoldingsDetail/FolioItems.jsx","Components/Desktop/Folios/Folios.jsx","Components/Desktop/Account/Profile/Profile.jsx","Components/Desktop/Account/Users/Users.jsx","Components/Desktop/Account/Users/UserList.jsx","Components/Desktop/Account/Users/UserCreate.jsx","Components/Desktop/Account/Users/UserDetail.jsx","Components/Desktop/Account/Account.jsx","Components/Desktop/News/NewsList.jsx","Components/Desktop/News/NewsDetail.jsx","Components/Desktop/News/News.jsx","Components/Desktop/NavBar/FloatingMenuButton.jsx","Components/Desktop/Desktop.jsx","Components/Mobile/AccountManagement/ResetPassword.jsx","Components/Mobile/AccountManagement/ForgotPassword.jsx","Components/Mobile/AccountManagement/Mobile.Login.jsx","Components/Authentication/Login.jsx","Components/Authentication/ResetPassword.jsx","Components/Authentication/NewUserPassword.jsx","Components/Authentication/ForgotPassword.jsx","Components/Authentication/PasswordReset.jsx","Components/Authentication/UserInvitation.jsx","Components/CheckScreen.jsx","Components/AppAuthenticated.jsx","Components/Helper/Analytics.jsx","Components/Helper/CustomSnackbarContentWrapper.jsx","Components/Helper/Notifications.jsx","App.jsx","serviceWorker.js","index.js","Components/Mobile/CSS/MenuStyles.module.css","Components/Mobile/CSS/LoginStyles.module.css","Images/CT-logo-transparant.png","Components/Mobile/CSS/HomeStyles.module.css","Images/CT_TEXT.png"],"names":["module","exports","define","L","isMacOS","navigator","platform","Control","PolylineMeasure","extend","options","position","unit","useSubunits","clearMeasurementsOnStop","showBearings","bearingTextIn","bearingTextOut","tooltipTextFinish","tooltipTextDelete","tooltipTextMove","tooltipTextResume","tooltipTextAdd","tooltipDistanceText","tooltipTotalDistanceText","showFirstToolTip","measureControlTitleOn","measureControlTitleOff","measureControlLabel","measureControlClasses","showClearControl","clearControlTitle","clearControlLabel","clearControlClasses","showUnitControl","unitControlUnits","unitControlTitle","text","kilometres","landmiles","nauticalmiles","unitControlLabel","metres","feet","unitControlClasses","tempLine","color","weight","fixedLine","arrow","startCircle","fillColor","fillOpacity","radius","intermedCircle","currentCircle","endCircle","_arcpoints","_circleNr","_lineNr","_createControl","label","title","classesToAdd","container","fn","context","anchor","document","createElement","innerHTML","setAttribute","forEach","c","classList","add","DomEvent","on","appendChild","onAdd","map","self","this","_mapdragging","_container","disableClickPropagation","classes","indexOf","push","_arrPolylines","_measureControl","_toggleMeasure","_defaultControlBgColor","style","backgroundColor","_clearMeasureControl","_clearAllMeasurements","length","_unitControl","_changeUnit","onRemove","_measuring","_saveNonpolylineEvents","_nonpolylineTargets","_map","_targets","_polylineTargets","_savePolylineEvents","_oldCursor","cursor","_doubleClickZoom","doubleClickZoom","enabled","disable","_layerPaint","layerGroup","addTo","_mouseMove","_mouseClick","_onKeyDown","_resetPathVariables","remove","off","_resumeFirstpointMousemove","_resumeFirstpointClick","_dragCircleMousemove","_dragCircleMouseup","enable","_cntCircle","_finishPolylinePath","fire","status","undefined","clearLayers","indexNextUnit","_currentLine","_computeDistance","bind","line","totalDistance","circleCoords","point","point_index","distance","distanceTo","_updateTooltip","tooltips","e","keyCode","_resumeFirstpointFlag","lineNr","removeLayer","_rubberlinePath2","_tooltipNew","circleMarkers","setStyle","_icon","item","index","lastCircleCoords","mouseCoords","prevTooltip","_getDistance","dist","toFixed","value","_polylineArc","_from","_to","_GCinterpolate","f","A","Math","sin","d","B","x","cos","fromLat","fromLng","toLat","toLng","y","z","latInterpol","PI","atan2","sqrt","pow","lngInterpol","diff","trunc","n","lat","lng","asin","npoints","arrArcCoords","delta","i","coordPair","_GCarc","currentTooltip","total","difference","calcAngle","p1","p2","direction","lat1","lat2","lng1","lng2","brng","angleIn","angleOut","totalRound","differenceRound","textCurrent","textPrev","regExp","RegExp","textReplace","replace","_drawArrow","arcLine","P2","midpoint","P1","diffLng12","diffLat12","center","cssAngle","iconArrow","divIcon","className","iconSize","iconAnchor","html","newArrowMarker","marker","icon","zIndexOffset","bindTooltip","opacity","_clickedArrow","latlng","last","_rubberlinePath","setLatLngs","slice","setLatLng","distanceSegment","_startLine","clickCoords","polyline","interactive","dashArray","bringToBack","polylineState","id","arrowMarkers","polylinePath","handleMarkers","lastCircleMarker","newCircleMarker","CircleMarker","cntLine","cntCircle","_dragCircle","getNewToolTip","addPoint","equals","arc","arrowMarker","shift","getLatLngs","concat","cntArrow","tooltipNew","finalize","pop","unbindTooltip","circle","_resumePolylinePath","firstTooltip","console","log","_finishCircleScreencoords","containerPoint","originalEvent","ctrlKey","metaKey","target","arrowNr","removeFrom","splice","lineCoords","arc1","arc2","Array","prototype","apply","_e1","dragging","e2","mouseNewLat","mouseNewLng","latDifference","_mouseStartingLat","lngDifference","_mouseStartingLng","currentCircleCoords","latLng","_circleStartingLat","_circleStartingLng","arcpoints","circleNr","newLineSegment1","newLineSegment2","currentCoords","unshift","e1","shiftKey","hasLayer","newLineSegment","totalDistanceUnfinishedLine","arr","_latlng","seed","polylinesArray","ind","Map","mergeOptions","PolylineMeasureControl","addInitHook","polylineMeasureControl","PMControl","addControl","control","polylineMeasure","theme","createMuiTheme","palette","primary","main","withRoot","Component","props","CssBaseline","apiEndpoint","def","axios","create","baseURL","responseType","interceptors","request","use","config","token","getToken","headers","authorization","error","Promise","reject","userData","JSON","parse","sessionStorage","getItem","tokenData","instance","get","post","delete","endpoint","getVesselCertificateLink","VesselID","getVesselNavigatorLicenseLink","getVesselAvcsPermitLink","initialState","notifications","NotificationContext","createContext","useNotificationStore","useContext","users","user","username","firstName","lastName","email","company","appModules","appFeatures","userModules","userFeatures","appFeaturePaths","expires","UserContext","useUserStore","summary","vesselQuotes","quoteDetail","vesselOrders","orderDetail","vesselShipments","shipmentDetail","vesselFlatFees","flatFeeDetail","flatFeeOrderDetail","catalogue","vesselID","items","vesselItems","routeItems","closedProductGroups","selectedItems","itemPrices","selectedPrices","Object","selectedDuration","initialCatalogue","SaleContext","useSaleStore","vessels","routes","baskets","newsItems","productGroups","productItemGroups","currencies","portInfo","GlobalContext","useGlobalStore","mapLayers","drawerMenu","activeMenu","activeLayer","activeOverlays","activeRoutes","useFlyTo","bounds","AVCSO","layers","parameter","parameterGroup","name","Parameter","featureInfo","selectionMode","license","url","expiration","userRef","UserId","version","format","EULA","MapContext","useMapStore","fleetPositions","holdingDetail","holdingDetailItems","statusDetail","vesselUpdates","FleetContext","useFleetStore","ordered","reference","months","saveSourceBasketID","vesselItemIDs","basketLines","quoteIDs","routeItemIDs","quoteBasket","header","lines","mapItems","basketLineTemplate","itemID","quantity","itemDurations","itemPrice","BasketContext","useBasketStore","useAppSession","userActions","useState","active","setActive","refreshToken","useEffect","activityDetector","createActivityDetector","timeToIdle","stop","doRefresh","P","interval","setInterval","clearInterval","itemSourceOptions","caption","preSelect","isBasket","isQuote","isRoute","itemSource","sourceRecord","productGroup","sourceLines","selectedItemIDs","filterText","CatalogueContext","useCatalogueStore","licenseLines","avcsoItemIDs","avcsoLines","AvcsoContext","useAvcsoStore","BottomNav","Fragment","menuStyles","bottomNav","BottomNavigation","bottomNavStyle","BottomNavigationAction","href","ShoppingBasket","DirectionsBoat","Explore","Menu","shortDescription","to","subItems","MobileConfiguration","Shutdown","Code","Status","Header","ShortDescription","LongDescription","Resolve","Version","Current","PreviousVersion","Display","MobileVersion","useStyles","makeStyles","list","width","window","screen","noFormat","textDecoration","overrides","MuiListItemText","fontSize","secondary","Copyright","Grid","justify","alignItems","spacing","xs","src","CT_Logo","CT_DIST_Logo","MenuList","React","open","setOpen","subMenuItems","subMenus","List","component","key","mainMenuItem","ListItem","button","onClick","ListItemText","ExpandLess","ExpandMore","Collapse","in","timeout","unmountOnExit","disablePadding","subMenuItem","Divider","ShowMenu","mainMenu","TopNav","userState","profileState","setProfileState","left","state","setState","toggleDrawer","side","event","type","onDesktopView","localStorage","setItem","location","reload","onLogout","logout","topNav","alignContent","Button","size","whiteIcons","Drawer","onClose","role","onKeyDown","ThemeProvider","paddingTop","tnUserName","tnVesselName","getHoldingStatusClass","issue","warning","result","ItemPolygon","selected","Boolean","focused","Polygon","fill","SalesOrderLinePolygon","useMemo","polygonPoints","positions","StatusID","getSalesOrderStatusColor","salesOrderLineStatusID","checkPolygonInPoint","LatLng","polyPoints","poly","isMarkerInsidePolygon","inside","j","xi","yi","xj","yj","OrderLineStatus","getSalesOrderStatusClass","ListItemIcon","minWidth","MapPopupSalesOrderLines","popupInfo","closeKey","setCloseKey","Popup","dense","border","Link","salesOrderLineID","RouterLink","salesOrderID","disableRipple","divider","itemNumber","itemTitle","marginRight","ListItemSecondaryAction","linePrice","BaseRoute","sourceRouteID","Polyline","GeneralRoutesLayer","Routes","FeatureGroup","R","routePoints","SalesOrderLayer","match","history","mapActions","saleState","order","selectedLineID","params","lineID","filter","statusFilter","popup","setPopup","zoomToLines","find","X","filteredLines","includes","sortedLines","_","orderBy","layer","prev","SalesQuoteLinePolygon","validationID","StatusCircle","MapPopupSalesQuoteLines","classNameValidation","salesQuoteLineID","salesQuoteID","SalesQuoteLayer","quote","HoldingLinePolygon","valid","getHoldingLineColor","HoldingLineStatus","itemClass","itemIssue","itemWarning","updateClass","updateIssue","updateWarning","MapPopupHoldingLines","HoldingLayer","fleetState","vessel","selectedItemID","productGroupID","scale","productItemGroupID","inactive","managers","folios","folioItems","folioVessels","folioVesselItemStatus","folioVesselItems","folioManager","folioVessel","FolioContext","useFolioStore","inInventory","FolioLinePolygon","blackColor","FolioItemsLayer","folioState","managerID","folioID","vesID","TrackSymbol","Path","initialize","setOptions","Error","_id","trackId","_leaflet_id","_size","_heading","heading","_course","course","_speed","speed","_leaderTime","leaderTime","_minSilouetteZoom","minSilouetteZoom","setGPSRefPos","gpsRefPos","_triSymbol","defaultSymbol","_diaSymbol","noHeadingSymbol","_silSymbol","silouetteSymbol","_project","_update","_setPath","_path","getPathString","setDefaultSymbol","symbol","redraw","setNoHeadingSymbol","setSilouetteSymbol","oldLatLng","setSpeed","setCourse","setHeading","setLeaderTime","_gpsRefPos","getTrackId","_Id","_getLatSize","_getLatSizeOf","_getLngSize","_getLngSizeOf","getBounds","lngSize","latSize","LatLngBounds","getLatLng","_rotate","angle","si_z","co_z","_rotateAllPoints","points","pt","_createLeaderViewPoints","leaderLength","leaderEndLng","leaderEndLat","endPoint","latLngToLayerPoint","startPoint","_transformAllPointsToView","symbolViewCenter","_createPathFromPoints","_getViewAngleFromModel","modelAngle","_createNoHeadingSymbolPathString","viewPoints","viewPath","courseAngle","leaderPoints","_createWithHeadingSymbolPathString","headingAngle","_resizeAndMovePoint","offset","_getSizeFromGPSRefPos","_getOffsetFromGPSRefPos","_transformSilouetteSymbol","pointLng","pointLat","viewPoint","_createSilouetteSymbolPathString","silouettePoints","getZoom","_renderer","_removePath","trackSymbol","TrackMarker","opts","vesselPosition","long","vesselLocationID","parseFloat","courseMarker","headingMarker","stroke","withLeaflet","VesselPositionPopup","Vessel","VesselPosition","vesselName","mmsi","imo","logDate","speedValue","courseValue","Table","padding","TableBody","TableRow","TableCell","colSpan","Typography","variant","align","date","FleetPositionsLayer","Visible","globalState","fleetActions","loaded","getFleetPositions","showVessels","vsl","V","Tooltip","MapPopupSalesShipmentLines","salesShipmentLineID","salesShipmentID","SalesShipmentLinePolygon","SalesShipmentLayer","MapPopupPurchaseOrderLines","vesselFlatFeePeriodID","purchaseOrderID","purchaseOrderLineID","WorldAreaLayer","worldArea","description","PurchaseOrderLinePolygon","PurchaseOrderLayer","purchaseOrder","mapLines","FolioLayer","folio","number","I","FlatFeeContractLayer","flatFeeID","orderID","contractLoaded","orderLoaded","ColumnContext","useColumnStore","MapAVCSOLogo","openLink","panelDiv","DomUtil","ReactDOMServer","renderToString","AVCS_LOGO","bottom","leaflet","leafletElement","getContainer","addEventListener","removeEventListener","MapControl","Display_Params","WMSTileLayerExtended","featureInfoActive","useLeaflet","Feature","setFeature","getFeatureInfo","ev","getSize","layerString","join","sw","crs","project","_southWest","ne","_northEast","bbox","code","SERVICE","REQUEST","FORMAT","TRANSPARENT","VERSION","WIDTH","HEIGHT","CRS","BBOX","info_format","LAYERS","query_layers","Userid","userId","then","res","data","features","setAvcsoFeatureInfo","trademark","AVCS_TRADEMARK_LOGO","WMSTileLayer","uppercase","transparent","attribution","AVCSO_FeatureMarker","Marker","AVCSO_Agreement","handleAggreement","val","setAvcsoEULA","Dialog","scroll","aria-labelledby","DialogContent","height","DialogActions","AvcsoLayer","mapState","hasAVCSO","hasAppModuleID","isFeatureInfoActive","generateToken","getAvcsoEULA","getAvcsoToken","pars","groups","display","ECDISParameters","DynamicParameters","ParameterGroup","stringify","Layers","AVCSO_Options","AVCSO_LayerOptionsContainer","activeLayers","Layer","ActiveLayers","AVCSO_ParameterOptionsContainer","IsGroup","AVCSO_ParameterGroupOptionsContainer","Group","ParameterGroupOptions","groupName","Box","GroupName","ParameterOption","activeValue","grp","option","Option","Value","getOption","LayerOptionsE","default","setValue","inputLabel","useRef","labelWidth","setLabelWidth","current","offsetWidth","Description","ExpectedInput","handleValueChanged","checked","par","setAvcsoParameter","toString","displayName","FormControlLabel","Checkbox","onChange","marginTop","marginBottom","FormControl","InputLabel","ref","htmlFor","Select","MenuItem","LayerOptionsL","split","newState","margin","FormLabel","FormGroup","LayerOptionsF","TextField","fullWidth","inputProps","min","step","AvcsoLayerParameter","sortBy","setAvcsoLayers","TextFieldSearch","Placeholder","OnSearch","handleSearch","debounce","InputProps","startAdornment","InputAdornment","SearchFilter","placeholder","onSearch","onSort","setSort","hasSorting","Paper","square","elevation","IconButton","aria-label","disabled","InputBase","flexGrow","orientation","RouteContainer","setFilter","sort","defaultRoute","selectedItem","setSelectedItem","filterRoutes","route","toLowerCase","background","S","setActiveDrawerMenu","zoomTo","setActiveRoutes","onRouteClick","stopPropagation","clearActiveRoutes","onRouteClear","textAlign","underline","CircularProgress","MapInfo","displayInfo","parseInt","abs","PopupLine","closePopup","canAddItems","edge","CatalogueMapPopup","showPopup","CatalogItemPolygon","Item","Selected","Focused","CatalogueSelectLayer","globalActions","catalogueState","focusedItemID","isLoaded","routeLayer","inBasket","CatalogueBasketLayer","basketState","AvcsoFeaturePopup","isImage","link","handleClose","preventDefault","maxWidth","maxHeight","borderStyle","autoFocus","hideAtts","FeatureAttributesTable","Attributes","showAttributes","acronym","getLink","filename","fileAttr","isText","comp","baseLink","urlNotes","file","encodeURIComponent","alt","TableHead","mappedValue","media","fileAttribute","hover","whiteSpace","wordWrap","AvcsoFeatureContainer","selectedRcid","setSelectedRcid","selectedFeature","rcid","F","feature","scope","geometryType","AvcsoItemPolygon","ItemID","InInventory","AvcsoItemsLayer","avcsoState","AvcsoBasketLayer","LeafletRuler","mapRef","scaleOptions","metric","imperial","polylineMeasureOption","MapMenuBar","menuOrientation","MapMenuLayers","onLayerClick","layerID","setActiveLayer","onToggleMapMenu","Icon","onSelect","ToggleMapMenu","ActiveMenu","MapMenuOverlays","isFleetPositionsActive","overlayID","setOverlayVisible","MapMenuRouteIcon","RouteIcon","MapMenuRoutes","isRouteActive","MapMenuDrawerContainer","menuShowing","menuContainer","top","right","MapMenuItemAVCSO","hasFeatureID","MapMenuBarItemAvcsoReadme","http","MapMenuBarItemAvcsoSelectionMode","MapMenuBarItem","classNames","showMenu","showRoutes","setShowRoutes","columnStore","viewPort","zoom","setTimeout","invalidateSize","cursorValue","worldCopyJump","touchZoom","onViewportChange","onViewportChanged","LayerGroup","TileLayer","path","render","FolioVesselItemsLayer","Transition","forwardRef","Slide","FloatingMenuButton","fullScreen","TransitionComponent","menuStyling","mainDialog","floatRightClose","Fab","floatRight","MyHome","menuCategory","pathname","Card","raised","subMenu","homeStyles","homeButton","isValidateEmail","test","String","Loading","ContentColumn","children","selectedID","access","columnActions","featureAccess","setFeatureAccess","Date","hasAccess","canAccessPath","addColumn","paddingClass","borderTop","borderRight","borderBottom","Breadcrumb","Module","currentPage","breadcrumbs","Profile","loading","setLoading","password","password2","canSave","handleChange","noValidate","autoComplete","required","postData","login","catch","CardContent","CardActions","UserRow","openUser","personID","deleted","UserList","getUsers","sorted","UserCreate","creating","setCreating","setFirstName","setLastName","setEmail","setPassword","passwordRepeat","setPasswordRepeat","UserFeatures","setFeatures","p","userFeatureIDs","isEqual","hasUserManagement","appFeatureID","fid","setUserFeatures","UserDetail","Width","verticalAlign","deleteUser","AccountOptions","ButtonGroup","Account","exact","ViewProfile","NumberStatus","data-start","data-value","withRouter","subText","numberSmall","isHeader","isSelected","startsWith","hasIcon","Link1","Chip","AnnouncementLine","newsItem","chartagentNewsID","startDate","posted","NewsList","newsID","getAnnouncements","homeStyling","newsHeader","newsBody","homeMenuHeader","homeMenuBody","UserManual","colspan","class","FAQs","ID","Active","Question","Answer","FAQFile","FAQ","ExpansionPanel","ExpansionPanelSummary","expandIcon","aria-controls","ExpansionPanelDetails","ContactUs","HelpStatement","Help","listItem","ListItemVessel","subSelectedID","statusComponent","linkTo","toUpperCase","OrderStatus","openQuantity","backOrderQuantity","deliveredQuantity","shippedQuantity","totalQuantity","percentageOpen","percentageBackorder","percentageShipped","percentageDelivered","degreesOpen","ceil","degreesBackorder","degreesShipped","degreesDelivered","tooltip","start","ListItemSub","mainText","inset","ListItemSubQuote","customerReference","quoteDate","currency","totalPrice","lineCount","ListItemSubOrder","orderDate","ListItemSubShipment","shipment","salesShipmentStatus","ListItemSubFlatFeeContract","flatFeeContract","endDate","price","currencyID","getCurrency","VesselQuotes","openLoad","quotes","approvals","Quotes","salesActions","getVesselQuotes","zIndex","VesselQuoteLineDetailHeader","closePath","next","before","QuoteLineStatusButton","validateSalesQuoteLine","VesselQuoteLineDetailList","editionDate","duration","TableFooter","VesselQuoteLineDetail","currentLine","productGoup","quoteLines","SQLID_Array","MailOrderDetailTo","rel","vesselEmail","MailQuoteDetailTo","MailHoldingDetailTo","MailTo","DownloadFile","btn","DownloadQuote","DownloadOrder","DownloadHoldings","OpenShipment","SvgIcon","popLink","substring","lastIndexOf","PurpleSwitch","withStyles","switchBase","red","green","track","Switch","ValidationWidget","check","QuoteLine","onValidate","newValidation","QuoteDetailList","OpenGroups","setOpenGroups","productgroupItems","subTotal","sumBy","subTotalSelected","selectSalesQuoteLine","FormDialog","setReference","DialogTitle","DialogContentText","accept","req","confirmSalesQuote","QuoteDetailFooter","selectedLines","complete","validateSalesQuote","VesselQuoteDetail","getSalesQuote","clearSalesQuote","QuotationsApprove","BasketDurationSelector","basketActions","allMonths","displayEmpty","renderValue","newMonths","setBasketDuration","input","Input","M","BasketProductGroupListHeader","toggleOpen","isDigitalPoductGroup","productID","isDigital","BasketProductGroupListItem","month","durationChange","removeBasketItems","BasketFooter","validLines","validPrices","QTY","totalValue","C","currencyLines","currencyPrice","sum","priceString","clearData","setVessel","CatalogueBasketReview","getBasketPrices","itemsLoaded","listItems","PG","toggleClosedProductGroups","CatalogueVesselListItem","BasketActions","useHistory","CatalogueSelectVessel","vesselsLoaded","overflow","UploadButton","FileSelected","files","UploadBasketButton","from","formData","FormData","append","httpService","UploadRouteButton","PortList","ports","AddPort","DeletePort","selectedPorts","portFilterText","setPortFilterText","portCount","displayPorts","canShowMenu","getOptionLabel","getOptionValue","styles","classNamePrefix","isSearchable","onInputChange","menuIsOpen","locode","RoutingList","RoutingPoints","ToggleRoutingPoint","openPoints","tabIndex","shortCode","CreateRouteDialog","CreateRoute","setSelectedPorts","routingPoints","setRoutingPoints","routeName","setRouteName","useParams","hasPorts","allRoutingPoints","createDisabled","dividers","port","random","rps","PortCodes","RoutingCodes","openByDefault","RouteName","getRoutes","CreateRouteButton","BasketItemsAddFrom","paddingBottom","SourceItems","holdingItems","focusedIndex","findIndex","scrollToItem","itemCount","itemSize","itemData","Row","catalogueActions","some","Y","toggleSelectedItem","SourceSelector","setItemSource","SourceRecordSelector","CatalogueState","CatalogueActions","BasketSelector","selectedBasket","basketID","sourceBasketID","wrap","basket","setSourceRecord","itemIDs","basketItems","setSourceLines","QuoteSelector","selectedquote","setVesselQuotes","quoteID","loadSalesQuoteItems","RouteSelector","selectedroute","routeID","productGroupIDs","response","bufferItemIDs","CatalogueSelector","ProductGroupSelectorContainer","ProductGroupSelector","selectableProductGroupIDs","uniqBy","selectableProductGroups","PGID","setProductGroup","ProductScaleSelector","PGIDS","productScales","getProductItemGroupsLocal","multiple","newScales","setProductItemGroups","PIG","count","getSelectedProductGroupItemCount","countText","CatalogSelectFooter","selectedProductGroupItems","getSelectedProductItems","hasLines","selectedCount","hasSelected","addSelectedItems","marginLeft","removeSelectedItems","Badge","badgeContent","anchorOrigin","vertical","horizontal","addBasketItems","addSourceRecord","CatalogueSelectItems","getVesselHoldings","clearVesselHoldings","reset","loadVesselItemIDs","justifyContent","BasketSummary","BasketReference","newValue","BasketOrderButton","canOrder","hasBasketPrices","orderBasket","CatalogueBasketConfirm","BasketButtonList","showVesselName","salesStyling","salesMenu","BasketSelectVesselButton","Text","To","Location","Disabled","Done","BasketAddItemsButton","BasketReviewButton","basketItemCount","Count","BasketConfirmButton","pricesLoaded","done","BasketButton","disableFocusRipple","disableTouchRipple","SaveManagerBasket","SaveManagerBasketConfirmation","saveManagerBasket","Catalogue","Sales","VesselOrderLineDetailHeader","ActiveLicenceConfirmation","disabledButton","setDisabledButton","actionText","textTransform","setLicenseAvailability","success","sx","mx","LineDetailTable","showOrder","showLicense","showBasket","hasLine","showItem","itemStatus","VesselOrderLineDetail","orderLines","OrderStatusVessel","orders","countData","countBy","salesOrderStatusID","chartData","backorder","shipped","delivered","VesselOrders","selectedSalesOrderID","Orders","getVesselOrders","OrderLine","OrderDetailList","OrderDetailFooter","OrderStatusFilter","filterChanged","newValues","VesselOrderDetail","getSalesOrder","clearSalesOrder","statusIDs","filterSalesOrder","OrderHistory","VesselShipments","selectedsalesShipmentID","Shipments","getVesselShipments","shipments","ShipmentDetailHeader","shipmentHeader","trackingLink","hasTracking","shippingDate","md","ShipmentLineList","closedGroups","setClosedGroups","toggleProductGroup","pgid","ShipmentProductGroupHeader","ShipmentLine","VesselShipmentDetail","saleActions","detail","getVesselShipment","ShipmentTracking","FlatFeeContent","flatFees","VesselFlatFees","FlatFee","getVesselFlatFees","FlatFeeHeader","flatFee","FlatFeeOrder","FlatFeeOrders","getVesselFlatFeeOrders","flatFeeOrderSort","FlatFeeOrderDetailHeader","FlatFeeOrderDetailLineList","OrderProductGroupHeader","PurchaseOrderLine","FlatFeeOrderDetail","getVesselFlatFeeOrderDetails","LineDetailTable2","getProductGroup","customerCurrencyID","showEditionDate","showEndDate","showPrice","showPriceCurrencyID","hasPrice","showCurrencyCode","FlatFeeOrderLineDetailHeader","FlatFeeOrderLineDetail","FlatFeeContract","avcsoActions","selectedScaleIDs","AvcsoItemList","getCatalogueItems","setAvcsoLines","AvcsoItemListRow","AvcsoItemFooter","addselectedToBasket","AVCSO_SelectItems","flexDirection","AVCSO_BasketList","AVCSO_BasketListLine","priceInfo","getTotalPriceLocal","AVCSO_BasketReview","AVCSO_BasketConfirm","AvcsoLicenses","AvcsoButtonList","AvcsoAddItemsButton","AvcsoReviewButton","AvcsoConfirmButton","AvcsoInformation","RequestAvcsoInformationButton","hasLicense","hasAvcsoLicense","loadData","AVCSOnline","HoldingStatus","vesselProductGroupStatus","itemIssueCount","updateIssueCount","itemWarningCount","updateWarningCount","issues","warnings","max","HoldingLinesStatus","inactiveCount","Holdings","selectedVesselID","counter","vesselItemProductGroups","CloseButtonLink","VesselHoldingsLineDetailHeader","VesselHoldingsLineDetailList","VesselHoldingsLineDetailCorrections","itemCorrections","itemHistoryItems","detailState","setDetailState","year","week","correctionItem","CorrectionItemStatus","VesselHoldingsLineDetail","hasData","openDialog","setOpenDialog","closeDialog","HoldingProductGroup","toggleSelectedGroup","productgroupItemsAll","itemLength","HoldingLine","HoldingDetailList","selectedGroups","HoldingsFilter","setStatusFilter","scaleFilter","setScaleFilter","filterHoldingDetail","statusChange","newFilter","selectableProductItemGroups","selectedPIGs","VesselHoldingsDetail","setSelectedGroups","filterID","paddingRight","FleetHoldings","getHoldingsOverview","ChipStatusValid","ChipStatusWarning","ChipStatusIssue","ChipStatus","statusColor","VesselFleetStatusChips","totalWarning","totalIssue","totalValid","FleetStatus","VesselProductGroupStatus","FleetStatusDetail","NavigatorVesselListItem","UpdateInfo","days","blocked","NavigatorUpdates","hasUpdateInfo","getVesselUpdating","U","VesselUpdateHistory","updates","setUpdates","stickyHeader","row","edbRequestID","receiveDateTime","readableBytes","updateSize","bytes","floor","NavigatorUpdateList","FleetNavigatorStatus","FleetDetails","card","VesselDetailsHeader","findVessel","VesselDetails","VesselGeneralInfoTable","details","setDetails","O","manager","responsibleEmail","responsible","chartagent","VesselDocumentsTable","ObjectLink","avcsPermit","SendVesselCertificateIcon","VesselSubscriptionsTable","object","objectLink","subscriptionID","subscriptionService","paidUntil","paused","VesselShipmentHistory","deliveryDate","VesselApprovelsTable","expiryDate","VesselFlatFeeHistory","VesselOrderHistory","VesselHoldingStatusTable","productGroupStatus","CountChip","LinkTo","FleetDetailsVessel","FleetOverview","SelectList","dataList","inputType","setCompany","countDataResults","noDataMessage","labelId","ListFoilioItems","ContentColumnNoMemo","FolioStatus","folioStatus","itemsPresent","vesselItemsActive","itemsMissing","vesselItemsMissing","itemsSleeping","vesselItemsSleeping","Folio","folioAction","selectedManagerID","selectedFolioID","getManagers","getFolios","getFolioVessels","getFolioItems","loadedVessels","loadedFolio","loadedManagers","companyList","FolioList","FolioItemsList","itemsInInventory","itemsNotInInventory","FolioItems","folioActions","getFolioVesselItems","FolioItemDetailList","ViewFolios","NewsDetail","ReactHtmlParser","message","News","PageNotFound","backgroundImage","pageNotFoundBG","backgroundPosition","backgroundSize","backgroundRepeat","goBack","BackButton","Mobile","mainStyles","zeroBorder","contentAreaDefault","Home","MenuCategory","FlatFeeContracts","Folios","AccountSettings","PageNotFound404","MobileState","MobileConfig","oscpu","setSelected","decoration","NavIconAccount","actions","anchorEl","setAnchorEl","aria-owns","aria-haspopup","currentTarget","transformOrigin","logo","NavIconHelp","font","newModule","newCurrentPage","root","letterSpacing","flexFill","flex","NavBar","AppBar","Toolbar","fontVariant","SummaryCardHeader","image","alignSelf","SummaryCardLine","SummaryCard","borderRadius","SalesSummary","img","FleetSummary","AnnouncementSummary","HomeFooter","SalesOverviewContent","SalesOverview","QuoteStatus","accepted","rejected","confirmed","globalsActions","getBaskets","loadedHoldings","ProductItemFilter","setFilterText","overflowY","zoomToVessel","Fleet","Users","floatRightDesktop","Desktop","cPage","useLocation","ForgotPassword","formState","setFormState","Container","loginStyles","logoCenter","leftText","forms","form","InputLabelProps","shrink","endAdornment","submit","bottomLinks","ResetPassword","Title","remember","showPassword","query","queryString","search","access_token","handleClickShowPassword","validPassword","VisibilityOff","Visibility","Password","Password2","mids","Login","Username","Remember","LoadPage","HelpPage","borderColor","borderWidth","flexShrink","flexBasis","BackgroundHeader","logoContainer","logoText","loginContainer","loginText","forgotPassword","Avatar","mt","getFullYear","NewUserPassword","UserInvitation","CheckScreen","isMobile","authed","MobileORDesktop","DesktopLogin","DesktopForgotPassword","DesktopResetPassword","DesktopNewUserPassword","MobileLogin","AppAuthenticated","notificationActions","listen","ReactGA","pageview","variantIcon","CheckCircleIcon","WarningIcon","ErrorIcon","info","InfoIcon","useStyles1","dark","amber","iconVariant","CustomSnackbarContentWrapper","other","messageLines","SnackbarContent","clsx","aria-describedby","action","Notifications","notificationState","reason","closeNotification","toast","showNotification","resolve","Snackbar","autoHideDuration","isAuthenticated","content","hostname","ReactDOM","notification","displayTime","showError","msg","Provider","storage","sessionData","createStore","doLogout","statusCode","set","manually","finally","clear","clearAll","hasAdmin","newToken","now","featureIDs","amid","allowAdmin","getVessels","getPorts","getProductgroups","getProductItemgroups","alert","getCatalogue","force","getCurrencies","getCatalogueItem","uniq","isDigitalProductGroup","addRoutes","routeIDs","newRoutes","addQuoteIDs","newQuoteIDs","addVesselRouteItems","newVesselItemIDs","currentItemsIDs","newBasketLines","totalBasketLines","cat","D","setBasketLineQuantity","sourceRouteIDs","setMapItems","quotesLines","quoteBasketLines","avcso","newItemPrices","BL","prices","newVal","salesQuoteIDs","SQID","selectedIDs","itemGroupIDs","setSelectedItems","setVesselItemIDs","VIDS","record","loadRouteItems","priceLines","basketItemIDs","addItemIDs","newItemIDs","newAVCSO","overlays","zoomToPoint","gotItem","isArray","lays","newParameters","newGroups","eula","toggleAvcsoSelectionMode","getSummary","newQuoteDetail","salesQuotelineID","newQuote","vesselFlatFeeID","setCatalogueVessel","toggleCatalogueClosedProductGroups","isOpen","filterIDs","onCompleted","holdingDetailData","newDetail","managersData","thefolios","theFolioItems","theFolioVessels","theFolioVesselItems","theFolioManager","theFolioVessel","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.61b0fec3.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/ADM_ICA_DD_rgb.31935a45.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"defaultFontSize\":\"sales_defaultFontSize__2KG33\",\"salesMenu\":\"sales_salesMenu__JnB4M\"};","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAABgrToAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAS3SURBVFiFzZhfSJNfGMc/m84/6VKnqBRtqcwi3UV4IeXft5AQ2oJEvfVKvOjOu6AuvDIIugjBi4gEA++8U0JQtpz9GRIVFI2izZpvgi6Xayt95+kiPL/f29TcWNT3auf7PO9zvux5zjnPOQYhhOAfhvFvC/gdsv9E0Lt37+L1eikoKKCnp4fm5ua0YxkyneLl5WUGBgbkuKioiHv37pGVlZVWvIyn2O1268aRSITnz5+nHS/jAufm5gA4dOiQ5H4VnQoyKtDv9/Pp0ycA2tvbqaqqAsDr9fLt27e0YmZU4Pz8vPzd1taGoigAbG5usri4mFbMjAr8+vUrAFarlZMnT9La2kp29s+NYnt7O62YGRVoNBo5c+YMw8PDGAwGLBYLt27dwmKxkJub+3cFaprGwsICXV1dFBYWSt5ms9HR0SEXz18T+OTJE8xmM3a7PcmmKAo+n0+WQCrImMC5uTkURcFgMCTZjhw5QlVVlW4RHRQZEbixscGzZ89ob2/f00dRlLTSvO9Rt7q6yvj4uNzDdvt3AFRVZW1tDbvdztbW1q4+mqbx+vVrTpw4QU5Ozr6i6uvr6e3t/b3ABw8eMDIysm+wP4GSkhLGxsaA33QziqJgMpm4c+cO0WiUzs5OqqurdT5utxuHw4HFYtHxk5OT1NXVUVtbC0BWVhb5+fksLCyQSCRoaWnR+T9+/Bi3201dXR1XrlyR/L4Cc3JyOHfuHMFgkMnJSb58+cKFCxd0PvPz85SVldHR0aHjPR4PDocjqS49Hg+nTp2iqalJx09MTABw/vx5jh49KvkDLZLW1lYAfD4fsVhMZ7NarQQCgV2/2616AoEAx48f13EfPnwgGAySnZ1NY2OjznaghrWmpgar1crS0hI3b97EZrNJ2/LyMqFQKCnFq6ur+Hw+wuGw5DRNQ1VVXr58ydu3byX/4sULABoaGjCbzakLBGhpaeH+/fsEAgFKS0slbzKZCIfDsovZwffv31lfXycUChGPxwGIRqOYTCZCoZDO982bN8B/mdJBHBCqqgqXyyUuXbokPn/+LPl4PC5cLpdYX1/X+V+/fl3MzMzouJmZGXH16lUd5/f7hdPpFN3d3SIejyfNe+CNurKyErvdzvb2tu5EyMvLo6KiIqkODQZDUg0Gg8Gk+vN4PAA0NjaSl5eXNG9Kl6a2tjb8fj/T09McO3ZM8sXFxTx69EjnG41GUVVVV2uvXr3i9OnTkhNCyG77121nByldmiKRCH19fSQSCWw2GyaTCYBwOIymaZSXl0tfVVUpKCjg8OHDknv//j2VlZUkEgngZyMbDocpLCxkbGxMxtPhoDW4g2vXrgmn0ykmJiYk9/DhQzE4OKjzGxoaElNTU3IciUSEy+USsVhMciMjI8LpdIrbt2/vOV/KzcLOSvv/Rchms7G0tKSruV/P7UAgQHl5Ofn5+QAkEglZFnulF9K4uJ89e5bR0VE+fvzI7OwspaWlGI1GNE3j6dOncguKxWKsrKzIeltcXKSsrEyO3717RyQSoaSkBIfDsed8aV3cb9y4gdfrTfWzXXHx4kX6+/v3tKf19HH58mVCoVBaV0khhOyszWYznZ2d+/pn/Okj0/jnX7d+AEFJykxSQqf3AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAABgrToAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARUSURBVFiFzZbNTxNrFIeflk4DFdpSoBDK1PJlCbSkhBBphA2BRExMAF2xZcG/wJKElf8BCQsjOzARdk2BjZIACRG0KpRwgcZGwDKtwcqYtoFxcWMvvVBEnV7vWf7OR595z9vzHo2iKH8BAv9PS+oAPSD+aZIsFtbl+heCwSDRaDRDa2trQ6/XXys/54Czs7MsLS1laI8fP6akpORa+dpcQKlpGkVR3pODOxgOh4nFYsRiMWRZzvBVVlai1Wpxu91otVeeUe7u4MzMDAsLC1fGTE9Pk5+ff2VMzgALCwspLi6+Mkaj0fywjqotDgaDrKys/HSeyWSiv7//Mpe6Ld7Z2eHZs2cX9KKiItrb24lEIgQCARRFyfDbbLZsgLlrsV6vx+PxUFtbSyqV4sWLFxiNRvr7+xEEgdXVVXZ3d39YR9UWv379mq2tLUwmE58+feL58+d8+PABgLy8PE5PTwEQBIH29nYaGhoAiMfjDA4OXlYyrApgKpVif3+fvb09fD4fm5ubaZ/L5eLevXuUlJSg0WgIBALMzs7y5csXAIxGI/fv36e5uRlRFCksLFQXUJZlnjx5gt/v5+zsDIDS0lL6+vqor6/n48ePLC4usra2htFopKOjg7a2NhKJBD6fj/X19fSdtNvtjIyMUFVVpR4gwOrqKo8ePaKrq4s7d+5wdnbG0tISi4uLF4b0d6urq6O7u5u6ujq2t7eZmpqiqKiIsbExLBaLuoCyLBMKhdjY2GB+fp6DgwPg75MsKCggHA6nYwVBwOl08vbtWwAMBgOdnZ14vV6sVuv50wMIq/IWGwwGnj59yuTkZBoO4OHDhwwNDWXEejwexsbGEAQh/XF+v5/R0VGSyeSF2qqNmQcPHvDy5csMbW5u7sJrsrGxwfj4OKlUKkO/desWNTU1uQNsamrCarUSiUTS2mVz7uTkBL/ff0G/e/fupXVVW7c0Gg1ut/uX8z0ez6W6qvtgY2PjL+WJokhpaemlPlUBv78MauapClhRUXGtFerf5nA4svpUBRQE4fyQvbb9Z4AA5eXlP50jitnfCdUBnU4neXl5F/Rsf4KysjLMZnPWer81BycmJnC5XHi9XgASiQTJZJKBgQH29/cJhUJUVlZSXV3N0dER5eXlbG5uIkkSN2/exGaz8fnzZ0KhULrNoVAIv9/P8PAw8Jv74Lt37wgEArx58wadTkdBQQEtLS0cHx+zvr6OIAjE43HsdjvV1dVEo1G2t7fR6/XE43GcTieiKBKLxQgGgyiKgslkoqenh9bWVvjdld9isRCJROjs7MRisRAIBDg4OECWZW7fvo3NZkOWZZaXl9HpdEiSRG9vLwaDgVgsxqtXr6ioqGBnZwev14vZbGZtbQ2d7h8sVbaZaDTK4eEhDoeDGzduACBJEru7u1itVux2O1qtFkVR2NvbQ5IkHA4HVqsVAEVRkCSJr1+/Iori+VGlzrqVQwvrgATw/k+TZLHkN/lvsbO7hPfZAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/bg_shipmanager.22514989.jpg\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"linkformats\":\"MainStyles_linkformats__1PIEf\",\"contentAreaDefault\":\"MainStyles_contentAreaDefault__2GV7O\",\"contentAreaSpacing\":\"MainStyles_contentAreaSpacing__Yzuqq\",\"zeroBorder\":\"MainStyles_zeroBorder__fQQmz\"};","module.exports = __webpack_public_path__ + \"static/media/AVCS_LOGO.f8e421a8.png\";","module.exports = __webpack_public_path__ + \"static/media/ADM_TM.b0c7fc34.png\";","module.exports = __webpack_public_path__ + \"static/media/Route-Icon.ff32ddb7.svg\";","module.exports = __webpack_public_path__ + \"static/media/OldShip-Fading.787fc64c.jpg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAABgrToAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAO9SURBVFiF7ZjNL2tbGIefdjda1YqBaKj6ipZECCONmUgkRAwMaqiEEv+AHAOJhJEmRgzExIBEJYxE0vgYCRNKECpNQyW+EiKlHzTtvoOb9h7HdR26HQb3N9trve8vT9Za71p7LZkoiiLfWPKvBnhL/wP+rh4fHzk+PiYcDj9rV3wRzzO53W5GRka4vr4mIyODvr4+ysrKgG8wgmtra/z48YPHx0c6OzsRBIHBwcFE/5eMYCQSYWtri4WFBQ4PDwGorq6mubmZs7MznE7nnwUMBAKcn5/jdrs5ODjA5XIRDAZJS0vDYrHgcDhQKpUAiKKITCaTDjAcDuNyuQgEAoRCIUKhEMFgkJubGy4uLri4uOD+/j4Rr1KpqKiooKamBrPZjFKpxOFwEIvFPgdwcXGRqampF+0pKSmo1WpKSkowGAxkZ2dTXFxMYWEhgiAk4uJgcUkGeHd3x9LSEh6PB4CBgQF0Oh2pqamo1WqWl5eZnJyko6OD3NzcV33iMD8faEkDer1eBgYG8Pv9mEwmAAoKCsjMzHy316+AsVjsGeCHtpmxsTFisRh2ux2z2Zww/qhkMhmv/RK8GzAYDOLxeKivr8dkMv3rFH1E8XxRFJHL/8F6N2AkEkEUxcS2EDdLBvDnEfzV592A6enpaDQa9vf3E+YA0WhUMsCk1qBMJqOpqYm9vT2Gh4c5OTlJGH8G4Ieq2GKx4Pf7WVlZQavVAtIViSSACoWCnp4eurq6mJubY2ZmhqmpKXQ6HVqtFo1Gg9frBXh2ivwxwLgEQaCqqorV1VV2d3d5enp6EdPX14dKpUKn01FUVITRaKS8vJz8/PzPBwQoKSlhYmKC3t5e0tLS6O/vZ3p6GqfTSXt7Ow8PD1xdXXF5ecn6+jpra2sAZGVlUVtbS2Nj4+cCxpWXl8fOzg4ZGRlUVFTgdDopLCyksrIyERONRvF6vWxvb7O5ucns7Czz8/OIoihdFb8mg8FAMBjk9vY2MX3xCo9LEASMRiOtra2Mjo5it9spLS0lGo1yeXmJKIrc3t4+y5EMMC8vDwCfz0dubi4KhYLT09P/zDGZTAwNDdHQ0IDb7aa7uxu3201dXd3nAZ6dnSEIAnq9/k1A+LtAbDYbLS0tCIKA1Wqlra0t0S/ZGtTr9QiCgM/nS3wfHBz8Vq5cLsdqtWK1Wl/0SQaoUCgwGo1sbGxQXFzM0dEROp0uaV9Jb3U2mw25XM74+DjhcJj29vakPWVSv808PT3h8/nIyclBrVYn7Sc5oNT68ov7W/r2gH8B7oGo/iKC980AAAAASUVORK5CYII=\"","/*********************************************************\r\n ** **\r\n ** Leaflet Plugin \"Leaflet.PolylineMeasure\" **\r\n ** File \"Leaflet.PolylineMeasure.js\" **\r\n ** Date: 2023-11-07 **\r\n ** **\r\n *********************************************************/\r\n\r\n(function (factory) {\r\n /* eslint-disable */\r\n if (typeof define === \"function\" && define.amd) {\r\n // AMD\r\n define([\"leaflet\"], factory);\r\n } else if (typeof module !== \"undefined\") {\r\n // Node/CommonJS\r\n module.exports = factory(require(\"leaflet\"));\r\n } else {\r\n // Browser globals\r\n if (typeof window.L === \"undefined\") {\r\n throw new Error(\"Leaflet must be loaded first\");\r\n }\r\n factory(window.L);\r\n }\r\n})(function (L) {\r\n var _measureControlId = \"polyline-measure-control\";\r\n var _unicodeClass = \"polyline-measure-unicode-icon\";\r\n var isMacOS = navigator.platform === \"MacIntel\";\r\n\r\n /**\r\n * Polyline Measure class\r\n * @extends L.Control\r\n */\r\n L.Control.PolylineMeasure = L.Control.extend({\r\n /**\r\n * Default options for the tool\r\n * @type {Object}\r\n */\r\n options: {\r\n /**\r\n * Position to show the control. Possible values are: 'topright', 'topleft', 'bottomright', 'bottomleft'\r\n * @type {String}\r\n * @default\r\n */\r\n position: \"topleft\",\r\n /**\r\n * Default unit the distances are displayed in. Possible values are: 'kilometres', 'landmiles', 'nauticalmiles'\r\n * @type {String}\r\n * @default\r\n */\r\n unit: \"kilometres\",\r\n /**\r\n * Use subunits (metres/feet) in tooltips in case of distances less then 1 kilometre/landmile\r\n * @type {Boolean}\r\n * @default\r\n */\r\n useSubunits: true,\r\n /**\r\n * Clear all measurements when Measure Control is switched off\r\n * @type {Boolean}\r\n * @default\r\n */\r\n clearMeasurementsOnStop: true,\r\n /**\r\n * Whether bearings are displayed within the tooltips\r\n * @type {Boolean}\r\n * @default\r\n */\r\n showBearings: false,\r\n /**\r\n * Text for the bearing In\r\n * @type {String}\r\n * @default\r\n */\r\n bearingTextIn: \"In\",\r\n /**\r\n * Text for the bearing Out\r\n * @type {String}\r\n * @default\r\n */\r\n bearingTextOut: \"Out\",\r\n /**\r\n * Text for last point's tooltip\r\n * @type {String}\r\n * @default\r\n */\r\n tooltipTextFinish: \"Click to finish line
\",\r\n tooltipTextDelete: \"Press SHIFT-key and click to delete point\",\r\n tooltipTextMove: \"Click and drag to move point
\",\r\n tooltipTextResume:\r\n \"
Press \" +\r\n (isMacOS ? \"⌘\" : \"CTRL-key\") +\r\n \" and click to resume line\",\r\n tooltipTextAdd:\r\n \"Press \" +\r\n (isMacOS ? \"⌘\" : \"CTRL-key\") +\r\n \" and click to add point\",\r\n /**\r\n * Text for tooltip\r\n * @type {String}\r\n * @default\r\n */\r\n tooltipDistanceText: \"\",\r\n tooltipTotalDistanceText: \"\",\r\n\r\n /**\r\n * Tooltip\r\n * @type {Boolean}\r\n * @default\r\n */\r\n showFirstToolTip: true,\r\n\r\n /**\r\n * Title for the control going to be switched on\r\n * @type {String}\r\n * @default\r\n */\r\n measureControlTitleOn: \"Turn on PolylineMeasure\",\r\n /**\r\n * Title for the control going to be switched off\r\n * @type {String}\r\n * @default\r\n */\r\n measureControlTitleOff: \"Turn off PolylineMeasure\",\r\n /**\r\n * Label of the Measure control (maybe a unicode symbol)\r\n * @type {String}\r\n * @default\r\n */\r\n measureControlLabel: \"↦\",\r\n /**\r\n * Classes to apply to the Measure control\r\n * @type {Array}\r\n * @default\r\n */\r\n measureControlClasses: [],\r\n /**\r\n * Show a control to clear all the measurements\r\n * @type {Boolean}\r\n * @default\r\n */\r\n showClearControl: false,\r\n /**\r\n * Title text to show on the Clear measurements control button\r\n * @type {String}\r\n * @default\r\n */\r\n clearControlTitle: \"Clear Measurements\",\r\n /**\r\n * Label of the Clear control (maybe a unicode symbol)\r\n * @type {String}\r\n * @default\r\n */\r\n clearControlLabel: \"×\",\r\n /**\r\n * Classes to apply to Clear control button\r\n * @type {Array}\r\n * @default\r\n */\r\n clearControlClasses: [],\r\n /**\r\n * Show a control to change the units of measurements\r\n * @type {Boolean}\r\n * @default\r\n */\r\n showUnitControl: false,\r\n /**\r\n * The measurement units that can be cycled through by using the Unit Control button\r\n * @type {Array}\r\n * @default\r\n */\r\n unitControlUnits: [\"kilometres\", \"landmiles\", \"nauticalmiles\"],\r\n /**\r\n * Title texts to show on the Unit Control button\r\n * @type {Object}\r\n * @default\r\n */\r\n unitControlTitle: {\r\n text: \"Change Units\",\r\n kilometres: \"kilometres\",\r\n landmiles: \"land miles\",\r\n nauticalmiles: \"nautical miles\",\r\n },\r\n /**\r\n * Unit symbols to show in the Unit Control button and measurement labels\r\n * @type {Object}\r\n * @default\r\n */\r\n unitControlLabel: {\r\n metres: \"m\",\r\n kilometres: \"km\",\r\n feet: \"ft\",\r\n landmiles: \"mi\",\r\n nauticalmiles: \"nm\",\r\n },\r\n /**\r\n * Classes to apply to the Unit control\r\n * @type {Array}\r\n * @default\r\n */\r\n unitControlClasses: [],\r\n\r\n /**\r\n * Styling settings for the temporary dashed rubberline\r\n * @type {Object}\r\n */\r\n tempLine: {\r\n /**\r\n * Dashed line color\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#00f\",\r\n /**\r\n * Dashed line weight\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 2,\r\n },\r\n /**\r\n * Styling for the fixed polyline\r\n * @type {Object}\r\n */\r\n fixedLine: {\r\n /**\r\n * Solid line color\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#006\",\r\n /**\r\n * Solid line weight\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 2,\r\n },\r\n /**\r\n * Styling of the midway arrow\r\n * @type {Object}\r\n */\r\n arrow: {\r\n /**\r\n * Color of the arrow\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#000\",\r\n },\r\n /**\r\n * Style settings for circle marker indicating the starting point of the polyline\r\n * @type {Object}\r\n */\r\n startCircle: {\r\n /**\r\n * Color of the border of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#000\",\r\n /**\r\n * Weight of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 1,\r\n /**\r\n * Fill color of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n fillColor: \"#0f0\",\r\n /**\r\n * Fill opacity of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n fillOpacity: 1,\r\n /**\r\n * Radius of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n radius: 3,\r\n },\r\n /**\r\n * Style settings for all circle markers between startCircle and endCircle\r\n * @type {Object}\r\n */\r\n intermedCircle: {\r\n /**\r\n * Color of the border of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#000\",\r\n /**\r\n * Weight of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 1,\r\n /**\r\n * Fill color of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n fillColor: \"#ff0\",\r\n /**\r\n * Fill opacity of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n fillOpacity: 1,\r\n /**\r\n * Radius of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n radius: 3,\r\n },\r\n /**\r\n * Style settings for circle marker indicating the latest point of the polyline during drawing a line\r\n * @type {Object}\r\n */\r\n currentCircle: {\r\n /**\r\n * Color of the border of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#000\",\r\n /**\r\n * Weight of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 1,\r\n /**\r\n * Fill color of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n fillColor: \"#f0f\",\r\n /**\r\n * Fill opacity of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n fillOpacity: 1,\r\n /**\r\n * Radius of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n radius: 6,\r\n },\r\n /**\r\n * Style settings for circle marker indicating the end point of the polyline\r\n * @type {Object}\r\n */\r\n endCircle: {\r\n /**\r\n * Color of the border of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n color: \"#000\",\r\n /**\r\n * Weight of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n weight: 1,\r\n /**\r\n * Fill color of the circle\r\n * @type {String}\r\n * @default\r\n */\r\n fillColor: \"#f00\",\r\n /**\r\n * Fill opacity of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n fillOpacity: 1,\r\n /**\r\n * Radius of the circle\r\n * @type {Number}\r\n * @default\r\n */\r\n radius: 3,\r\n },\r\n },\r\n\r\n _arcpoints: 99, // 99 points = 98 line segments. lower value to make arc less accurate or increase value to make it more accurate.\r\n _circleNr: -1,\r\n _lineNr: -1,\r\n\r\n /**\r\n * Create a control button\r\n * @param {String} label Label to add\r\n * @param {String} title Title to show on hover\r\n * @param {Array} classesToAdd Collection of classes to add\r\n * @param {Element} container Parent element\r\n * @param {Function} fn Callback function to run\r\n * @param {Object} context Context\r\n * @returns {Element} Created element\r\n * @private\r\n */\r\n _createControl: function (\r\n label,\r\n title,\r\n classesToAdd,\r\n container,\r\n fn,\r\n context\r\n ) {\r\n var anchor = document.createElement(\"a\");\r\n anchor.innerHTML = label;\r\n anchor.setAttribute(\"title\", title);\r\n classesToAdd.forEach(function (c) {\r\n anchor.classList.add(c);\r\n });\r\n L.DomEvent.on(anchor, \"click\", fn, context);\r\n container.appendChild(anchor);\r\n return anchor;\r\n },\r\n\r\n /**\r\n * Method to fire on add to map\r\n * @param {Object} map Map object\r\n * @returns {Element} Containing element\r\n */\r\n onAdd: function (map) {\r\n var self = this;\r\n // needed to avoid creating points by mouseclick during dragging the map\r\n map.on(\"movestart \", function () {\r\n self._mapdragging = true;\r\n });\r\n this._container = document.createElement(\"div\");\r\n this._container.classList.add(\"leaflet-bar\");\r\n L.DomEvent.disableClickPropagation(this._container); // otherwise drawing process would instantly start at controls' container or double click would zoom-in map\r\n var title = this.options.measureControlTitleOn;\r\n var label = this.options.measureControlLabel;\r\n var classes = this.options.measureControlClasses;\r\n if (label.indexOf(\"&\") != -1) {\r\n classes.push(_unicodeClass);\r\n }\r\n\r\n // initialize state\r\n this._arrPolylines = [];\r\n this._measureControl = this._createControl(\r\n label,\r\n title,\r\n classes,\r\n this._container,\r\n this._toggleMeasure,\r\n this\r\n );\r\n this._defaultControlBgColor = this._measureControl.style.backgroundColor;\r\n this._measureControl.setAttribute(\"id\", _measureControlId);\r\n if (this.options.showClearControl) {\r\n var title = this.options.clearControlTitle;\r\n var label = this.options.clearControlLabel;\r\n var classes = this.options.clearControlClasses;\r\n if (label.indexOf(\"&\") != -1) {\r\n classes.push(_unicodeClass);\r\n }\r\n this._clearMeasureControl = this._createControl(\r\n label,\r\n title,\r\n classes,\r\n this._container,\r\n this._clearAllMeasurements,\r\n this\r\n );\r\n this._clearMeasureControl.classList.add(\r\n \"polyline-measure-clearControl\"\r\n );\r\n }\r\n\r\n // There is no point in using the unitControl if there are no units to choose from.\r\n if (\r\n this.options.showUnitControl &&\r\n this.options.unitControlUnits.length > 1\r\n ) {\r\n var label = this.options.unitControlLabel[this.options.unit];\r\n var title =\r\n this.options.unitControlTitle.text +\r\n \" [\" +\r\n this.options.unitControlTitle[this.options.unit] +\r\n \"]\";\r\n\r\n var classes = this.options.unitControlClasses;\r\n this._unitControl = this._createControl(\r\n label,\r\n title,\r\n classes,\r\n this._container,\r\n this._changeUnit,\r\n this\r\n );\r\n this._unitControl.setAttribute(\"id\", \"unitControlId\");\r\n }\r\n return this._container;\r\n },\r\n\r\n /**\r\n * Method to fire on remove from map\r\n */\r\n onRemove: function () {\r\n if (this._measuring) {\r\n this._toggleMeasure();\r\n }\r\n },\r\n\r\n // turn off all Leaflet-own events of markers (popups, tooltips). Needed to allow creating points on top of markers\r\n _saveNonpolylineEvents: function () {\r\n this._nonpolylineTargets = this._map._targets;\r\n if (typeof this._polylineTargets !== \"undefined\") {\r\n this._map._targets = this._polylineTargets;\r\n } else {\r\n this._map._targets = {};\r\n }\r\n },\r\n\r\n // on disabling the measure add-on, save Polyline-measure events and enable the former Leaflet-own events again\r\n _savePolylineEvents: function () {\r\n this._polylineTargets = this._map._targets;\r\n this._map._targets = this._nonpolylineTargets;\r\n },\r\n\r\n /**\r\n * Toggle the measure functionality on or off\r\n * @private\r\n */\r\n _toggleMeasure: function () {\r\n this._measuring = !this._measuring;\r\n if (this._measuring) {\r\n // if measuring is going to be switched on\r\n this._mapdragging = false;\r\n this._saveNonpolylineEvents();\r\n this._measureControl.classList.add(\"polyline-measure-controlOnBgColor\");\r\n this._measureControl.style.backgroundColor =\r\n this.options.backgroundColor;\r\n this._measureControl.title = this.options.measureControlTitleOff;\r\n this._oldCursor = this._map._container.style.cursor; // save former cursor type\r\n this._map._container.style.cursor = \"crosshair\";\r\n this._doubleClickZoom = this._map.doubleClickZoom.enabled(); // save former status of doubleClickZoom\r\n this._map.doubleClickZoom.disable();\r\n // create LayerGroup \"layerPaint\" (only) the first time Measure Control is switched on\r\n if (!this._layerPaint) {\r\n this._layerPaint = L.layerGroup().addTo(this._map);\r\n }\r\n this._map.on(\"mousemove\", this._mouseMove, this); // enable listing to 'mousemove', 'click', 'keydown' events\r\n this._map.on(\"click\", this._mouseClick, this);\r\n L.DomEvent.on(document, \"keydown\", this._onKeyDown, this);\r\n this._resetPathVariables();\r\n } else {\r\n // if measuring is going to be switched off\r\n this._savePolylineEvents();\r\n this._measureControl.classList.remove(\r\n \"polyline-measure-controlOnBgColor\"\r\n );\r\n this._measureControl.style.backgroundColor =\r\n this._defaultControlBgColor;\r\n this._measureControl.title = this.options.measureControlTitleOn;\r\n this._map._container.style.cursor = this._oldCursor;\r\n this._map.off(\"mousemove\", this._mouseMove, this);\r\n this._map.off(\"click\", this._mouseClick, this);\r\n this._map.off(\"mousemove\", this._resumeFirstpointMousemove, this);\r\n this._map.off(\"click\", this._resumeFirstpointClick, this);\r\n this._map.off(\"mousemove\", this._dragCircleMousemove, this);\r\n this._map.off(\"mouseup\", this._dragCircleMouseup, this);\r\n L.DomEvent.off(document, \"keydown\", this._onKeyDown, this);\r\n if (this._doubleClickZoom) {\r\n this._map.doubleClickZoom.enable();\r\n }\r\n if (this.options.clearMeasurementsOnStop && this._layerPaint) {\r\n this._clearAllMeasurements();\r\n }\r\n // to remove temp. Line if line at the moment is being drawn and not finished while clicking the control\r\n if (this._cntCircle !== 0) {\r\n this._finishPolylinePath();\r\n }\r\n }\r\n // allow easy to connect the measure control to the app, f.e. to disable the selection on the map when the measurement is turned on\r\n this._map.fire(\"polylinemeasure:toggle\", { status: this._measuring });\r\n },\r\n\r\n /**\r\n * Clear all measurements from the map\r\n */\r\n _clearAllMeasurements: function () {\r\n if (this._cntCircle !== undefined && this._cntCircle !== 0) {\r\n this._finishPolylinePath();\r\n }\r\n if (this._layerPaint) {\r\n this._layerPaint.clearLayers();\r\n }\r\n this._arrPolylines = [];\r\n this._map.fire(\"polylinemeasure:clear\");\r\n },\r\n\r\n _changeUnit: function () {\r\n // Retrieve the index of the next available unit of measurement.\r\n let indexCurrUnit = this.options.unitControlUnits.indexOf(\r\n this.options.unit\r\n );\r\n let indexNextUnit =\r\n (indexCurrUnit + 1) % this.options.unitControlUnits.length;\r\n\r\n // Update the unit of measurement.\r\n this.options.unit = this.options.unitControlUnits[indexNextUnit];\r\n this._unitControl.innerHTML =\r\n this.options.unitControlLabel[this.options.unit];\r\n this._unitControl.title =\r\n this.options.unitControlTitle.text +\r\n \" [\" +\r\n this.options.unitControlTitle[this.options.unit] +\r\n \"]\";\r\n\r\n if (this._currentLine) {\r\n this._computeDistance(this._currentLine);\r\n }\r\n this._arrPolylines.map(this._computeDistance.bind(this));\r\n },\r\n\r\n _computeDistance: function (line) {\r\n var totalDistance = 0;\r\n line.circleCoords.map(\r\n function (point, point_index) {\r\n if (point_index >= 1) {\r\n var distance = line.circleCoords[point_index - 1].distanceTo(\r\n line.circleCoords[point_index]\r\n );\r\n totalDistance += distance;\r\n this._updateTooltip(\r\n line.tooltips[point_index],\r\n line.tooltips[point_index - 1],\r\n totalDistance,\r\n distance,\r\n line.circleCoords[point_index - 1],\r\n line.circleCoords[point_index]\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n },\r\n\r\n /**\r\n * Event to fire when a keyboard key is depressed.\r\n * Currently only watching for ESC key (= keyCode 27). 1st press finishes line, 2nd press turns Measuring off.\r\n * @param {Object} e Event\r\n * @private\r\n */\r\n _onKeyDown: function (e) {\r\n if (e.keyCode === 27) {\r\n // if resuming a line at its first point is active\r\n if (this._resumeFirstpointFlag === true) {\r\n this._resumeFirstpointFlag = false;\r\n var lineNr = this._lineNr;\r\n this._map.off(\"mousemove\", this._resumeFirstpointMousemove, this);\r\n this._map.off(\"click\", this._resumeFirstpointClick, this);\r\n this._layerPaint.removeLayer(this._rubberlinePath2);\r\n this._layerPaint.removeLayer(this._tooltipNew);\r\n this._arrPolylines[lineNr].circleMarkers[0].setStyle(\r\n this.options.startCircle\r\n );\r\n var text = \"\";\r\n var totalDistance = 0;\r\n if (this.options.showBearings === true) {\r\n text =\r\n this.options.bearingTextIn +\r\n \":---°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n text =\r\n text +\r\n '
' +\r\n this.options.tooltipDistanceText +\r\n \": +0
\";\r\n text =\r\n text + '
' +\r\n this.options.tooltipTotalDistanceText +\r\n + \": 0
\";\r\n this._arrPolylines[lineNr].tooltips[0]._icon.innerHTML = text;\r\n this._arrPolylines[lineNr].tooltips.map(\r\n function (item, index) {\r\n if (index >= 1) {\r\n var distance = this._arrPolylines[lineNr].circleCoords[\r\n index - 1\r\n ].distanceTo(this._arrPolylines[lineNr].circleCoords[index]);\r\n var lastCircleCoords =\r\n this._arrPolylines[lineNr].circleCoords[index - 1];\r\n var mouseCoords =\r\n this._arrPolylines[lineNr].circleCoords[index];\r\n totalDistance += distance;\r\n var prevTooltip =\r\n this._arrPolylines[lineNr].tooltips[index - 1];\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n this._map.on(\"mousemove\", this._mouseMove, this);\r\n return;\r\n }\r\n if (!this._currentLine) {\r\n // if NOT drawing a line, ESC will directly switch of measuring\r\n this._toggleMeasure();\r\n } else {\r\n // if drawing a line, ESC will finish the current line\r\n this._finishPolylinePath(e);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Get the distance in the format specified in the options\r\n * @param {Number} distance Distance to convert\r\n * @returns {{value: *, unit: *}}\r\n * @private\r\n */\r\n _getDistance: function (distance) {\r\n var dist = distance;\r\n var unit;\r\n if (this.options.unit === \"nauticalmiles\") {\r\n unit = this.options.unitControlLabel.nauticalmiles;\r\n if (dist >= 185200) {\r\n dist = (dist / 1852).toFixed(0);\r\n } else if (dist >= 18520) {\r\n dist = (dist / 1852).toFixed(1);\r\n } else if (dist >= 1852) {\r\n dist = (dist / 1852).toFixed(2);\r\n } else {\r\n dist = (dist / 1852).toFixed(3); // there's no subunit of Nautical Miles for horizontal length measurements. \"Cable length\" (1/10th of 1 nm) is rarely used\r\n }\r\n } else if (this.options.unit === \"landmiles\") {\r\n unit = this.options.unitControlLabel.landmiles;\r\n if (dist >= 160934.4) {\r\n dist = (dist / 1609.344).toFixed(0);\r\n } else if (dist >= 16093.44) {\r\n dist = (dist / 1609.344).toFixed(1);\r\n } else if (dist >= 1609.344) {\r\n dist = (dist / 1609.344).toFixed(2);\r\n } else {\r\n if (!this.options.useSubunits) {\r\n dist = (dist / 1609.344).toFixed(4);\r\n } else {\r\n dist = (dist / 0.3048).toFixed(0);\r\n unit = this.options.unitControlLabel.feet;\r\n }\r\n }\r\n } else {\r\n unit = this.options.unitControlLabel.kilometres;\r\n if (dist >= 100000) {\r\n dist = (dist / 1000).toFixed(0);\r\n } else if (dist >= 10000) {\r\n dist = (dist / 1000).toFixed(1);\r\n } else if (dist >= 1000) {\r\n dist = (dist / 1000).toFixed(2);\r\n } else {\r\n if (!this.options.useSubunits) {\r\n dist = (dist / 1000).toFixed(4);\r\n } else {\r\n dist = dist.toFixed(1);\r\n unit = this.options.unitControlLabel.metres;\r\n }\r\n }\r\n }\r\n return { value: dist, unit: unit };\r\n },\r\n\r\n /**\r\n * Calculate Great-circle Arc (= shortest distance on a sphere like the Earth) between two coordinates\r\n * formulas: http://www.edwilliams.org/avform.htm\r\n * @private\r\n */\r\n _polylineArc: function (_from, _to) {\r\n function _GCinterpolate(f) {\r\n var A = Math.sin((1 - f) * d) / Math.sin(d);\r\n var B = Math.sin(f * d) / Math.sin(d);\r\n var x =\r\n A * Math.cos(fromLat) * Math.cos(fromLng) +\r\n B * Math.cos(toLat) * Math.cos(toLng);\r\n var y =\r\n A * Math.cos(fromLat) * Math.sin(fromLng) +\r\n B * Math.cos(toLat) * Math.sin(toLng);\r\n var z = A * Math.sin(fromLat) + B * Math.sin(toLat);\r\n // atan2 better than atan-function cause results are from -pi to +pi\r\n // => results of latInterpol, lngInterpol always within range -180° ... +180° => conversion into values < -180° or > + 180° has to be done afterwards\r\n var latInterpol =\r\n (180 / Math.PI) *\r\n Math.atan2(z, Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)));\r\n var lngInterpol = (180 / Math.PI) * Math.atan2(y, x);\r\n // don't split polyline if it crosses dateline ( -180° or +180°). Without the polyline would look like: +179° ==> +180° ==> -180° ==> -179°...\r\n // algo: if difference lngInterpol-from.lng is > 180° there's been an unwanted split from +180 to -180 cause an arc can never span >180°\r\n var diff = lngInterpol - (fromLng * 180) / Math.PI;\r\n function trunc(n) {\r\n return Math[n > 0 ? \"floor\" : \"ceil\"](n);\r\n } // alternatively we could use the new Math.trunc method, but Internet Explorer doesn't know it\r\n if (diff < 0) {\r\n lngInterpol = lngInterpol - trunc((diff - 180) / 360) * 360;\r\n } else {\r\n lngInterpol = lngInterpol - trunc((diff + 180) / 360) * 360;\r\n }\r\n return [latInterpol, lngInterpol];\r\n }\r\n\r\n function _GCarc(npoints) {\r\n var arrArcCoords = [];\r\n var delta = 1.0 / (npoints - 1);\r\n // first point of Arc should NOT be returned\r\n for (var i = 0; i < npoints; i++) {\r\n var step = delta * i;\r\n var coordPair = _GCinterpolate(step);\r\n arrArcCoords.push(coordPair);\r\n }\r\n return arrArcCoords;\r\n }\r\n\r\n var fromLat = _from.lat; // work with with copies of object's elements _from.lat and _from.lng, otherwise they would get modiefied due to call-by-reference on Objects in Javascript\r\n var fromLng = _from.lng;\r\n var toLat = _to.lat;\r\n var toLng = _to.lng;\r\n fromLat = (fromLat * Math.PI) / 180;\r\n fromLng = (fromLng * Math.PI) / 180;\r\n toLat = (toLat * Math.PI) / 180;\r\n toLng = (toLng * Math.PI) / 180;\r\n var d =\r\n 2.0 *\r\n Math.asin(\r\n Math.sqrt(\r\n Math.pow(Math.sin((fromLat - toLat) / 2.0), 2) +\r\n Math.cos(fromLat) *\r\n Math.cos(toLat) *\r\n Math.pow(Math.sin((fromLng - toLng) / 2.0), 2)\r\n )\r\n );\r\n var arrLatLngs;\r\n if (d === 0) {\r\n arrLatLngs = [[fromLat, fromLng]];\r\n } else {\r\n arrLatLngs = _GCarc(this._arcpoints);\r\n }\r\n return arrLatLngs;\r\n },\r\n\r\n /**\r\n * Update the tooltip distance\r\n * @param {Number} total Total distance\r\n * @param {Number} difference Difference in distance between 2 points\r\n * @private\r\n */\r\n _updateTooltip: function (\r\n currentTooltip,\r\n prevTooltip,\r\n total,\r\n difference,\r\n lastCircleCoords,\r\n mouseCoords\r\n ) {\r\n // Explanation of formula: http://www.movable-type.co.uk/scripts/latlong.html\r\n var calcAngle = function (p1, p2, direction) {\r\n var lat1 = (p1.lat / 180) * Math.PI;\r\n var lat2 = (p2.lat / 180) * Math.PI;\r\n var lng1 = (p1.lng / 180) * Math.PI;\r\n var lng2 = (p2.lng / 180) * Math.PI;\r\n var y = Math.sin(lng2 - lng1) * Math.cos(lat2);\r\n var x =\r\n Math.cos(lat1) * Math.sin(lat2) -\r\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1);\r\n if (direction === \"inbound\") {\r\n var brng = ((Math.atan2(y, x) * 180) / Math.PI + 180).toFixed(0);\r\n } else {\r\n var brng = ((Math.atan2(y, x) * 180) / Math.PI + 360).toFixed(0);\r\n }\r\n return brng % 360;\r\n };\r\n\r\n var angleIn = calcAngle(mouseCoords, lastCircleCoords, \"inbound\");\r\n var angleOut = calcAngle(lastCircleCoords, mouseCoords, \"outbound\");\r\n var totalRound = this._getDistance(total);\r\n var differenceRound = this._getDistance(difference);\r\n var textCurrent = \"\";\r\n if (differenceRound.value > 0) {\r\n if (this.options.showBearings === true) {\r\n textCurrent =\r\n this.options.bearingTextIn +\r\n \": \" +\r\n angleIn +\r\n \"°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n textCurrent +=\r\n '
' +\r\n this.options.tooltipDistanceText +\r\n \": +\" +\r\n differenceRound.value +\r\n \" \" +\r\n differenceRound.unit +\r\n \"
\";\r\n }\r\n textCurrent +=\r\n '
' +\r\n this.options.tooltipTotalDistanceText +\r\n \": \" +\r\n totalRound.value +\r\n \" \" +\r\n totalRound.unit +\r\n \"
\";\r\n currentTooltip._icon.innerHTML = textCurrent;\r\n if (this.options.showBearings === true && prevTooltip) {\r\n var textPrev = prevTooltip._icon.innerHTML;\r\n var regExp = new RegExp(this.options.bearingTextOut + \".*°\");\r\n var textReplace = textPrev.replace(\r\n regExp,\r\n this.options.bearingTextOut + \": \" + angleOut + \"°\"\r\n );\r\n prevTooltip._icon.innerHTML = textReplace;\r\n }\r\n },\r\n\r\n _drawArrow: function (arcLine) {\r\n // center of Great-circle distance, NOT of the arc on a Mercator map! reason: a) to complicated b) map not always Mercator c) good optical feature to see where real center of distance is not the \"virtual\" warped arc center due to Mercator projection\r\n // differ between even and odd pointed Arcs. If even the arrow is in the center of the middle line-segment, if odd it is on the middle point\r\n var midpoint = Math.trunc(arcLine.length / 2);\r\n if (arcLine.length % 2 == 0) {\r\n var P1 = arcLine[midpoint - 1];\r\n var P2 = arcLine[midpoint];\r\n var diffLng12 = P2[1] - P1[1];\r\n var diffLat12 = P2[0] - P1[0];\r\n var center = [P1[0] + diffLat12 / 2, P1[1] + diffLng12 / 2];\r\n } else {\r\n var P1 = arcLine[midpoint - 1];\r\n var P2 = arcLine[midpoint + 1];\r\n var diffLng12 = P2[1] - P1[1];\r\n var diffLat12 = P2[0] - P1[0];\r\n var center = arcLine[midpoint];\r\n }\r\n // angle just an aprroximation, which could be somewhat off if Line runs near high latitudes. Use of *geographical coords* for line segment P1 to P2 is best method. Use of *Pixel coords* for just one arc segement P1 to P2 could create for short lines unexact rotation angles, and the use Use of Pixel coords between endpoints [0] to [98] (in case of 99-point-arc) results in even more rotation difference for high latitudes as with geogrpaphical coords-method\r\n var cssAngle = -Math.atan2(diffLat12, diffLng12) * 57.29578; // convert radiant to degree as needed for use as CSS value; cssAngle is opposite to mathematical angle.\r\n var iconArrow = L.divIcon({\r\n className: \"\", // to avoid getting a default class with paddings and borders assigned by Leaflet\r\n iconSize: [16, 16],\r\n iconAnchor: [8, 8],\r\n // html : \"\" <<=== alternative method by the use of an image instead of a Unicode symbol.\r\n html:\r\n \"
\", // best results if iconSize = font-size = line-height and iconAnchor font-size/2 .both values needed to position symbol in center of L.divIcon for all font-sizes.\r\n });\r\n var newArrowMarker = L.marker(center, {\r\n icon: iconArrow,\r\n zIndexOffset: -50,\r\n }).addTo(this._layerPaint); // zIndexOffset to draw arrows below tooltips\r\n if (!this._currentLine) {\r\n // just bind tooltip if not drawing line anymore, cause following the instruction of tooltip is just possible when not drawing a line\r\n newArrowMarker.bindTooltip(this.options.tooltipTextAdd, {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n });\r\n }\r\n newArrowMarker.on(\"click\", this._clickedArrow, this);\r\n return newArrowMarker;\r\n },\r\n\r\n /**\r\n * Event to fire on mouse move\r\n * @param {Object} e Event\r\n * @private\r\n */\r\n _mouseMove: function (e) {\r\n var mouseCoords = e.latlng;\r\n this._map.on(\"click\", this._mouseClick, this); // necassary for _dragCircle. If switched on already within _dragCircle an unwanted click is fired at the end of the drag.\r\n if (!mouseCoords || !this._currentLine) {\r\n return;\r\n }\r\n var lastCircleCoords = this._currentLine.circleCoords.last();\r\n this._rubberlinePath.setLatLngs(\r\n this._polylineArc(lastCircleCoords, mouseCoords)\r\n );\r\n var currentTooltip = this._currentLine.tooltips.last();\r\n var prevTooltip = this._currentLine.tooltips.slice(-2, -1)[0];\r\n currentTooltip.setLatLng(mouseCoords);\r\n var distanceSegment = mouseCoords.distanceTo(lastCircleCoords);\r\n this._updateTooltip(\r\n currentTooltip,\r\n prevTooltip,\r\n this._currentLine.distance + distanceSegment,\r\n distanceSegment,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n },\r\n\r\n _startLine: function (clickCoords) {\r\n var icon = L.divIcon({\r\n className: \"polyline-measure-tooltip\",\r\n iconAnchor: [-4, -4],\r\n });\r\n var last = function () {\r\n return this.slice(-1)[0];\r\n };\r\n this._rubberlinePath = L.polyline([], {\r\n // Style of temporary, dashed line while moving the mouse\r\n color: this.options.tempLine.color,\r\n weight: this.options.tempLine.weight,\r\n interactive: false,\r\n dashArray: \"8,8\",\r\n })\r\n .addTo(this._layerPaint)\r\n .bringToBack();\r\n\r\n var polylineState = this; // use \"polylineState\" instead of \"this\" to allow measuring on 2 different maps the same time\r\n\r\n this._currentLine = {\r\n id: 0,\r\n circleCoords: [],\r\n circleMarkers: [],\r\n arrowMarkers: [],\r\n tooltips: [],\r\n distance: 0,\r\n\r\n polylinePath: L.polyline([], {\r\n // Style of fixed, polyline after mouse is clicked\r\n color: this.options.fixedLine.color,\r\n weight: this.options.fixedLine.weight,\r\n interactive: false,\r\n })\r\n .addTo(this._layerPaint)\r\n .bringToBack(),\r\n\r\n handleMarkers: function (latlng) {\r\n // update style on previous marker\r\n var lastCircleMarker = this.circleMarkers.last();\r\n if (lastCircleMarker) {\r\n lastCircleMarker.bindTooltip(\r\n polylineState.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n lastCircleMarker.off(\r\n \"click\",\r\n polylineState._finishPolylinePath,\r\n polylineState\r\n );\r\n if (this.circleMarkers.length === 1) {\r\n lastCircleMarker.setStyle(polylineState.options.startCircle);\r\n } else {\r\n lastCircleMarker.setStyle(polylineState.options.intermedCircle);\r\n }\r\n }\r\n var newCircleMarker = new L.CircleMarker(\r\n latlng,\r\n polylineState.options.currentCircle\r\n ).addTo(polylineState._layerPaint);\r\n newCircleMarker.bindTooltip(\r\n polylineState.options.tooltipTextFinish +\r\n polylineState.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n newCircleMarker.cntLine = polylineState._currentLine.id;\r\n newCircleMarker.cntCircle = polylineState._cntCircle;\r\n polylineState._cntCircle++;\r\n newCircleMarker.on(\r\n \"mousedown\",\r\n polylineState._dragCircle,\r\n polylineState\r\n );\r\n newCircleMarker.on(\r\n \"click\",\r\n polylineState._finishPolylinePath,\r\n polylineState\r\n );\r\n this.circleMarkers.push(newCircleMarker);\r\n },\r\n\r\n getNewToolTip: function (latlng) {\r\n return L.marker(latlng, {\r\n icon: icon,\r\n interactive: false,\r\n });\r\n },\r\n\r\n addPoint: function (mouseCoords) {\r\n var lastCircleCoords = this.circleCoords.last();\r\n if (lastCircleCoords && lastCircleCoords.equals(mouseCoords)) {\r\n // don't add a new circle if the click was onto the last circle\r\n return;\r\n }\r\n this.circleCoords.push(mouseCoords);\r\n // update polyline\r\n if (this.circleCoords.length > 1) {\r\n var arc = polylineState._polylineArc(lastCircleCoords, mouseCoords);\r\n var arrowMarker = polylineState._drawArrow(arc);\r\n if (this.circleCoords.length > 2) {\r\n arc.shift(); // remove first coordinate of the arc, cause it is identical with last coordinate of previous arc\r\n }\r\n this.polylinePath.setLatLngs(\r\n this.polylinePath.getLatLngs().concat(arc)\r\n );\r\n // following lines needed especially for Mobile Browsers where we just use mouseclicks. No mousemoves, no tempLine.\r\n arrowMarker.cntLine = polylineState._currentLine.id;\r\n arrowMarker.cntArrow = polylineState._cntCircle - 1;\r\n polylineState._currentLine.arrowMarkers.push(arrowMarker);\r\n var distanceSegment = lastCircleCoords.distanceTo(mouseCoords);\r\n this.distance += distanceSegment;\r\n var currentTooltip = polylineState._currentLine.tooltips.last();\r\n var prevTooltip = polylineState._currentLine.tooltips.slice(\r\n -1,\r\n -2\r\n )[0];\r\n polylineState._updateTooltip(\r\n currentTooltip,\r\n prevTooltip,\r\n this.distance,\r\n distanceSegment,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n // update last tooltip with final value\r\n if (currentTooltip) {\r\n currentTooltip.setLatLng(mouseCoords);\r\n }\r\n // add new tooltip to update on mousemove\r\n var tooltipNew = this.getNewToolTip(mouseCoords);\r\n tooltipNew.addTo(polylineState._layerPaint);\r\n this.tooltips.push(tooltipNew);\r\n this.handleMarkers(mouseCoords);\r\n },\r\n\r\n finalize: function () {\r\n // remove tooltip created by last click\r\n polylineState._layerPaint.removeLayer(this.tooltips.last());\r\n this.tooltips.pop();\r\n // remove temporary rubberline\r\n polylineState._layerPaint.removeLayer(polylineState._rubberlinePath);\r\n if (this.circleCoords.length > 1) {\r\n this.tooltips\r\n .last()\r\n ._icon.classList.add(\"polyline-measure-tooltip-end\"); // add Class e.g. another background-color to the Previous Tooltip (which is the last fixed tooltip, cause the moving tooltip is being deleted later)\r\n var lastCircleMarker = this.circleMarkers.last();\r\n lastCircleMarker.setStyle(polylineState.options.endCircle);\r\n // use Leaflet's own tooltip method to shwo a popuo tooltip if user hovers the last circle of a polyline\r\n lastCircleMarker.unbindTooltip(); // to close the opened Tooltip after it's been opened after click onto point to finish the line\r\n polylineState._currentLine.circleMarkers.map(function (circle) {\r\n circle.bindTooltip(\r\n polylineState.options.tooltipTextMove +\r\n polylineState.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n });\r\n polylineState._currentLine.circleMarkers[0].bindTooltip(\r\n polylineState.options.tooltipTextMove +\r\n polylineState.options.tooltipTextDelete +\r\n polylineState.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n lastCircleMarker.bindTooltip(\r\n polylineState.options.tooltipTextMove +\r\n polylineState.options.tooltipTextDelete +\r\n polylineState.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n polylineState._currentLine.arrowMarkers.map(function (arrow) {\r\n arrow.bindTooltip(polylineState.options.tooltipTextAdd, {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n });\r\n });\r\n lastCircleMarker.off(\r\n \"click\",\r\n polylineState._finishPolylinePath,\r\n polylineState\r\n );\r\n lastCircleMarker.on(\r\n \"click\",\r\n polylineState._resumePolylinePath,\r\n polylineState\r\n );\r\n polylineState._arrPolylines[this.id] = this;\r\n } else {\r\n // if there is only one point, just clean it up\r\n polylineState._layerPaint.removeLayer(this.circleMarkers.last());\r\n polylineState._layerPaint.removeLayer(this.tooltips.last());\r\n }\r\n polylineState._resetPathVariables();\r\n },\r\n };\r\n\r\n var firstTooltip = L.marker(clickCoords, {\r\n icon: icon,\r\n interactive: false,\r\n });\r\n firstTooltip.addTo(this._layerPaint);\r\n var text = \"\";\r\n if (this.options.showBearings === true) {\r\n text =\r\n this.options.bearingTextIn +\r\n \":---°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n text =\r\n text +\r\n '
' +\r\n this.options.tooltipDistanceText +\r\n \": +0
\";\r\n text =\r\n text +\r\n '
' +\r\n this.options.tooltipTotalDistanceText +\r\n \": 0
\";\r\n firstTooltip._icon.innerHTML = text;\r\n this._currentLine.tooltips.push(firstTooltip); \r\n this._currentLine.tooltips[0] \r\n ._icon.classList.add(\"polyline-measure-tooltip-start\");\r\n\r\n this._currentLine.circleCoords.last = last;\r\n this._currentLine.tooltips.last = last;\r\n this._currentLine.circleMarkers.last = last;\r\n this._currentLine.id = this._arrPolylines.length;\r\n\r\n console.log(this._currentLine.tooltips);\r\n },\r\n\r\n /**\r\n * Event to fire on mouse click\r\n * @param {Object} e Event\r\n * @private\r\n */\r\n _mouseClick: function (e) {\r\n // skip if there are no coords provided by the event, or this event's screen coordinates match those of finishing CircleMarker for the line we just completed\r\n if (\r\n !e.latlng ||\r\n (this._finishCircleScreencoords &&\r\n this._finishCircleScreencoords.equals(e.containerPoint))\r\n ) {\r\n return;\r\n }\r\n\r\n if (!this._currentLine && !this._mapdragging) {\r\n this._startLine(e.latlng);\r\n this._map.fire(\"polylinemeasure:start\", this._currentLine);\r\n }\r\n // just create a point if the map isn't dragged during the mouseclick.\r\n if (!this._mapdragging) {\r\n this._currentLine.addPoint(e.latlng);\r\n this._map.fire(\"polylinemeasure:add\", e);\r\n this._map.fire(\"polylinemeasure:change\", this._currentLine);\r\n } else {\r\n this._mapdragging = false; // this manual setting to \"false\" needed, instead of a \"moveend\"-Event. Cause the mouseclick of a \"moveend\"-event immediately would create a point too the same time.\r\n }\r\n },\r\n\r\n /**\r\n * Finish the drawing of the path by clicking onto the last circle or pressing ESC-Key\r\n * @private\r\n */\r\n _finishPolylinePath: function (e) {\r\n this._map.fire(\"polylinemeasure:finish\", this._currentLine);\r\n this._currentLine.finalize();\r\n if (e) {\r\n this._finishCircleScreencoords = e.containerPoint;\r\n }\r\n },\r\n\r\n /**\r\n * Resume the drawing of a polyline by pressing CTRL-Key and clicking onto the last circle\r\n * @private\r\n */\r\n _resumePolylinePath: function (e) {\r\n if (\r\n e.originalEvent.ctrlKey === true ||\r\n e.originalEvent.metaKey === true\r\n ) {\r\n // just resume if user pressed the CTRL-Key (or metaKey on Mac) while clicking onto the last circle\r\n this._currentLine = this._arrPolylines[e.target.cntLine];\r\n this._rubberlinePath = L.polyline([], {\r\n // Style of temporary, rubberline while moving the mouse\r\n color: this.options.tempLine.color,\r\n weight: this.options.tempLine.weight,\r\n interactive: false,\r\n dashArray: \"8,8\",\r\n })\r\n .addTo(this._layerPaint)\r\n .bringToBack();\r\n this._currentLine.tooltips\r\n .last()\r\n ._icon.classList.remove(\"polyline-measure-tooltip-end\"); // remove extra CSS-class of previous, last tooltip\r\n var tooltipNew = this._currentLine.getNewToolTip(e.latlng);\r\n tooltipNew.addTo(this._layerPaint);\r\n this._currentLine.tooltips.push(tooltipNew);\r\n this._currentLine.circleMarkers.last().unbindTooltip(); // remove popup-tooltip of previous, last circleMarker\r\n this._currentLine.circleMarkers\r\n .last()\r\n .bindTooltip(\r\n this.options.tooltipTextMove + this.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._currentLine.circleMarkers\r\n .last()\r\n .setStyle(this.options.currentCircle);\r\n this._cntCircle = this._currentLine.circleCoords.length;\r\n this._map.fire(\"polylinemeasure:resume\", this._currentLine);\r\n }\r\n },\r\n\r\n /**\r\n * After completing a path, reset all the values to prepare in creating the next polyline measurement\r\n * @private\r\n */\r\n _resetPathVariables: function () {\r\n this._cntCircle = 0;\r\n this._currentLine = null;\r\n },\r\n\r\n _clickedArrow: function (e) {\r\n if (e.originalEvent.ctrlKey || e.originalEvent.metaKey) {\r\n // (metaKey for Mac)\r\n var lineNr = e.target.cntLine;\r\n var arrowNr = e.target.cntArrow;\r\n this._arrPolylines[lineNr].arrowMarkers[arrowNr].removeFrom(\r\n this._layerPaint\r\n );\r\n var newCircleMarker = new L.CircleMarker(\r\n e.latlng,\r\n this.options.intermedCircle\r\n ).addTo(this._layerPaint);\r\n newCircleMarker.cntLine = lineNr;\r\n newCircleMarker.on(\"mousedown\", this._dragCircle, this);\r\n newCircleMarker.bindTooltip(\r\n this.options.tooltipTextMove + this.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._arrPolylines[lineNr].circleMarkers.splice(\r\n arrowNr + 1,\r\n 0,\r\n newCircleMarker\r\n );\r\n this._arrPolylines[lineNr].circleMarkers.map(function (item, index) {\r\n item.cntCircle = index;\r\n });\r\n this._arrPolylines[lineNr].circleCoords.splice(\r\n arrowNr + 1,\r\n 0,\r\n e.latlng\r\n );\r\n var lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs(); // get Coords of each Point of the current Polyline\r\n var arc1 = this._polylineArc(\r\n this._arrPolylines[lineNr].circleCoords[arrowNr],\r\n e.latlng\r\n );\r\n arc1.pop();\r\n var arc2 = this._polylineArc(\r\n e.latlng,\r\n this._arrPolylines[lineNr].circleCoords[arrowNr + 2]\r\n );\r\n Array.prototype.splice.apply(\r\n lineCoords,\r\n [arrowNr * (this._arcpoints - 1), this._arcpoints].concat(arc1, arc2)\r\n );\r\n this._arrPolylines[lineNr].polylinePath.setLatLngs(lineCoords);\r\n var arrowMarker = this._drawArrow(arc1);\r\n this._arrPolylines[lineNr].arrowMarkers[arrowNr] = arrowMarker;\r\n arrowMarker = this._drawArrow(arc2);\r\n this._arrPolylines[lineNr].arrowMarkers.splice(\r\n arrowNr + 1,\r\n 0,\r\n arrowMarker\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers.map(function (item, index) {\r\n item.cntLine = lineNr;\r\n item.cntArrow = index;\r\n });\r\n this._tooltipNew = L.marker(e.latlng, {\r\n icon: L.divIcon({\r\n className: \"polyline-measure-tooltip\",\r\n iconAnchor: [-4, -4],\r\n }),\r\n interactive: false,\r\n });\r\n this._tooltipNew.addTo(this._layerPaint);\r\n this._arrPolylines[lineNr].tooltips.splice(\r\n arrowNr + 1,\r\n 0,\r\n this._tooltipNew\r\n );\r\n var totalDistance = 0;\r\n this._arrPolylines[lineNr].tooltips.map(\r\n function (item, index) {\r\n if (index >= 1) {\r\n var distance = this._arrPolylines[lineNr].circleCoords[\r\n index - 1\r\n ].distanceTo(this._arrPolylines[lineNr].circleCoords[index]);\r\n var lastCircleCoords =\r\n this._arrPolylines[lineNr].circleCoords[index - 1];\r\n var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\r\n totalDistance += distance;\r\n var prevTooltip = this._arrPolylines[lineNr].tooltips[index - 1];\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n this._map.fire(\"polylinemeasure:insert\", e);\r\n this._map.fire(\r\n \"polylinemeasure:change\",\r\n this._arrPolylines[this._lineNr]\r\n );\r\n }\r\n },\r\n\r\n _dragCircleMouseup: function () {\r\n // bind new popup-tooltip to the last CircleMArker if dragging finished\r\n if (\r\n this._circleNr === 0 ||\r\n this._circleNr ===\r\n this._arrPolylines[this._lineNr].circleCoords.length - 1\r\n ) {\r\n this._e1.target.bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n } else {\r\n this._e1.target.bindTooltip(\r\n this.options.tooltipTextMove + this.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n }\r\n this._resetPathVariables();\r\n this._map.off(\"mousemove\", this._dragCircleMousemove, this);\r\n this._map.dragging.enable();\r\n this._map.on(\"mousemove\", this._mouseMove, this);\r\n this._map.off(\"mouseup\", this._dragCircleMouseup, this);\r\n this._map.fire(\"polylinemeasure:move\", this._e1);\r\n this._map.fire(\r\n \"polylinemeasure:change\",\r\n this._arrPolylines[this._lineNr]\r\n );\r\n },\r\n\r\n _dragCircleMousemove: function (e2) {\r\n var mouseNewLat = e2.latlng.lat;\r\n var mouseNewLng = e2.latlng.lng;\r\n var latDifference = mouseNewLat - this._mouseStartingLat;\r\n var lngDifference = mouseNewLng - this._mouseStartingLng;\r\n var currentCircleCoords = L.latLng(\r\n this._circleStartingLat + latDifference,\r\n this._circleStartingLng + lngDifference\r\n );\r\n var arcpoints = this._arcpoints;\r\n var lineNr = this._e1.target.cntLine;\r\n this._lineNr = lineNr;\r\n var circleNr = this._e1.target.cntCircle;\r\n this._circleNr = circleNr;\r\n this._e1.target.setLatLng(currentCircleCoords);\r\n this._e1.target.unbindTooltip(); // unbind popup-tooltip cause otherwise it would be annoying during dragging, or popup instantly again if it's just closed\r\n this._arrPolylines[lineNr].circleCoords[circleNr] = currentCircleCoords;\r\n var lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs(); // get Coords of each Point of the current Polyline\r\n if (circleNr >= 1) {\r\n // redraw previous arc just if circle is not starting circle of polyline\r\n var newLineSegment1 = this._polylineArc(\r\n this._arrPolylines[lineNr].circleCoords[circleNr - 1],\r\n currentCircleCoords\r\n );\r\n // the next line's syntax has to be used since Internet Explorer doesn't know new spread operator (...) for inserting the individual elements of an array as 3rd argument of the splice method; Otherwise we could write: lineCoords.splice (circleNr*(arcpoints-1), arcpoints, ...newLineSegment1);\r\n Array.prototype.splice.apply(\r\n lineCoords,\r\n [(circleNr - 1) * (arcpoints - 1), arcpoints].concat(newLineSegment1)\r\n );\r\n var arrowMarker = this._drawArrow(newLineSegment1);\r\n arrowMarker.cntLine = lineNr;\r\n arrowMarker.cntArrow = circleNr - 1;\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr - 1].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr - 1] = arrowMarker;\r\n }\r\n if (circleNr < this._arrPolylines[lineNr].circleCoords.length - 1) {\r\n // redraw following arc just if circle is not end circle of polyline\r\n var newLineSegment2 = this._polylineArc(\r\n currentCircleCoords,\r\n this._arrPolylines[lineNr].circleCoords[circleNr + 1]\r\n );\r\n Array.prototype.splice.apply(\r\n lineCoords,\r\n [circleNr * (arcpoints - 1), arcpoints].concat(newLineSegment2)\r\n );\r\n arrowMarker = this._drawArrow(newLineSegment2);\r\n arrowMarker.cntLine = lineNr;\r\n arrowMarker.cntArrow = circleNr;\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr] = arrowMarker;\r\n }\r\n this._arrPolylines[lineNr].polylinePath.setLatLngs(lineCoords);\r\n if (circleNr >= 0 && this._arrPolylines[lineNr].tooltips[circleNr]) {\r\n // just update tooltip position if moved circle is 2nd, 3rd, 4th etc. circle of a polyline\r\n this._arrPolylines[lineNr].tooltips[circleNr].setLatLng(\r\n currentCircleCoords\r\n );\r\n }\r\n var totalDistance = 0;\r\n // update tooltip texts of each tooltip\r\n this._arrPolylines[lineNr].tooltips.map(\r\n function (item, index) {\r\n if (index >= 1) {\r\n var distance = this._arrPolylines[lineNr].circleCoords[\r\n index - 1\r\n ].distanceTo(this._arrPolylines[lineNr].circleCoords[index]);\r\n var lastCircleCoords =\r\n this._arrPolylines[lineNr].circleCoords[index - 1];\r\n var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\r\n totalDistance += distance;\r\n this._arrPolylines[lineNr].distance = totalDistance;\r\n var prevTooltip = this._arrPolylines[lineNr].tooltips[index - 1];\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n this._map.on(\"mouseup\", this._dragCircleMouseup, this);\r\n },\r\n\r\n _resumeFirstpointMousemove: function (e) {\r\n var lineNr = this._lineNr;\r\n this._map.on(\"click\", this._resumeFirstpointClick, this); // necassary for _dragCircle. If switched on already within _dragCircle an unwanted click is fired at the end of the drag.\r\n var mouseCoords = e.latlng;\r\n this._rubberlinePath2.setLatLngs(\r\n this._polylineArc(mouseCoords, currentCircleCoords)\r\n );\r\n this._tooltipNew.setLatLng(mouseCoords);\r\n var totalDistance = 0;\r\n var distance = mouseCoords.distanceTo(\r\n this._arrPolylines[lineNr].circleCoords[0]\r\n );\r\n var lastCircleCoords = mouseCoords;\r\n var currentCoords = this._arrPolylines[lineNr].circleCoords[0];\r\n totalDistance += distance;\r\n var prevTooltip = this._tooltipNew;\r\n var currentTooltip = this._arrPolylines[lineNr].tooltips[0];\r\n this._updateTooltip(\r\n currentTooltip,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n currentCoords\r\n );\r\n this._arrPolylines[lineNr].tooltips.map(\r\n function (item, index) {\r\n if (index >= 1) {\r\n var distance = this._arrPolylines[lineNr].circleCoords[\r\n index - 1\r\n ].distanceTo(this._arrPolylines[lineNr].circleCoords[index]);\r\n var lastCircleCoords =\r\n this._arrPolylines[lineNr].circleCoords[index - 1];\r\n var mouseCoords = this._arrPolylines[lineNr].circleCoords[index];\r\n totalDistance += distance;\r\n var prevTooltip = this._arrPolylines[lineNr].tooltips[index - 1];\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n },\r\n\r\n _resumeFirstpointClick: function (e) {\r\n var lineNr = this._lineNr;\r\n this._resumeFirstpointFlag = false;\r\n this._map.off(\"mousemove\", this._resumeFirstpointMousemove, this);\r\n this._map.off(\"click\", this._resumeFirstpointClick, this);\r\n this._layerPaint.removeLayer(this._rubberlinePath2);\r\n this._arrPolylines[lineNr].circleMarkers[0].setStyle(\r\n this.options.intermedCircle\r\n );\r\n this._arrPolylines[lineNr].circleMarkers[0].unbindTooltip();\r\n this._arrPolylines[lineNr].circleMarkers[0].bindTooltip(\r\n this.options.tooltipTextMove + this.options.tooltipTextDelete,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n var newCircleMarker = new L.CircleMarker(\r\n e.latlng,\r\n this.options.startCircle\r\n ).addTo(this._layerPaint);\r\n newCircleMarker.cntLine = lineNr;\r\n newCircleMarker.cntCircle = 0;\r\n newCircleMarker.on(\"mousedown\", this._dragCircle, this);\r\n newCircleMarker.bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._arrPolylines[lineNr].circleMarkers.unshift(newCircleMarker);\r\n this._arrPolylines[lineNr].circleMarkers.map(function (item, index) {\r\n item.cntCircle = index;\r\n });\r\n this._arrPolylines[lineNr].circleCoords.unshift(e.latlng);\r\n var arc = this._polylineArc(e.latlng, currentCircleCoords);\r\n var arrowMarker = this._drawArrow(arc);\r\n this._arrPolylines[lineNr].arrowMarkers.unshift(arrowMarker);\r\n this._arrPolylines[lineNr].arrowMarkers.map(function (item, index) {\r\n item.cntLine = lineNr;\r\n item.cntArrow = index;\r\n });\r\n arc.pop(); // remove last coordinate of arc, cause it's already part of the next arc.\r\n this._arrPolylines[lineNr].polylinePath.setLatLngs(\r\n arc.concat(this._arrPolylines[lineNr].polylinePath.getLatLngs())\r\n );\r\n this._arrPolylines[lineNr].tooltips.unshift(this._tooltipNew);\r\n this._map.on(\"mousemove\", this._mouseMove, this);\r\n },\r\n\r\n // not just used for dragging Cirles but also for deleting circles and resuming line at its starting point.\r\n _dragCircle: function (e1) {\r\n var arcpoints = this._arcpoints;\r\n if (e1.originalEvent.ctrlKey || e1.originalEvent.metaKey) {\r\n // if user wants to resume drawing a line. metaKey for Mac\r\n this._map.off(\"click\", this._mouseClick, this); // to avoid unwanted creation of a new line if CTRL-clicked onto a point\r\n // if user wants resume the line at its starting point\r\n if (e1.target.cntCircle === 0) {\r\n this._resumeFirstpointFlag = true;\r\n this._lineNr = e1.target.cntLine;\r\n var lineNr = this._lineNr;\r\n this._circleNr = e1.target.cntCircle;\r\n currentCircleCoords = e1.latlng;\r\n this._arrPolylines[lineNr].circleMarkers[0].setStyle(\r\n this.options.currentCircle\r\n );\r\n this._rubberlinePath2 = L.polyline([], {\r\n // Style of temporary, rubberline while moving the mouse\r\n color: this.options.tempLine.color,\r\n weight: this.options.tempLine.weight,\r\n interactive: false,\r\n dashArray: \"8,8\",\r\n })\r\n .addTo(this._layerPaint)\r\n .bringToBack();\r\n this._tooltipNew = L.marker(currentCircleCoords, {\r\n icon: L.divIcon({\r\n className: \"polyline-measure-tooltip\",\r\n iconAnchor: [-4, -4],\r\n }),\r\n interactive: false,\r\n });\r\n this._tooltipNew.addTo(this._layerPaint);\r\n var text = \"\";\r\n if (this.options.showBearings === true) {\r\n text =\r\n text +\r\n this.options.bearingTextIn +\r\n \":---°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n text =\r\n text +\r\n '
+' +\r\n \"0
\";\r\n text =\r\n text + '
' + \"0
\";\r\n this._tooltipNew._icon.innerHTML = text;\r\n this._map.off(\"mousemove\", this._mouseMove, this);\r\n this._map.on(\"mousemove\", this._resumeFirstpointMousemove, this);\r\n }\r\n return;\r\n }\r\n\r\n // if user wants to delete a circle\r\n if (e1.originalEvent.shiftKey) {\r\n // it's not possible to use \"ALT-Key\" instead, cause this won't work in some Linux distributions (there it's the default hotkey for moving windows)\r\n this._lineNr = e1.target.cntLine;\r\n var lineNr = this._lineNr;\r\n this._circleNr = e1.target.cntCircle;\r\n var circleNr = this._circleNr;\r\n\r\n // if there is a rubberlinePath-layer and rubberline-id = clicked line-id of point meaning user is deleting a point of current line being drawn\r\n if (\r\n this._layerPaint.hasLayer(this._rubberlinePath) &&\r\n lineNr === this._currentLine.id\r\n ) {\r\n // when you're drawing and deleting point you need to take it into account by decreasing _cntCircle\r\n this._cntCircle--;\r\n // if the last Circle in polyline is being removed\r\n if (this._currentLine.circleMarkers.length === 1) {\r\n this._currentLine.finalize();\r\n return;\r\n }\r\n\r\n this._currentLine.circleCoords.splice(circleNr, 1);\r\n this._currentLine.circleMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._currentLine.circleMarkers.splice(circleNr, 1);\r\n this._currentLine.circleMarkers.map(function (item, index) {\r\n item.cntCircle = index;\r\n });\r\n lineCoords = this._currentLine.polylinePath.getLatLngs();\r\n this._currentLine.tooltips[circleNr].removeFrom(this._layerPaint);\r\n this._currentLine.tooltips.splice(circleNr, 1);\r\n\r\n // if first Circle is being removed\r\n if (circleNr === 0) {\r\n if (this._currentLine.circleMarkers.length === 1) {\r\n this._currentLine.circleMarkers[0].setStyle(\r\n this.options.currentCircle\r\n );\r\n } else {\r\n this._currentLine.circleMarkers[0].setStyle(\r\n this.options.startCircle\r\n );\r\n }\r\n lineCoords.splice(0, arcpoints - 1);\r\n this._currentLine.circleMarkers[0].bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._currentLine.arrowMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._currentLine.arrowMarkers.splice(0, 1);\r\n var text = \"\";\r\n if (this.options.showBearings === true) {\r\n text =\r\n this.options.bearingTextIn +\r\n \":---°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n text =\r\n text +\r\n '
+' +\r\n \"0
\";\r\n text =\r\n text + '
' + \"0
\";\r\n this._currentLine.tooltips[0]._icon.innerHTML = text;\r\n // if last Circle is being removed\r\n } else if (circleNr === this._currentLine.circleCoords.length) {\r\n this._currentLine.circleMarkers[circleNr - 1].on(\r\n \"click\",\r\n this._resumePolylinePath,\r\n this\r\n );\r\n this._currentLine.circleMarkers[circleNr - 1].bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._currentLine.circleMarkers\r\n .slice(-1)[0]\r\n .setStyle(this.options.currentCircle); // get last element of the array\r\n lineCoords.splice(-(arcpoints - 1), arcpoints - 1);\r\n this._currentLine.arrowMarkers[circleNr - 1].removeFrom(\r\n this._layerPaint\r\n );\r\n this._currentLine.arrowMarkers.splice(-1, 1);\r\n // if intermediate Circle is being removed\r\n } else {\r\n newLineSegment = this._polylineArc(\r\n this._currentLine.circleCoords[circleNr - 1],\r\n this._currentLine.circleCoords[circleNr]\r\n );\r\n Array.prototype.splice.apply(\r\n lineCoords,\r\n [(circleNr - 1) * (arcpoints - 1), 2 * arcpoints - 1].concat(\r\n newLineSegment\r\n )\r\n );\r\n this._currentLine.arrowMarkers[circleNr - 1].removeFrom(\r\n this._layerPaint\r\n );\r\n this._currentLine.arrowMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n arrowMarker = this._drawArrow(newLineSegment);\r\n this._currentLine.arrowMarkers.splice(circleNr - 1, 2, arrowMarker);\r\n }\r\n this._currentLine.polylinePath.setLatLngs(lineCoords);\r\n this._currentLine.arrowMarkers.map(function (item, index) {\r\n item.cntLine = lineNr;\r\n item.cntArrow = index;\r\n });\r\n var totalDistanceUnfinishedLine = 0;\r\n this._currentLine.tooltips.map(\r\n function (item, index, arr) {\r\n if (index >= 1) {\r\n var distance, mouseCoords;\r\n var prevTooltip = this._currentLine.tooltips[index - 1];\r\n var lastCircleCoords =\r\n this._currentLine.circleCoords[index - 1];\r\n if (index === arr.length - 1) {\r\n distance = this._currentLine.circleCoords[\r\n index - 1\r\n ].distanceTo(e1.latlng);\r\n mouseCoords = e1.latlng;\r\n // if this is the last Circle (mouse cursor) then don't sum the distance, but update tooltip like it was summed\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistanceUnfinishedLine + distance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n } else {\r\n distance = this._currentLine.circleCoords[\r\n index - 1\r\n ].distanceTo(this._currentLine.circleCoords[index]);\r\n mouseCoords = this._currentLine.circleCoords[index];\r\n // if this is not the last Circle (mouse cursor) then sum the distance\r\n totalDistanceUnfinishedLine += distance;\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistanceUnfinishedLine,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }\r\n }.bind(this)\r\n );\r\n\r\n // update _currentLine distance after point deletion\r\n this._currentLine.distance = totalDistanceUnfinishedLine;\r\n } else {\r\n if (this._arrPolylines[lineNr].circleMarkers.length === 2) {\r\n // if there are just 2 remaining points, delete all these points and the remaining line, since there should not stay a lonely point the map\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].circleMarkers[1]\r\n );\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].tooltips[1]\r\n );\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].circleMarkers[0]\r\n );\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].tooltips[0]\r\n );\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].arrowMarkers[0]\r\n );\r\n this._layerPaint.removeLayer(\r\n this._arrPolylines[lineNr].polylinePath\r\n );\r\n this._map.fire(\"polylinemeasure:remove\", e1);\r\n this._map.fire(\r\n \"polylinemeasure:change\",\r\n this._arrPolylines[this._lineNr]\r\n );\r\n return;\r\n }\r\n\r\n this._arrPolylines[lineNr].circleCoords.splice(circleNr, 1);\r\n this._arrPolylines[lineNr].circleMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].circleMarkers.splice(circleNr, 1);\r\n this._arrPolylines[lineNr].circleMarkers.map(function (item, index) {\r\n item.cntCircle = index;\r\n });\r\n var lineCoords = this._arrPolylines[lineNr].polylinePath.getLatLngs();\r\n this._arrPolylines[lineNr].tooltips[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].tooltips.splice(circleNr, 1);\r\n\r\n // if the last Circle in polyline is being removed (in the code above, so length will be equal 0)\r\n if (!this._arrPolylines[lineNr].circleMarkers.length) {\r\n this._arrPolylines.splice(lineNr, 1);\r\n // when you delete the line in the middle of array, other lines indexes change, so you need to update line number of markers and circles\r\n this._arrPolylines.forEach(function (line, index) {\r\n line.circleMarkers.map(function (item) {\r\n item.cntLine = index;\r\n });\r\n line.arrowMarkers.map(function (item) {\r\n item.cntLine = index;\r\n });\r\n });\r\n\r\n return;\r\n }\r\n // if first Circle is being removed\r\n if (circleNr === 0) {\r\n this._arrPolylines[lineNr].circleMarkers[0].setStyle(\r\n this.options.startCircle\r\n );\r\n lineCoords.splice(0, arcpoints - 1);\r\n this._arrPolylines[lineNr].circleMarkers[0].bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers.splice(0, 1);\r\n var text = \"\";\r\n if (this.options.showBearings === true) {\r\n text =\r\n this.options.bearingTextIn +\r\n \":---°
\" +\r\n this.options.bearingTextOut +\r\n \":---°\";\r\n }\r\n text =\r\n text +\r\n '
+' +\r\n \"0
\";\r\n text =\r\n text + '
' + \"0
\";\r\n this._arrPolylines[lineNr].tooltips[0]._icon.innerHTML = text;\r\n // if last Circle is being removed\r\n } else if (\r\n circleNr === this._arrPolylines[lineNr].circleCoords.length\r\n ) {\r\n this._arrPolylines[lineNr].circleMarkers[circleNr - 1].on(\r\n \"click\",\r\n this._resumePolylinePath,\r\n this\r\n );\r\n this._arrPolylines[lineNr].circleMarkers[circleNr - 1].bindTooltip(\r\n this.options.tooltipTextMove +\r\n this.options.tooltipTextDelete +\r\n this.options.tooltipTextResume,\r\n {\r\n direction: \"top\",\r\n opacity: 0.7,\r\n className: \"polyline-measure-popupTooltip\",\r\n }\r\n );\r\n this._arrPolylines[lineNr].circleMarkers\r\n .slice(-1)[0]\r\n .setStyle(this.options.endCircle); // get last element of the array\r\n this._arrPolylines[lineNr].tooltips\r\n .slice(-1)[0]\r\n ._icon.classList.add(\"polyline-measure-tooltip-end\");\r\n lineCoords.splice(-(arcpoints - 1), arcpoints - 1);\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr - 1].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers.splice(-1, 1);\r\n // if intermediate Circle is being removed\r\n } else {\r\n var newLineSegment = this._polylineArc(\r\n this._arrPolylines[lineNr].circleCoords[circleNr - 1],\r\n this._arrPolylines[lineNr].circleCoords[circleNr]\r\n );\r\n Array.prototype.splice.apply(\r\n lineCoords,\r\n [(circleNr - 1) * (arcpoints - 1), 2 * arcpoints - 1].concat(\r\n newLineSegment\r\n )\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr - 1].removeFrom(\r\n this._layerPaint\r\n );\r\n this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(\r\n this._layerPaint\r\n );\r\n var arrowMarker = this._drawArrow(newLineSegment);\r\n this._arrPolylines[lineNr].arrowMarkers.splice(\r\n circleNr - 1,\r\n 2,\r\n arrowMarker\r\n );\r\n }\r\n this._arrPolylines[lineNr].polylinePath.setLatLngs(lineCoords);\r\n this._arrPolylines[lineNr].arrowMarkers.map(function (item, index) {\r\n item.cntLine = lineNr;\r\n item.cntArrow = index;\r\n });\r\n var totalDistance = 0;\r\n this._arrPolylines[lineNr].tooltips.map(\r\n function (item, index) {\r\n if (index >= 1) {\r\n var distance = this._arrPolylines[lineNr].circleCoords[\r\n index - 1\r\n ].distanceTo(this._arrPolylines[lineNr].circleCoords[index]);\r\n var lastCircleCoords =\r\n this._arrPolylines[lineNr].circleCoords[index - 1];\r\n var mouseCoords =\r\n this._arrPolylines[lineNr].circleCoords[index];\r\n totalDistance += distance;\r\n this._arrPolylines[lineNr].distance = totalDistance;\r\n var prevTooltip =\r\n this._arrPolylines[lineNr].tooltips[index - 1];\r\n this._updateTooltip(\r\n item,\r\n prevTooltip,\r\n totalDistance,\r\n distance,\r\n lastCircleCoords,\r\n mouseCoords\r\n );\r\n }\r\n }.bind(this)\r\n );\r\n // if user is deleting a point of a line not finished yet (= rubbberline still present)\r\n }\r\n\r\n this._map.fire(\"polylinemeasure:remove\", e1);\r\n this._map.fire(\r\n \"polylinemeasure:change\",\r\n this._arrPolylines[this._lineNr]\r\n );\r\n return;\r\n }\r\n this._e1 = e1;\r\n if (this._measuring && this._cntCircle === 0) {\r\n // just execute drag-function if Measuring tool is active but no line is being drawn at the moment.\r\n this._map.dragging.disable(); // turn of moving of the map during drag of a circle\r\n this._map.off(\"mousemove\", this._mouseMove, this);\r\n this._map.off(\"click\", this._mouseClick, this);\r\n this._mouseStartingLat = e1.latlng.lat;\r\n this._mouseStartingLng = e1.latlng.lng;\r\n this._circleStartingLat = e1.target._latlng.lat;\r\n this._circleStartingLng = e1.target._latlng.lng;\r\n this._map.on(\"mousemove\", this._dragCircleMousemove, this);\r\n }\r\n },\r\n\r\n /**\r\n * Takes in a dataset and programatically draws the polylines and measurements to the map\r\n * Dataset must be in the form of an array of LatLng[], which allows for multiple discontinuous\r\n * polylines to be seeded\r\n * @param {L.LatLng[][]} polylinesArray | Array of array of points\r\n */\r\n seed: function (polylinesArray) {\r\n // Hijack user actions to manually draw polylines\r\n polylinesArray.forEach((polyline) => {\r\n // toggle draw state on:\r\n this._toggleMeasure();\r\n // start line with first point of each polyline\r\n this._startLine(polyline[0]);\r\n // add subsequent points:\r\n polyline.forEach((point, ind) => {\r\n const latLng = L.latLng(point);\r\n this._mouseMove({ latLng });\r\n this._currentLine.addPoint(latLng);\r\n // on last point,\r\n if (ind === polyline.length - 1) {\r\n this._finishPolylinePath();\r\n this._toggleMeasure();\r\n }\r\n });\r\n });\r\n },\r\n });\r\n\r\n //======================================================================================\r\n\r\n L.Map.mergeOptions({\r\n PolylineMeasureControl: false,\r\n });\r\n\r\n L.Map.addInitHook(function () {\r\n if (this.options.polylineMeasureControl) {\r\n this.PMControl = new L.Control.PolylineMeasure();\r\n this.addControl(this.PMControl);\r\n }\r\n });\r\n\r\n L.control.polylineMeasure = function (options) {\r\n return new L.Control.PolylineMeasure(options);\r\n };\r\n\r\n return L.Control.PolylineMeasure;\r\n // to allow\r\n // import PolylineMeasure from 'leaflet.polylinemeasure';\r\n // const measureControl = new PolylineMeasure();\r\n // together with\r\n // import 'leaflet.polylinemeasure';\r\n // const measureControl = new L.Control.PolylineMeasure();\r\n});\r\n","import React from 'react';\r\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\n\r\n// A theme with custom primary and secondary color.\r\n// It's optional.\r\nconst theme = createMuiTheme({ \r\n palette: {\r\n primary: {\r\n main: '#0499d4',\r\n // ligth: '#6cb842',\r\n // dark: '#005900'\r\n },\r\n // secondary: {\r\n // light: '#01689b',\r\n // main: '#0044ff',\r\n // contrastText: '#ffcc00',\r\n // },\r\n // },\r\n // overrides: {\r\n // MuiInputLabel: {\r\n // root: {\r\n // color: 'black',\r\n // fontSize: 13,\r\n // },\r\n // },\r\n }\r\n});\r\n\r\nfunction withRoot(Component) {\r\n function WithRoot(props) {\r\n // MuiThemeProvider makes the theme available down the React tree\r\n // thanks to React context.\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 return WithRoot;\r\n}\r\n\r\nexport default withRoot;\r\n","import axios from 'axios';\r\n// import storage from 'store';\r\n\r\n//const apiEndpoint = 'https://localhost:44397';\r\nconst apiEndpoint = 'https://shipmanwstest.charttrack.com';\r\n//const apiEndpoint = 'https://test.shipmanager.charttrack.com:44397';\r\n\r\n//axios.defaults.timeout = 7000;\r\n// axios.defaults.headers.post['Access-Control-Allow-Origin'] = '*';\r\n// axios.defaults.responseType = 'json';\r\n\r\n\r\nconst def = axios.create({\r\n baseURL: apiEndpoint,\r\n responseType: \"json\"\r\n});\r\n\r\n\r\ndef.interceptors.request.use(\r\n config => {\r\n\r\n const token = getToken();\r\n if (token)\r\n config.headers.authorization = `Bearer ${token}`;\r\n\r\n return config;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n },\r\n);\r\n\r\nexport const getToken = () => {\r\n const userData = JSON.parse(sessionStorage.getItem('userData'));\r\n\r\n if (userData && userData.tokenData)\r\n return userData.tokenData.token;\r\n\r\n return null;\r\n}\r\n\r\nexport const getAvcsoImageLink = (url) => {\r\n const link = `${apiEndpoint}/api/file/avcso/image?url=${encodeURIComponent(url)}`\r\n return link;\r\n}\r\n\r\nexport const getVesselCertificateLink = (VesselID) => {\r\n const link = `${apiEndpoint}/api/file/enrollment/${VesselID}?access_token=${getToken()}`\r\n return link;\r\n}\r\n\r\nexport const getVesselNavigatorLicenseLink = (VesselID) => {\r\n const link = `${apiEndpoint}/api/file/navigatorlicense/${VesselID}?access_token=${getToken()}`\r\n return link;\r\n}\r\n\r\nexport const getVesselAvcsPermitLink = (VesselID) => {\r\n const link = `${apiEndpoint}/api/file/avcspermit/${VesselID}?access_token=${getToken()}`\r\n return link;\r\n}\r\n\r\nexport default {\r\n instance: def,\r\n get: def.get,\r\n post: def.post,\r\n delete: def.delete,\r\n endpoint: apiEndpoint,\r\n getVesselCertificateLink: getVesselCertificateLink,\r\n getVesselNavigatorLicenseLink: getVesselNavigatorLicenseLink,\r\n getVesselAvcsPermitLink: getVesselAvcsPermitLink,\r\n};","import React, { createContext, useContext, useState } from 'react';\r\n// import http from './../Services/httpService';\r\n\r\nconst initialState = {\r\n notifications: [\r\n // {\r\n // variant: 'error',\r\n // message: 'Welcome to Shi Manager 2.0'\r\n // displayTime: 1000 // time in milliseconds\r\n // }\r\n ]\r\n};\r\n\r\n\r\nexport const NotificationContext = createContext();\r\n\r\nexport const NotificationProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n const clearData = () => {\r\n setState(() => {\r\n const newState = { ...initialState };\r\n return newState;\r\n })\r\n }\r\n\r\n const showNotification = (notification) => {\r\n\r\n // console.log('showNotification', notification);\r\n\r\n setState(prev => ({\r\n ...prev,\r\n notifications: [...prev.notifications, notification],\r\n }));\r\n\r\n if(notification.displayTime) {\r\n setTimeout(() => {\r\n closeNotification();\r\n }, notification.displayTime);\r\n }\r\n };\r\n\r\n\r\n const showError = (msg) => {\r\n showNotification({ variant: 'error', message: msg });\r\n }\r\n\r\n const closeNotification = () => {\r\n\r\n setState(prev => ({\r\n ...prev,\r\n notifications: prev.notifications.slice(1),\r\n }));\r\n };\r\n\r\n\r\n const actions = {\r\n clearData: clearData,\r\n showNotification, closeNotification,\r\n showError: showError,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n\r\n};\r\n\r\nexport const useNotificationStore = () => useContext(NotificationContext);\r\n\r\n\r\n\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport storage from 'store';\r\nimport axios from '../Services/httpService';\r\nimport http from '../Services/httpService';\r\nimport { useNotificationStore } from './notificationStore';\r\nimport _ from 'lodash';\r\n\r\nconst initialState = {\r\n users: [],\r\n user: {\r\n username: null,\r\n firstName: null,\r\n lastName: null,\r\n email: null,\r\n company: null,\r\n },\r\n appModules: [],\r\n appFeatures: [],\r\n userModules: [],\r\n userFeatures: [],\r\n appFeaturePaths: [],\r\n tokenData: {\r\n token: null,\r\n expires: null\r\n }\r\n};\r\n\r\nconst createStore = () => {\r\n\r\n // console.log('createStore')\r\n\r\n const userData = storage.get('userData');\r\n\r\n if (userData) {\r\n sessionStorage.setItem('userData', JSON.stringify(userData));\r\n return userData;\r\n }\r\n\r\n const sessionData = JSON.parse(sessionStorage.getItem('userData'));\r\n if (sessionData) {\r\n return sessionData;\r\n }\r\n\r\n\r\n return initialState;\r\n}\r\n\r\nexport const UserContext = createContext();\r\n\r\nexport const UserProvider = ({ children }) => {\r\n\r\n const [state, setState] = useState(createStore());\r\n const [, notificationActions] = useNotificationStore();\r\n\r\n useEffect(() => {\r\n\r\n const doLogout = () => {\r\n // console.log('doLogout');\r\n logout();\r\n }\r\n\r\n axios.instance.interceptors.response.use(null, error => {\r\n\r\n // console.log('response');\r\n\r\n const response = error.response;\r\n const statusCode = _.get(response, 'status', 0);\r\n const logout = _.get(response, 'data.toast.logout', false);\r\n\r\n // console.log('axios', statusCode, logout);\r\n\r\n if ((statusCode === 401) || logout === true) {\r\n doLogout();\r\n }\r\n return Promise.reject(error);\r\n\r\n }, []);\r\n\r\n });\r\n\r\n const loadData = () => {\r\n\r\n }\r\n\r\n const clearData = () => {\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const login = (userData) => {\r\n\r\n setState(prev => {\r\n\r\n const newState = {\r\n ...prev,\r\n ...userData\r\n }\r\n\r\n sessionStorage.setItem('userData', JSON.stringify(newState));\r\n\r\n if (userData.remember === true)\r\n storage.set('userData', newState);\r\n // console.log('prev', newState);\r\n return newState;\r\n });\r\n }\r\n\r\n const logout = (manually) => {\r\n\r\n // const isAuth = isAuthenticated();\r\n if (manually) {\r\n\r\n http.get('/api/auth/logout').finally(() => { doLogout(); });\r\n }\r\n else {\r\n doLogout();\r\n }\r\n }\r\n\r\n const doLogout = () => {\r\n // console.log('logout');\r\n sessionStorage.clear();\r\n storage.clearAll();\r\n localStorage.clear();\r\n\r\n setState(() => {\r\n return {\r\n ...initialState\r\n }\r\n });\r\n }\r\n\r\n // const setTokenData = (tokenData) => {\r\n\r\n // setState(prev => {\r\n // return {\r\n // ...prev,\r\n // users: users,\r\n // }\r\n // });\r\n // }\r\n\r\n const refreshToken = () => {\r\n http.get('/api/auth/RefreshToken')\r\n .then(result => {\r\n\r\n const newToken = result.data;\r\n //console.log('refreshToken', newToken);\r\n\r\n\r\n const userData = { ...state.userData };\r\n userData.tokenData = newToken.tokenData;\r\n login(userData);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n\r\n const hasAdmin = () => {\r\n return state.userFeatures.includes(1);\r\n }\r\n\r\n const hasUserManagement = () => {\r\n return hasAdmin() || state.userFeatures.includes(2);\r\n }\r\n\r\n const hasFeatureID = (fid, allowAdmin = true) => {\r\n return fid === 0 || (hasAdmin() && allowAdmin) || state.userFeatures.includes(fid);\r\n }\r\n\r\n const hasAppModuleID = (amid, allowAdmin = true) => {\r\n return (hasAdmin() && allowAdmin) || state.userModules.includes(amid);\r\n }\r\n\r\n\r\n // const hasAVCSO = () => {\r\n // return hasAdmin() || hasFeatureID(6);\r\n // }\r\n\r\n const canAccessPath = (path) => {\r\n\r\n if (hasAdmin())\r\n return true; // Admin can do everything\r\n\r\n const val = state.appFeaturePaths.find(X => path.startsWith(X.path));\r\n // console.log('path', path, val);\r\n if (!val)\r\n return true; // No limitations for path\r\n\r\n const ft = state.userFeatures.find(X => X === val.appFeatureID);\r\n // console.log('feat', ft);\r\n if (ft)\r\n return true;\r\n\r\n notificationActions.showError(val.message);\r\n\r\n return false;\r\n }\r\n\r\n const getUsers = () => {\r\n\r\n http.get('/api/account/users')\r\n .then(result => {\r\n\r\n const users = result.data;\r\n // console.log('users', users);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n users: users,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n const deleteUser = (personID) => {\r\n\r\n // console.log('deleteUser', personID);\r\n http.delete(`/api/account/users/${personID}`)\r\n .then(() => {\r\n // console.log('person Deleted', result.data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n })\r\n .finally(() => {\r\n getUsers();\r\n });\r\n }\r\n\r\n const isAuthenticated = () => {\r\n // console.log('isAuthenticated', state);\r\n const now = new Date();\r\n if (state.tokenData) {\r\n const expires = new Date(state.tokenData.expires);\r\n if ((expires > now)) {\r\n return true;\r\n }\r\n else if (state.tokenData.token) {\r\n // console.log('isAuthenticated logout', state.tokenData.expires);\r\n logout();\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n const setUserFeatures = (personID, featureIDs) => {\r\n http.post(`/api/account/users/${personID}/features`, featureIDs)\r\n .then(() => {\r\n getUsers();\r\n })\r\n .catch(() => {\r\n\r\n });\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n login,\r\n refreshToken,\r\n logout,\r\n isAuthenticated,\r\n getUsers: getUsers,\r\n deleteUser: deleteUser,\r\n hasAdmin: hasAdmin,\r\n hasUserManagement: hasUserManagement,\r\n setUserFeatures: setUserFeatures,\r\n\r\n hasAppModuleID: hasAppModuleID,\r\n hasFeatureID: hasFeatureID,\r\n canAccessPath: canAccessPath,\r\n };\r\n\r\n // return useMemo(() => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n // }, [state]);\r\n\r\n};\r\n\r\nexport const useUserStore = () => useContext(UserContext);\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\nimport { useUserStore } from './userStore';\r\n\r\nconst initialState = {\r\n summary: {},\r\n // productGroups: null,\r\n vesselQuotes: null,\r\n quoteDetail: null,\r\n\r\n vesselOrders: null,\r\n orderDetail: null,\r\n\r\n vesselShipments: null,\r\n shipmentDetail: null,\r\n\r\n vesselFlatFees: null,\r\n flatFeeDetail: null,\r\n flatFeeOrderDetail: null,\r\n\r\n catalogue: {\r\n vesselID: 0,\r\n items: null, // [{}]\r\n vesselItems: [],\r\n routeItems: [],\r\n closedProductGroups: [],\r\n selectedItems: [],\r\n itemPrices: [],\r\n selectedPrices: new Object(),\r\n selectedDuration: 12,\r\n },\r\n};\r\n\r\nconst initialCatalogue = {\r\n vesselID: 0,\r\n items: null,\r\n vesselItems: [],\r\n routeItems: [],\r\n closedProductGroups: [],\r\n selectedItems: [],\r\n itemPrices: [],\r\n selectedPrices: new Object(),\r\n selectedDuration: 12,\r\n}\r\n\r\nexport const SaleContext = createContext();\r\n\r\nexport const SaleProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('SaleProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n\r\n const loadData = () => {\r\n //console.log(\"loadData\");\r\n getSummary();\r\n getVesselQuotes();\r\n getVesselOrders();\r\n };\r\n\r\n const clearData = () => {\r\n //console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const getSummary = (force = false) => {\r\n\r\n if (force || !state.summary.approvals) {\r\n http.get('/api/sales/summary')\r\n .then(result => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n summary: result.data\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n };\r\n\r\n\r\n const getVesselQuotes = () => {\r\n\r\n http.get('/api/sales/vesselquotes')\r\n .then(result => {\r\n setState(prev => {\r\n // console.log('getVesselQuotes', state);\r\n return {\r\n ...prev,\r\n vesselQuotes: result.data\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getSalesQuote = (salesQuoteID) => {\r\n\r\n http.get(`/api/sales/quotes/${salesQuoteID}`)\r\n .then(result => {\r\n // const vesselQuote = result.data;\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n quoteDetail: result.data,\r\n // productGroups: result.data.productGroups,\r\n }\r\n });\r\n\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const validateSalesQuoteLine = (salesQuotelineID, validationID) => {\r\n\r\n setState((prev) => {\r\n const newQuoteDetail = { ...prev.quoteDetail };\r\n\r\n newQuoteDetail.quote.lines\r\n .find(X => X.salesQuoteLineID === salesQuotelineID)\r\n .validationID = validationID;\r\n\r\n return { ...prev, quoteDetail: newQuoteDetail }\r\n });\r\n }\r\n\r\n const validateSalesQuote = (validationID) => {\r\n\r\n setState((prev) => {\r\n const newQuoteDetail = { ...prev.quoteDetail };\r\n\r\n _.forEach(newQuoteDetail.quote.lines, (L) => { L.validationID = validationID })\r\n\r\n // newQuoteDetail.quote.lines.forea\r\n // .find(X => X.salesQuoteLineID === salesQuotelineID)\r\n // .validationID = validationID;\r\n\r\n return { ...prev, quoteDetail: newQuoteDetail }\r\n });\r\n }\r\n\r\n const confirmSalesQuote = (req) => {\r\n http.post('/api/sales/quotes/confirm', { ...req })\r\n .then(() => {\r\n\r\n getVesselQuotes();\r\n\r\n const quote = { ...state.quoteDetail, confirmed: true }\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n quoteDetail: quote,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n\r\n const quote = { ...state.quoteDetail, confirmed: true }\r\n // console.log('quote', quote);\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n quoteDetail: quote,\r\n }\r\n });\r\n }\r\n\r\n const selectSalesQuoteLine = (salesQuotelineID) => {\r\n\r\n setState((prev) => {\r\n const newQuote = {\r\n ...prev.quoteDetail,\r\n selectedLineID: salesQuotelineID\r\n };\r\n\r\n return {\r\n ...prev,\r\n quoteDetail: newQuote\r\n }\r\n });\r\n }\r\n\r\n\r\n const clearSalesQuote = () => {\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n quoteDetail: null\r\n }\r\n });\r\n };\r\n\r\n // Orders\r\n const getVesselOrders = () => {\r\n\r\n http.get('/api/sales/vesselorders')\r\n .then(result => {\r\n setState(prev => {\r\n // console.log('getVesselOrders', result.data);\r\n return {\r\n ...prev,\r\n vesselOrders: result.data\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getSalesOrder = (salesOrderID) => {\r\n\r\n http.get(`/api/sales/orders/${salesOrderID}`)\r\n .then(result => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n orderDetail: result.data,\r\n // productGroups: result.data.productGroups,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n\r\n const filterSalesOrder = (filterIDs) => {\r\n setState((prev) => {\r\n const newQuote = { ...prev.orderDetail };\r\n newQuote.statusFilter = filterIDs;\r\n\r\n return {\r\n ...prev,\r\n orderDetail: newQuote\r\n }\r\n });\r\n }\r\n\r\n const clearSalesOrder = () => {\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n orderDetail: null\r\n }\r\n });\r\n };\r\n\r\n\r\n\r\n\r\n\r\n const setCatalogueVessel = (vesselID) => {\r\n // console.log('setCatalogueVessel', vesselID);\r\n setState(prev => {\r\n const cat = vesselID === 0 ? { ...initialCatalogue } : { ...prev.catalogue };\r\n cat.vesselID = vesselID;\r\n\r\n return {\r\n ...prev,\r\n catalogue: cat,\r\n }\r\n });\r\n }\r\n\r\n // const setSelectedCatalogueItems = (items) => {\r\n // // console.log('setSelectedCatalogueItems', items);\r\n // setState(prev => {\r\n // const cat = { ...prev.catalogue }\r\n // cat.selectedItems = items;\r\n // return {\r\n // ...prev,\r\n // catalogue: cat,\r\n // }\r\n // });\r\n // }\r\n\r\n // const setCatalogueItems = (items) => {\r\n // // console.log('setCatalogueItems', items);\r\n // setState(prev => {\r\n // const cat = { ...prev.catalogue }\r\n // cat.items = items;\r\n // return {\r\n // ...prev,\r\n // catalogue: cat,\r\n // }\r\n // });\r\n // }\r\n\r\n\r\n\r\n const getVesselShipments = () => {\r\n\r\n http.get('/api/sales/shipments')\r\n .then(result => {\r\n const shipments = result.data;\r\n // console.log('shipments', shipments);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n vesselShipments: shipments\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getVesselShipment = (salesShipmentID) => {\r\n\r\n http.get(`/api/sales/shipments/${salesShipmentID}`)\r\n .then(result => {\r\n const detail = result.data;\r\n // console.log('shipment detail', detail);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n shipmentDetail: detail\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n\r\n // FlatFees\r\n const getVesselFlatFees = () => {\r\n\r\n http.get('/api/sales/flatfees')\r\n .then(result => {\r\n const flatFees = result.data;\r\n\r\n // console.log('flatfees', flatFees);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n vesselFlatFees: flatFees\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n\r\n const getVesselFlatFeeOrders = (vesselFlatFeeID) => {\r\n\r\n http.get(`/api/sales/flatfees/${vesselFlatFeeID}`)\r\n .then(result => {\r\n const detail = result.data;\r\n\r\n // console.log('FlatFee Detail', detail);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n flatFeeDetail: detail\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n const getVesselFlatFeeOrderDetails = (vesselFlatFeeID, purchaseOrderID) => {\r\n\r\n http.get(`/api/sales/flatfees/${vesselFlatFeeID}/${purchaseOrderID}`)\r\n .then(result => {\r\n const detail = result.data;\r\n\r\n // console.log('getVesselFlatFeeOrderDetail', detail);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n flatFeeOrderDetail: detail\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n\r\n\r\n const toggleCatalogueClosedProductGroups = (PGID) => {\r\n\r\n setState(prev => {\r\n const cat = { ...prev.catalogue };\r\n const isOpen = cat.closedProductGroups.includes(PGID);\r\n\r\n cat.closedProductGroups = isOpen ? cat.closedProductGroups.filter(X => X !== PGID) : [...cat.closedProductGroups, PGID];\r\n return {\r\n ...prev,\r\n catalogue: cat,\r\n }\r\n });\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n getSummary: getSummary,\r\n\r\n getVesselQuotes: getVesselQuotes,\r\n getSalesQuote: getSalesQuote,\r\n clearSalesQuote: clearSalesQuote,\r\n\r\n confirmSalesQuote: confirmSalesQuote,\r\n validateSalesQuote: validateSalesQuote,\r\n validateSalesQuoteLine: validateSalesQuoteLine,\r\n selectSalesQuoteLine: selectSalesQuoteLine,\r\n\r\n getVesselShipments: getVesselShipments,\r\n getVesselShipment: getVesselShipment,\r\n\r\n getVesselOrders: getVesselOrders,\r\n getSalesOrder: getSalesOrder,\r\n\r\n getVesselFlatFees: getVesselFlatFees,\r\n getVesselFlatFeeOrders: getVesselFlatFeeOrders,\r\n getVesselFlatFeeOrderDetails: getVesselFlatFeeOrderDetails,\r\n\r\n setCatalogueVessel: setCatalogueVessel,\r\n toggleCatalogueClosedProductGroups: toggleCatalogueClosedProductGroups,\r\n\r\n filterSalesOrder: filterSalesOrder,\r\n clearSalesOrder: clearSalesOrder,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n};\r\n\r\nexport const useSaleStore = () => useContext(SaleContext);\r\n\r\n\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\n//import { useUserStore } from './userStore';\r\n\r\nconst initialState = {\r\n vessels: null,\r\n routes: null,\r\n baskets: null,\r\n newsItems: null,\r\n productGroups: null,\r\n productItemGroups: null,\r\n currencies: null,\r\n catalogue: null,\r\n portInfo: {\r\n // ports: [],\r\n // routingPoints: []\r\n }\r\n};\r\n\r\nexport const GlobalContext = createContext();\r\n\r\n\r\nexport const GlobalProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('GlobalProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n const loadData = () => {\r\n //console.log(\"loadData\");\r\n getVessels();\r\n getCurrencies();\r\n getPorts();\r\n getRoutes();\r\n getBaskets();\r\n getAnnouncements();\r\n getProductgroups();\r\n getProductItemgroups();\r\n getCatalogue();\r\n };\r\n\r\n const isLoaded = () => {\r\n return Boolean(state.catalogue) && Boolean(state.vessels);\r\n }\r\n\r\n const clearData = () => {\r\n //console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const getVessels = () => {\r\n http.get('/api/fleet')\r\n .then(result => {\r\n // console.log('result.data', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n vessels: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getPorts = () => {\r\n http.get('/api/catalogue/ports')\r\n .then(result => {\r\n //console.log('ports', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n portInfo: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n\r\n const getProductgroups = () => {\r\n http.get('/api/catalogue/productgroups')\r\n .then(result => {\r\n // console.log('productgroups', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n productGroups: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n\r\n const getProductItemgroups = () => {\r\n http.get('/api/catalogue/productitemgroups')\r\n .then(result => {\r\n // console.log('productitemgroups', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n productItemGroups: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getRoutes = () => {\r\n http.get('/api/catalogue/routes')\r\n .then(result => {\r\n // console.log('routes', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n routes: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getBaskets = () => {\r\n http.get('/api/catalogue/baskets')\r\n .then(result => {\r\n // console.log('getBaskets', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n baskets: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getAnnouncements = () => {\r\n http.get(`/api/home/news`)\r\n .then(result => {\r\n const data = result.data.newsItems;\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n newsItems: data,\r\n }\r\n });\r\n })\r\n .catch(error => { alert(error); });\r\n };\r\n\r\n const getCatalogue = (force = false) => {\r\n\r\n if (!state.catalogue || force === true) {\r\n http.get('/api/catalogue/items')\r\n .then(result => {\r\n // console.log('catalogue', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n catalogue: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n };\r\n\r\n const getCurrencies = () => {\r\n http.get('/api/catalogue/currencies')\r\n .then(result => {\r\n // console.log('currencies', result.data);\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n currencies: result.data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n };\r\n\r\n const getCatalogueItem = (itemID) => {\r\n if (Boolean(state.catalogue)) {\r\n return state.catalogue.items.find(X => X.itemID === itemID)\r\n }\r\n return null;\r\n }\r\n\r\n const getCatalogueItems = (itemIDs) => {\r\n if (Boolean(state.catalogue)) {\r\n return state.catalogue.items.filter(X => itemIDs.includes(X.itemID))\r\n }\r\n return null;\r\n }\r\n\r\n const getCurrency = (currencyID) => {\r\n return state.currencies.find(C => C.currencyID === currencyID);\r\n }\r\n\r\n const getProductGroup = (productGroupID) => {\r\n return state.productGroups.find(C => C.productGroupID === productGroupID);\r\n }\r\n\r\n const getProductItemGroupsLocal = (productGroupID) => {\r\n\r\n const PGIDS = _.uniq(state.catalogue.items.filter(X => X.productGroupID === productGroupID).map(X => X.productItemGroupID));\r\n return state.productItemGroups.filter(X => PGIDS.includes(X.productItemGroupID));\r\n\r\n //return state.productItemGroups.filter(C => C.productGroupID === productGroupID);\r\n }\r\n\r\n const isDigitalProductGroup = (productGroupID) => {\r\n const val = state.productGroups.find(C => C.productGroupID === productGroupID).isDigitalPoductGroup;\r\n // console.log('isDigitalProductGroup', productGroupID, val);\r\n return val;\r\n }\r\n\r\n const findVessel = (vesselID) => {\r\n // console.log('findVessel', state.vessels);\r\n if (!!!state.vessels) return null;\r\n\r\n // console.log('FIND')\r\n return state.vessels.find(V => V.vesselID === vesselID);\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n isLoaded: isLoaded,\r\n\r\n getVessels: getVessels,\r\n getPorts: getPorts,\r\n getProductgroups: getProductgroups,\r\n getRoutes: getRoutes,\r\n getBaskets: getBaskets,\r\n getAnnouncements: getAnnouncements,\r\n getCatalogue: getCatalogue,\r\n getCatalogueItem: getCatalogueItem,\r\n getCatalogueItems: getCatalogueItems,\r\n getCurrency: getCurrency,\r\n\r\n getProductGroup: getProductGroup,\r\n getProductItemGroupsLocal: getProductItemGroupsLocal,\r\n\r\n findVessel: findVessel,\r\n\r\n isDigitalProductGroup: isDigitalProductGroup,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n\r\n}\r\n\r\nexport const useGlobalStore = () => useContext(GlobalContext);\r\n","import React, { createContext, useContext, useState } from 'react';\r\n// import { useUserStore } from './userStore';\r\nimport httpService from '../Services/httpService';\r\n\r\nconst initialState = {\r\n mapLayers: [\r\n 1, // OSM\r\n 2, // AVCSO\r\n ],\r\n drawerMenu: {\r\n activeMenu: 0, // 0=Closed, 1=AVCSO Layers, 2=AVCSO FeatureGroups, 3= AVCSO Features, 4=GetFeatures, 5=Routes\r\n },\r\n activeLayer: 1, // Default to OSM\r\n activeOverlays: [1], // 1=fleet Positions\r\n activeRoutes: [],\r\n options: {\r\n useFlyTo: true,\r\n },\r\n bounds: [],\r\n AVCSO: {\r\n // layers: { value: \"20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0\" },\r\n layers: { value: [21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] },\r\n parameter: [],\r\n parameterGroup: [\r\n {\r\n name: \"DatasetDisplayRange\",\r\n Parameter: [\r\n {\r\n name: \"minZoom\",\r\n value: 0.01,\r\n }\r\n ]\r\n }\r\n ],\r\n featureInfo: null,\r\n selectionMode: 0, // 0=Normal, 1=GetFeatureInfo\r\n license: {\r\n url: \"\",\r\n token: null,\r\n expiration: null,\r\n userRef: null,\r\n UserId: null,\r\n version: null,\r\n format: null,\r\n },\r\n EULA: null,\r\n }\r\n};\r\n\r\nexport const MapContext = createContext();\r\n\r\nexport const MapProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('MapProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n const loadData = () => {\r\n //console.log(\"loadData\");\r\n }\r\n\r\n const clearData = () => {\r\n //console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const zoomTo = (points) => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n bounds: points\r\n }\r\n });\r\n }\r\n\r\n const zoomToPoint = (long, lat) => {\r\n setState(prev => {\r\n const padFactor = 0.1;\r\n return {\r\n ...prev,\r\n bounds: [\r\n [lat - padFactor, long - padFactor],\r\n [lat + padFactor, long + padFactor]\r\n ]\r\n }\r\n });\r\n }\r\n\r\n // This part seems to assume that all incoming lines will have have an item before the actual polygonPoints.\r\n // Which is not exactly the case for all the API results. \r\n // SOLUTION: when calling zoomToLines, include a 2nd parameter (Boolean). if not defined, we will assume it true\r\n // True means it has a sub .item\r\n //This way, we don't have to visit all the codes. we will just apply to what we are working on. MUHAHAHAHAHAHAHAHAHAHA (unneccessary laughter)\r\n\r\n const zoomToLines = (lines, gotItem = true) => {\r\n //Check if lines have .item with it\r\n // if(Boolean(lines.item)){\r\n // lines = lines.item;\r\n //console.log(\"bbbbbNOW: \", lines)\r\n // }\r\n if(gotItem)\r\n {\r\n if (lines) {\r\n if (Array.isArray(lines)) {\r\n \r\n const points = lines\r\n .filter(X => X.item.polygonPoints && X.item.polygonPoints.length > 0)\r\n .map(X => X.item.polygonPoints)\r\n zoomTo(points);\r\n }\r\n else if (lines.item) {\r\n zoomTo(lines.item.polygonPoints);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (lines) {\r\n if (Array.isArray(lines)) {\r\n //console.log(\"bbbbIt gets here\")\r\n const points = lines\r\n .filter(X => X.polygonPoints && X.polygonPoints.length > 0)\r\n .map(X => X.polygonPoints)\r\n zoomTo(points);\r\n }\r\n else {\r\n zoomTo(lines.polygonPoints);\r\n }\r\n }\r\n }\r\n\r\n //Yes! I hate repeating codes too. yet here we are! life in it self. God help us! :/\r\n }\r\n\r\n // ORIGINAL CODE: BACKUP\r\n // const zoomToLines = (lines) => {\r\n // console.log(lines)\r\n // if (lines) {\r\n // if (Array.isArray(lines)) {\r\n // console.log(\"It gets here\")\r\n // const points = lines\r\n // .filter(X => X.item.polygonPoints && X.item.polygonPoints.length > 0)\r\n // .map(X => X.item.polygonPoints)\r\n // zoomTo(points);\r\n // }\r\n // else if (lines.item) {\r\n // zoomTo(lines.item.polygonPoints);\r\n // }\r\n // }\r\n // }\r\n\r\n const setAvcsoParameter = ({ Parameter, IsGroup, GroupName }) => {\r\n setState(prev => {\r\n\r\n //console.log('setAvcsoParameter', GroupName);\r\n const { name, value } = Parameter;\r\n\r\n const newAVCSO = { ...prev.AVCSO };\r\n\r\n if (IsGroup == false) {\r\n // Individual Parameters\r\n let newParameters = [...prev.AVCSO.parameter];\r\n const val = newParameters.find(X => X.name === name);\r\n\r\n if (val) {\r\n val.value = value;\r\n }\r\n else {\r\n newParameters = [...newParameters, { ...Parameter }]\r\n }\r\n\r\n newAVCSO.parameter = newParameters;\r\n //console.log('newAVCSO', newAVCSO);\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n }\r\n else {\r\n\r\n // Group Parameters\r\n let newGroups = [...prev.AVCSO.parameterGroup];\r\n let grp = newGroups.find(X => X.name === GroupName);\r\n\r\n // Create Group if not exists\r\n if (!grp) {\r\n grp = {\r\n name: GroupName,\r\n Parameter: []\r\n }\r\n newGroups = [...prev.AVCSO.parameterGroup, grp]\r\n }\r\n\r\n // Find parameter in group\r\n let par = grp.Parameter.find(X => X.name === name);\r\n\r\n // Create parameter in group if not exists\r\n if (!par) {\r\n par = { ...Parameter }\r\n grp.Parameter = [...grp.Parameter, par];\r\n // console.log('create Par', par, grp);\r\n }\r\n else {\r\n // Set new parameter value\r\n\r\n if (value !== null) {\r\n // Change value of parameter\r\n par.value = value;\r\n }\r\n else {\r\n // Remove Parameter\r\n grp.Parameter = grp.Parameter.filter(X => X.name !== name);\r\n }\r\n }\r\n\r\n newAVCSO.parameterGroup = newGroups;\r\n\r\n\r\n //console.log('Group Parameters', newAVCSO);\r\n\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n }\r\n });\r\n }\r\n\r\n const setAvcsoLayers = (lays) => {\r\n\r\n setState(prev => {\r\n\r\n const newAVCSO = { ...prev.AVCSO };\r\n newAVCSO.layers = lays;\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n });\r\n }\r\n\r\n\r\n const setAvcsoFeatureInfo = (featureInfo) => {\r\n\r\n setState(prev => {\r\n\r\n const newAVCSO = { ...prev.AVCSO };\r\n newAVCSO.featureInfo = featureInfo;\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n });\r\n }\r\n\r\n const toggleAvcsoSelectionMode = () => {\r\n\r\n\r\n setState(prev => {\r\n\r\n const newState = { ...prev };\r\n const newAVCSO = newState.AVCSO;\r\n newAVCSO.selectionMode = (newAVCSO.selectionMode + 1) % 2;\r\n\r\n if (newAVCSO.selectionMode == 1) {\r\n // GetFeaturInfo Active\r\n newState.drawerMenu.activeMenu = 4;\r\n }\r\n else if (newState.drawerMenu.activeMenu === 4) {\r\n newState.drawerMenu.activeMenu = 0;\r\n }\r\n\r\n // //console.log('toggleAvcsoSelectionMode', newAVCSO.selectionMode);\r\n // return {\r\n // ...prev,\r\n // AVCSO: newAVCSO,\r\n // }\r\n\r\n return newState;\r\n });\r\n }\r\n\r\n const getAvcsoToken = (expiration) => {\r\n\r\n const pars = {\r\n params: {\r\n expiration: expiration,\r\n }\r\n }\r\n\r\n httpService.get('/api/auth/avcso', pars)\r\n .then(result => {\r\n const data = result.data;\r\n\r\n //console.log('getAvcsoToken', data);\r\n if (data && data.token) {\r\n\r\n setState(prev => {\r\n\r\n const newState = { ...prev.AVCSO };\r\n newState.license = data;\r\n return {\r\n ...prev,\r\n AVCSO: newState\r\n }\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n //console.error('getAvcsoToken', error);\r\n });\r\n }\r\n\r\n const setActiveLayer = (layerID) => {\r\n\r\n setState(prev => {\r\n const drawerMenu = { ...prev.drawerMenu };\r\n drawerMenu.activeMenu = 0;\r\n\r\n const newAVCSO = { ...prev.AVCSO };\r\n newAVCSO.selectionMode = 0;\r\n\r\n return {\r\n ...prev,\r\n activeLayer: layerID,\r\n AVCSO: newAVCSO,\r\n drawerMenu: drawerMenu,\r\n }\r\n });\r\n }\r\n\r\n const setOverlayVisible = (overlayID, active) => {\r\n\r\n setState(prev => {\r\n let overlays = [...prev.activeOverlays];\r\n\r\n // console.log('overlays 1', overlays);\r\n\r\n if (active === true) {\r\n overlays = [...overlays, overlayID];\r\n }\r\n else {\r\n overlays = overlays.filter(X => X !== overlayID);\r\n }\r\n\r\n // console.log('overlays 2', overlays);\r\n\r\n return {\r\n ...prev,\r\n activeOverlays: overlays,\r\n }\r\n });\r\n\r\n }\r\n\r\n const setActiveDrawerMenu = (activeMenu) => {\r\n\r\n setState(prev => {\r\n const drawerMenu = { ...prev.drawerMenu };\r\n\r\n if (drawerMenu.activeMenu !== activeMenu) {\r\n drawerMenu.activeMenu = activeMenu;\r\n }\r\n else {\r\n drawerMenu.activeMenu = 0;\r\n }\r\n\r\n return {\r\n ...prev,\r\n drawerMenu: drawerMenu,\r\n }\r\n });\r\n }\r\n\r\n\r\n const setAvcsoEULA = (accepted) => {\r\n\r\n setState(prev => {\r\n const newAVCSO = { ...prev.AVCSO };\r\n newAVCSO.EULA = accepted;\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n });\r\n\r\n if (accepted === true) {\r\n httpService.post('/api/auth/avcso/eula', { accept: true })\r\n .then(result => {\r\n //console.log('result.data', result.data);\r\n });\r\n }\r\n }\r\n\r\n const getAvcsoEULA = () => {\r\n\r\n httpService.get('/api/auth/avcso/eula')\r\n .then(result => {\r\n const data = result.data;\r\n //console.log('EULA_DATA', data)\r\n\r\n setState(prev => {\r\n const newAVCSO = { ...prev.AVCSO };\r\n newAVCSO.EULA = data.eula;\r\n return {\r\n ...prev,\r\n AVCSO: newAVCSO,\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n const isFeatureInfoActive = () => {\r\n return state.drawerMenu.activeMenu === 4;\r\n }\r\n\r\n const setActiveRoutes = (routes) => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n activeRoutes: routes,\r\n }\r\n });\r\n }\r\n\r\n const clearActiveRoutes = () => {\r\n setActiveRoutes([]);\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n setActiveLayer,\r\n setActiveDrawerMenu,\r\n setOverlayVisible,\r\n\r\n isFeatureInfoActive,\r\n\r\n zoomTo,\r\n zoomToPoint,\r\n zoomToLines,\r\n // zoomToQuote\r\n\r\n setAvcsoLayers,\r\n setAvcsoParameter,\r\n setAvcsoEULA,\r\n setAvcsoFeatureInfo,\r\n getAvcsoEULA,\r\n toggleAvcsoSelectionMode,\r\n getAvcsoToken,\r\n\r\n // routes\r\n setActiveRoutes,\r\n clearActiveRoutes\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n};\r\n\r\nexport const useMapStore = () => useContext(MapContext);\r\n\r\n\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\nimport { useNotificationStore } from './notificationStore';\r\nimport { useMapStore } from './mapStore';\r\n// import { useUserStore } from './userStore';\r\n\r\nconst initialState = {\r\n // productGroups: [],\r\n vessels: null,\r\n fleetPositions: null,\r\n holdingDetail: null,\r\n holdingDetailItems: null,\r\n statusDetail: null,\r\n vesselUpdates: null,\r\n};\r\n\r\nexport const FleetContext = createContext();\r\n\r\nexport const FleetProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n const [, notificationActions] = useNotificationStore();\r\n const [, mapActions] = useMapStore();\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('FleetProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n const loadData = () => {\r\n // console.log(\"loadData\");\r\n }\r\n\r\n const clearData = () => {\r\n // console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const filterHoldingDetail = (filter) => {\r\n setState((prev) => {\r\n const newDetail = { ...prev.holdingDetail };\r\n\r\n const fid = +_.get(prev, 'holdingDetail.filter.id', 0) + 1;\r\n newDetail.filter = filter;\r\n newDetail.filter.id = fid;\r\n\r\n return {\r\n ...prev,\r\n holdingDetail: newDetail\r\n }\r\n });\r\n }\r\n\r\n const getHoldingsOverview = () => {\r\n \r\n http.get('/api/fleet/holdings')\r\n .then(result => {\r\n\r\n const { vessels, productGroups } = result.data;\r\n //console.log('getVesselItems', result.data);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n vessels: vessels,\r\n productGroups: productGroups,\r\n }\r\n });\r\n })\r\n .catch(error => { \r\n //alert(error);\r\n });\r\n };\r\n\r\n // const getVesselHoldingsStatus = (vesselID) => {\r\n\r\n // http.get(`/api/fleet/holdings/${vesselID}/status`)\r\n // .then(result => {\r\n\r\n // console.log('getVesselItems', result.data);\r\n\r\n // setState(prev => {\r\n // return {\r\n // ...prev,\r\n // vessels: result.data.vessels,\r\n // productGroups: result.data.productGroups,\r\n // }\r\n // });\r\n // })\r\n // .catch(error => {\r\n //alert(error);\r\n // });\r\n // };\r\n\r\n\r\n const getVesselHoldings = (vesselID, onCompleted) => {\r\n\r\n const complete = (success) => {\r\n if(onCompleted && typeof onCompleted === 'function') {\r\n onCompleted(success);\r\n }\r\n };\r\n\r\n http.get(`/api/fleet/holdings/${vesselID}`)\r\n .then(result => {\r\n const holdingDetailData = result.data;\r\n //console.log('Holding Detail Data', holdingDetailData);\r\n\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n holdingDetail: holdingDetailData,\r\n holdingDetailItems: holdingDetailData.vessel.vesselItems,\r\n }\r\n });\r\n complete(true);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n complete(false);\r\n });\r\n };\r\n\r\n\r\n const getFleetPositions = () => {\r\n\r\n http.get(`/api/fleet/positions`)\r\n .then(result => {\r\n const positions = result.data;\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n fleetPositions: positions,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n \r\n });\r\n };\r\n\r\n\r\n const getVesselUpdating = () => {\r\n\r\n http.get(`/api/fleet/navigator`)\r\n .then(result => {\r\n const data = result.data;\r\n // console.log('navigator', data)\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n vesselUpdates: data,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n \r\n });\r\n };\r\n\r\n\r\n\r\n const clearVesselHoldings = () => {\r\n\r\n };\r\n\r\n\r\n const setLicenseAvailability = (vesselID, itemID, active, onCompleted) => {\r\n\r\n const complete = (success) => {\r\n if(onCompleted && typeof onCompleted === 'function') {\r\n onCompleted(success);\r\n }\r\n };\r\n\r\n const postData = {\r\n itemID: itemID,\r\n vesselID: vesselID,\r\n active: active ? 1 : 0,\r\n };\r\n\r\n http.post(`/api/fleet/holdings/active`, postData)\r\n .then(() => {\r\n getVesselHoldings(\r\n postData.vesselID,\r\n (success) => {\r\n notificationActions.showNotification({ \r\n variant: `${success ? 'success' : 'error'}`, \r\n message: `License has been updated successfully ${!success ? ', but, some errors ocurs getting current holdings.' : ''}`, \r\n displayTime: 2000 \r\n });\r\n\r\n complete(true);\r\n }\r\n )\r\n })\r\n .catch(error => {\r\n complete(false);\r\n });\r\n };\r\n\r\n const zoomToVessel = (vesselID) => {\r\n const arePositionLoaded = Boolean(state.fleetPositions);\r\n if(!arePositionLoaded) {\r\n return;\r\n }\r\n\r\n const [vesselPosition] = state.fleetPositions.filter(position => position.vesselID === vesselID);\r\n if(vesselPosition) {\r\n mapActions.zoomToPoint(vesselPosition.long, vesselPosition.lat);\r\n }\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n // getSummary: getSummary,\r\n\r\n // Holdings\r\n getHoldingsOverview: getHoldingsOverview,\r\n getFleetPositions: getFleetPositions,\r\n getVesselHoldings: getVesselHoldings,\r\n getVesselUpdating:getVesselUpdating,\r\n filterHoldingDetail: filterHoldingDetail,\r\n clearVesselHoldings: clearVesselHoldings,\r\n\r\n // FleetStatus\r\n setLicenseAvailability: setLicenseAvailability,\r\n zoomToVessel: zoomToVessel\r\n\r\n\r\n // clearFleetsQuote: clearFleetsQuote,\r\n\r\n // validateFleetsQuoteLine: validateFleetsQuoteLine,\r\n // selectFleetsQuoteLine: selectFleetsQuoteLine,\r\n\r\n // getVesselOrders: getVesselOrders,\r\n // getFleetsOrder: getFleetsOrder,\r\n // clearFleetsOrder: clearFleetsOrder,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n};\r\n\r\nexport const useFleetStore = () => useContext(FleetContext);\r\n\r\n\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport { useGlobalStore } from './globalStore';\r\n// import { useUserStore } from './userStore';\r\nimport _ from 'lodash';\r\n\r\nconst initialState = {\r\n ordered: false,\r\n vesselID: 0,\r\n reference: \"\",\r\n months: 12,\r\n saveSourceBasketID: 0,\r\n vesselItemIDs: [], // ItemIDs from inventory + holdings\r\n routes: [],\r\n\r\n basketLines: [],\r\n quoteIDs: [],\r\n\r\n routeItemIDs: [], // Buffer + Hit\r\n\r\n quoteBasket: {\r\n header: {},\r\n lines: []\r\n },\r\n\r\n mapItems: [],\r\n\r\n closedProductGroups: [],\r\n};\r\n\r\nconst basketLineTemplate = {\r\n itemID: null,\r\n quantity: 1,\r\n item: null,\r\n itemDurations: null,\r\n itemPrice: null,\r\n};\r\n\r\nexport const BasketContext = createContext();\r\n\r\n\r\nexport const BasketProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n const [, globalActions] = useGlobalStore();\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('BasketProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n\r\n const loadData = () => {\r\n //console.log(\"loadData\");\r\n }\r\n\r\n const clearData = () => {\r\n //console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const setVessel = (vesselID) => {\r\n setState(() => ({\r\n ...initialState,\r\n vesselID: vesselID\r\n }));\r\n };\r\n\r\n\r\n const setBasketDuration = (months, itemID) => {\r\n\r\n setState(prev => {\r\n const cat = { ...prev };\r\n\r\n const id = itemID || 0;\r\n\r\n //console.log('id', id);\r\n\r\n if (id === 0) {\r\n // Set all durations\r\n cat.months = months;\r\n cat.basketLines\r\n .filter(X => Boolean(X.itemDurations))\r\n .forEach(L => {\r\n L.itemPrice = L.itemDurations.filter(D => D.months === months)[0] || L.itemPrice || L.itemDurations[0];\r\n });\r\n }\r\n else {\r\n // Set line duration\r\n const L = cat.basketLines.find(I => I.itemID === itemID);\r\n L.itemPrice = L.itemDurations.filter(D => D.months === months)[0] || L.itemPrice || L.itemDurations[0];\r\n }\r\n return { ...cat };\r\n });\r\n }\r\n\r\n const setBasketLineQuantity = (itemID, quantity) => {\r\n\r\n setState(prev => {\r\n const cat = { ...prev };\r\n\r\n // Set line duration\r\n const L = cat.basketLines.find(I => I.itemID === itemID);\r\n L.quantity = quantity;\r\n return { ...cat };\r\n });\r\n }\r\n\r\n const addRoutes = (routes) => {\r\n\r\n if (routes.length === 0)\r\n return;\r\n\r\n setState(prev => {\r\n\r\n const routeIDs = prev.routes.map(X => X.sourceRouteID);\r\n const newRoutes = routes.filter(X => !routeIDs.includes(X.sourceRouteID));\r\n\r\n return {\r\n ...prev,\r\n routes: [...prev.routes, ...newRoutes],\r\n }\r\n });\r\n }\r\n\r\n const addQuoteIDs = (quoteIDs) => {\r\n\r\n if (quoteIDs.length === 0)\r\n return;\r\n\r\n setState(prev => {\r\n const newState = { ...prev }\r\n\r\n const newQuoteIDs = quoteIDs.filter(X => !prev.quoteIDs.includes(X));\r\n\r\n if (newQuoteIDs.length > 0) {\r\n newState.quoteIDs = [...prev.quoteIDs, ...newQuoteIDs];\r\n }\r\n\r\n return { ...newState }\r\n });\r\n }\r\n\r\n const addVesselRouteItems = (vesselID, route, PGIDS) => {\r\n\r\n const routeID = route.sourceRouteID;\r\n http.post(`/api/catalogue/${vesselID}/routes/${routeID}/items`, {\r\n vesselID: vesselID,\r\n routeID: routeID,\r\n productGroupIDs: PGIDS\r\n })\r\n .then(result => {\r\n // console.log(\"addVesselRouteItems\", result.data);\r\n const response = result.data;\r\n const newVesselItemIDs = response.vesselItemIDs;\r\n const selectedItems = response.selectedItemIDs;\r\n const bufferItemIDs = response.bufferItemIDs;\r\n\r\n setState(prev => {\r\n const currentItemsIDs = prev.basketLines.map(X => X.itemID);\r\n\r\n const newSelectedItemIDs = selectedItems.filter(I => !currentItemsIDs.includes(I));\r\n\r\n\r\n const newBasketLines = newSelectedItemIDs.map(I => ({\r\n ...basketLineTemplate,\r\n itemID: I,\r\n item: globalActions.getCatalogueItem(I),\r\n }));\r\n\r\n // console.log('newBasketLines', newBasketLines);\r\n const totalBasketLines = _.orderBy([...prev.basketLines, ...newBasketLines], 'item.itemNumber');\r\n // console.log('totalBasketLines', totalBasketLines);\r\n\r\n const newRoutes = prev.routes.includes(route) ? [...prev.routes] : [...prev.routes, route];\r\n\r\n // console.log('vesselItemIDs', newVesselItemIDs);\r\n\r\n return {\r\n ...prev,\r\n vesselItemIDs: newVesselItemIDs,\r\n basketLines: totalBasketLines,\r\n routes: newRoutes,\r\n routeItemIDs: [...bufferItemIDs, ...selectedItems],\r\n // selectedItems: newSelectedItemIDs,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n const addBasketItems = (itemIDs) => {\r\n setState(prev => {\r\n const val = { ...prev }\r\n //console.log('removeBasketItems', itemIDs, val.selectedItems);\r\n\r\n const currentItemsIDs = prev.basketLines.map(X => X.itemID);\r\n const newItemIDs = itemIDs.filter(X => !currentItemsIDs.includes(X));\r\n\r\n const newBasketLines = newItemIDs.map(I => ({\r\n ...basketLineTemplate,\r\n itemID: I,\r\n item: globalActions.getCatalogueItem(I),\r\n }));\r\n\r\n val.basketLines = [...val.basketLines, ...newBasketLines];\r\n return { ...val }\r\n });\r\n }\r\n\r\n\r\n\r\n const addSourceRecord = (sourceRecord) => {\r\n if (sourceRecord) {\r\n const SQID = sourceRecord.salesQuoteID || 0;\r\n if (SQID > 0) {\r\n addQuoteIDs([SQID]);\r\n }\r\n\r\n\r\n const sourceRouteID = sourceRecord.sourceRouteID || 0;\r\n if (sourceRouteID > 0) {\r\n addRoutes([sourceRecord]);\r\n }\r\n }\r\n }\r\n\r\n const getQuoteBasketLines = (quote) => {\r\n\r\n // console.log('quote', quote);\r\n const quoteID = _.get(quote, \"salesQuoteID\", 0);\r\n if (quoteID === 0)\r\n return\r\n\r\n http.get(`/api/sales/quotes/${quoteID}/lines`)\r\n .then(result => {\r\n const quotesLines = result.data;\r\n // console.log('getQuoteBasketLines', quotesLines);\r\n\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n quoteBasket: { header: quote, lines: quotesLines },\r\n };\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }\r\n\r\n const clearQuoteBasketLines = () => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n quoteBasketLines: []\r\n };\r\n });\r\n }\r\n\r\n const addQuoteBasketItems = () => {\r\n\r\n // console.log('addQuoteBasketItems', quoteID, itemIDs);\r\n\r\n\r\n\r\n const itemIDs = state.quoteBasket.lines.map(X => X.item.itemID);\r\n addBasketItems(itemIDs);\r\n\r\n const routes = state.quoteBasket.header.routes;\r\n addRoutes(routes);\r\n\r\n const quoteID = state.quoteBasket.header.salesQuoteID;\r\n addQuoteIDs([quoteID]);\r\n // setState(prev => {\r\n // const val = { ...prev }\r\n\r\n // if (!val.quoteIDs.includes(quoteID))\r\n // val.quoteIDs.push(quoteID)\r\n\r\n // return { ...val }\r\n // });\r\n }\r\n\r\n const removeBasketItems = (itemIDs) => {\r\n setState(prev => {\r\n const val = { ...prev }\r\n //console.log('removeBasketItems', itemIDs, val.selectedItems);\r\n\r\n val.basketLines = val.basketLines.filter(X => !itemIDs.includes(X.itemID));\r\n\r\n // val.selectedItems = val.selectedItems.filter(I => !itemIDs.includes(I));\r\n return { ...val }\r\n });\r\n }\r\n\r\n const getBasketPrices = () => {\r\n\r\n const vesselID = state.vesselID;\r\n const itemIDs = state.basketLines.filter(L => !Boolean(L.itemPrice)).map(L => L.itemID);\r\n // console.log(\"getBasketPrices\", itemIDs)\r\n\r\n if (itemIDs.length === 0)\r\n return null;\r\n\r\n http.post(`/api/catalogue/${vesselID}/prices`, {\r\n vesselID: vesselID,\r\n itemIDs: itemIDs,\r\n avcso: false\r\n })\r\n .then(result => {\r\n const newItemPrices = _.orderBy(result.data, ['itemID', 'months'], ['asc', 'desc']);\r\n\r\n setState(prev => {\r\n const months = prev.months;\r\n const BL = [...prev.basketLines];\r\n\r\n BL\r\n .filter(L => !Boolean(L.itemPrice))\r\n .forEach(L => {\r\n const prices = newItemPrices.filter(I => L.itemID === I.itemID);\r\n L.itemDurations = prices;\r\n L.itemPrice = prices.filter(I => I.months === months)[0] || prices[0];\r\n });\r\n\r\n // console.log('BasketLinePrices', BL);\r\n\r\n return {\r\n ...prev,\r\n basketLines: BL,\r\n };\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n const toggleClosedProductGroups = (PGID) => {\r\n\r\n setState(prev => {\r\n // const cat = { ...prev.catalogue };\r\n const isOpen = prev.closedProductGroups.includes(PGID);\r\n\r\n // console.log('prev', cat.closedProductGroups)\r\n const newVal = isOpen ? prev.closedProductGroups.filter(X => X !== PGID) : [...prev.closedProductGroups, PGID];\r\n return {\r\n ...prev,\r\n closedProductGroups: newVal,\r\n }\r\n });\r\n }\r\n\r\n const saveManagerBasket = (reference) => {\r\n\r\n // console.log('basketLines', state.basketLines);\r\n\r\n const postData = {\r\n sourceRouteIDs: state.routes.map(X => X.sourceRouteID),\r\n reference: reference,\r\n lines: state.basketLines.map(X => ({\r\n itemID: X.itemID,\r\n quantity: X.quantity,\r\n months: _.get(X, \"itemPrice.months\", 12),\r\n })),\r\n // quantity: (globalActions.isDigitalProductGroup(X.item.productGroupID) ? X.itemPrice.months : X.quantity) })),\r\n };\r\n\r\n // console.log('postData', postData);\r\n\r\n http.post(\"/api/catalogue/baskets/update\", postData)\r\n .then((result) => {\r\n globalActions.getBaskets();\r\n\r\n const sourceRouteID = result;\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n sourceRouteID: sourceRouteID\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n }\r\n\r\n\r\n const orderBasket = () => {\r\n\r\n const postData = {\r\n vesselID: state.vesselID,\r\n sourceRouteIDs: state.routes.map(X => X.sourceRouteID),\r\n salesQuoteIDs: state.quoteIDs,\r\n reference: state.reference,\r\n lines: state.basketLines.map(X => ({\r\n itemID: X.itemID,\r\n quantity: X.quantity,\r\n months: _.get(X, \"itemPrice.months\", 12),\r\n })),\r\n avcso: false,\r\n };\r\n\r\n\r\n // console.log('orderBasket', postData);\r\n\r\n // setState(prev => {\r\n // return { ...prev, ordered: true }\r\n // })\r\n\r\n http.post(\"/api/sales/orders/create\", postData)\r\n .then((result) => {\r\n // const response = result.data;\r\n\r\n setState(prev => {\r\n\r\n return { ...prev, ordered: true }\r\n })\r\n\r\n // console.log('orders/create', response);\r\n // setVessel(0);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n\r\n }\r\n\r\n const setMapItems = (items) => {\r\n setState(prev => {\r\n\r\n // console.log('setMapItems', items);\r\n // const newState = { ...prev, mapItems: [...items] }\r\n return {\r\n ...prev,\r\n mapItems: [...items]\r\n }\r\n });\r\n }\r\n\r\n const setReference = (reference) => {\r\n setState(prev => {\r\n\r\n return {\r\n ...prev,\r\n reference: reference\r\n }\r\n });\r\n }\r\n\r\n const hasBasketPrices = () => {\r\n const lineCount = state.basketLines.length;\r\n const validLines = state.basketLines.filter(X => Boolean(X.itemPrice));\r\n return lineCount === validLines.length;\r\n }\r\n\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n setVessel: setVessel,\r\n setBasketDuration: setBasketDuration,\r\n setBasketLineQuantity: setBasketLineQuantity,\r\n\r\n\r\n addRoutes: addRoutes,\r\n addQuoteIDs: addQuoteIDs,\r\n\r\n saveManagerBasket: saveManagerBasket,\r\n\r\n setMapItems: setMapItems,\r\n\r\n addVesselRouteItems, addVesselRouteItems,\r\n addBasketItems: addBasketItems,\r\n\r\n getQuoteBasketLines: getQuoteBasketLines,\r\n clearQuoteBasketLines: clearQuoteBasketLines,\r\n addQuoteBasketItems: addQuoteBasketItems,\r\n removeBasketItems: removeBasketItems,\r\n\r\n getBasketPrices: getBasketPrices,\r\n hasBasketPrices: hasBasketPrices,\r\n toggleClosedProductGroups: toggleClosedProductGroups,\r\n\r\n orderBasket: orderBasket,\r\n\r\n setReference: setReference,\r\n addSourceRecord: addSourceRecord,\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useBasketStore = () => useContext(BasketContext);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useUserStore } from '../Stores/userStore';\r\nimport createActivityDetector from \"activity-detector\";\r\n\r\nconst useAppSession = () => {\r\n const [, userActions] = useUserStore();\r\n const [active, setActive] = useState(true);\r\n\r\n // console.log(\"useAppSession\");\r\n const refreshToken = userActions.refreshToken;\r\n\r\n useEffect(() => {\r\n const activityDetector = createActivityDetector({ timeToIdle: 60000 });\r\n activityDetector.on(\"idle\", () => setActive(() => false));\r\n activityDetector.on(\"active\", () => setActive(() => true));\r\n\r\n // clean the subscription\r\n return () => {\r\n activityDetector.stop();\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n\r\n const doRefresh = () => {\r\n\r\n setActive((P) => {\r\n if (P === true) {\r\n refreshToken();\r\n }\r\n\r\n return P;\r\n });\r\n }\r\n\r\n if (active === true) {\r\n doRefresh();\r\n }\r\n\r\n const interval = setInterval(doRefresh, 60 * 1000); // 1 minute\r\n return () => clearInterval(interval);\r\n\r\n }, [active]);\r\n}\r\n\r\nexport default useAppSession\r\n\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\n\r\nconst initialState = {\r\n itemSourceOptions:\r\n [\r\n {\r\n id: 1,\r\n caption: 'Route',\r\n preSelect: false,\r\n isBasket: false,\r\n isQuote: false,\r\n isRoute: true,\r\n },\r\n {\r\n id: 2,\r\n caption: 'Basket',\r\n preSelect: true,\r\n isBasket: true,\r\n isQuote: false,\r\n isRoute: false,\r\n },\r\n {\r\n id: 3,\r\n caption: 'Quote',\r\n preSelect: true,\r\n isBasket: false,\r\n isQuote: true,\r\n isRoute: false,\r\n },\r\n {\r\n id: 4,\r\n caption: 'Catalogue',\r\n preSelect: false,\r\n isBasket: false,\r\n isQuote: false,\r\n isRoute: false,\r\n },\r\n ],\r\n itemSource: null,\r\n sourceRecord: null,\r\n productGroup: 0,\r\n productItemGroups: [],\r\n sourceLines: [],\r\n selectedItemIDs: [],\r\n vesselItemIDs: [],\r\n filterText: null,\r\n};\r\n\r\n\r\nexport const CatalogueContext = createContext();\r\n\r\nexport const CatalogueProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n\r\n const clearData = () => {\r\n reset();\r\n }\r\n\r\n const reset = () => {\r\n setState(() => {\r\n const newState = { ...initialState };\r\n return newState;\r\n })\r\n }\r\n\r\n const setItemSource = (id) => {\r\n\r\n setState(() => {\r\n const newState = { ...initialState };\r\n newState.itemSource = newState.itemSourceOptions.find(X => X.id === id);\r\n return newState;\r\n })\r\n }\r\n\r\n const setSourceRecord = (record) => {\r\n setState(prev => {\r\n const newState = { ...initialState };\r\n newState.itemSource = { ...prev.itemSource };\r\n newState.sourceRecord = { ...record };\r\n return newState;\r\n })\r\n }\r\n\r\n const setSourceLines = (lines, selectedIDs = []) => {\r\n\r\n\r\n setState(prev => {\r\n // console.log('setSourceLines', lines);\r\n\r\n const newState = { ...prev };\r\n newState.sourceLines = [...lines];\r\n\r\n const PGIDS = _.uniq(newState.sourceLines.map(X => X.productGroupID));\r\n const itemGroupIDs = _.uniq(newState.sourceLines.map(X => X.productItemGroupID));\r\n\r\n // console.log('PGIDS', PGIDS);\r\n\r\n if (PGIDS.length === 1) {\r\n newState.productGroup = PGIDS[0];\r\n newState.productItemGroups = itemGroupIDs;\r\n }\r\n\r\n if (prev.itemSource.preSelect === true) {\r\n newState.selectedItemIDs = newState.sourceLines.map(X => X.itemID);\r\n }\r\n else {\r\n newState.selectedItemIDs = selectedIDs;\r\n }\r\n\r\n return newState;\r\n })\r\n }\r\n\r\n\r\n const setProductGroup = (PGID) => {\r\n\r\n //console.log('setProductGroup 1', PGID);\r\n\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.productGroup = PGID;\r\n\r\n // Auto select all groups\r\n const PGIDS = _.uniq(prev.sourceLines.filter(X => X.productGroupID === PGID && X.productItemGroupID).map(X => X.productItemGroupID));\r\n\r\n // console.log('setProductGroup 2', PGID, PGIDS);\r\n\r\n newState.productItemGroups = PGIDS.length > 0 ? PGIDS : [0];\r\n //newState.productItemGroups = [];\r\n return newState;\r\n })\r\n }\r\n\r\n const setProductItemGroups = (productItemGroups) => {\r\n\r\n // console.log('setProductItemGroups', productItemGroups);\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.productItemGroups = [...productItemGroups];\r\n return newState;\r\n })\r\n }\r\n\r\n const setFilterText = (text) => {\r\n\r\n // console.log('setProductItemGroups', productItemGroups);\r\n\r\n setState(prev => {\r\n const newState = { ...prev, filterText: text };\r\n // newState.productItemGroups = [...productItemGroups];\r\n return newState;\r\n })\r\n }\r\n\r\n const addSelectedItems = (itemIDs) => {\r\n\r\n const selectedItemIDs = _.uniq([...state.selectedItemIDs, ...itemIDs]);\r\n setSelectedItems(selectedItemIDs);\r\n\r\n // setState(prev => {\r\n // const newState = { ...prev };\r\n // newState.selectedItemIDs = _.uniq([...prev.selectedItemIDs, ...itemIDs]);\r\n // return newState;\r\n // })\r\n }\r\n\r\n const removeSelectedItems = (itemIDs) => {\r\n\r\n const selectedItemIDs = state.selectedItemIDs.filter(X => !itemIDs.includes(X));\r\n setSelectedItems(selectedItemIDs);\r\n\r\n // setState(prev => {\r\n // const newState = { ...prev };\r\n // newState.selectedItemIDs = prev.selectedItemIDs.filter(X => !itemIDs.includes(X));\r\n // //newState.selectedItemIDs = [];\r\n // return newState;\r\n // })\r\n }\r\n\r\n const toggleSelectedItem = (itemID) => {\r\n\r\n // const isSelected = state.selectedItemIDs.includes(itemID);\r\n // const selectedItemIDs = isSelected ? state.selectedItemIDs.filter(X => X !== itemID) : [...state.selectedItemIDs, itemID];\r\n // setSelectedItems(selectedItemIDs);\r\n setState(prev => {\r\n const newState = { ...prev };\r\n const isSelected = prev.selectedItemIDs.includes(itemID);\r\n newState.selectedItemIDs = isSelected ? prev.selectedItemIDs.filter(X => X !== itemID) : [...prev.selectedItemIDs, itemID];\r\n return newState;\r\n })\r\n }\r\n\r\n const setSelectedItems = (selectedItemIDs) => {\r\n\r\n //console.log('setSelectedItems', selectedItemIDs.length)\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.selectedItemIDs = _.difference(selectedItemIDs, prev.vesselItemIDs);\r\n //newState.selectedItemIDs = [];\r\n return newState;\r\n })\r\n\r\n }\r\n\r\n\r\n const getSelectedProductGroupItemCount = (PGID) => {\r\n\r\n const { sourceLines, selectedItemIDs } = state;\r\n return sourceLines\r\n .filter(X => X.productItemGroupID === PGID && selectedItemIDs.includes(X.itemID)).length;\r\n }\r\n\r\n const loadVesselItemIDs = (vesselID) => {\r\n\r\n if (vesselID > 0) {\r\n http.get(`/api/fleet/holdings/${vesselID}/ID`)\r\n .then(result => {\r\n\r\n const VIDS = result.data.vesselItemIDs;\r\n setVesselItemIDs(VIDS);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n else {\r\n // Reset \r\n setVesselItemIDs([]);\r\n }\r\n }\r\n\r\n const loadSalesQuoteItems = (SQID) => {\r\n\r\n if (SQID > 0) {\r\n\r\n http.get(`/api/sales/quotes/${SQID}/lines`)\r\n .then(result => {\r\n const lines = result.data;\r\n const items = lines.map(X => X.item);\r\n // console.log('items', items);\r\n setSourceLines(items);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n else {\r\n // Reset \r\n setVesselItemIDs([]);\r\n }\r\n }\r\n\r\n const loadRouteItems = (vesselID, routeID, PGIDS) => {\r\n\r\n // const routeID = route.sourceRouteID;\r\n http.post(`/api/catalogue/${vesselID}/routes/${routeID}/items`, {\r\n vesselID: vesselID,\r\n routeID: routeID,\r\n productGroupIDs: PGIDS\r\n })\r\n .then(result => {\r\n // console.log(\"addVesselRouteItems\", result.data);\r\n const response = result.data;\r\n // const newVesselItemIDs = response.vesselItemIDs;\r\n // const selectedItems = response.selectedItemIDs;\r\n // const bufferItemIDs = response.bufferItemIDs;\r\n\r\n //console.log('response', response);\r\n\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n\r\n const setVesselItemIDs = (VIDS) => {\r\n\r\n // console.log('setVesselItemIDs', VIDS);\r\n\r\n setState((prev) => {\r\n const newState = { ...prev };\r\n newState.vesselItemIDs = VIDS || [];\r\n return newState;\r\n })\r\n }\r\n\r\n\r\n const getSelectedProductItems = () => {\r\n const { productGroup, selectedItemIDs, sourceLines } = state;\r\n return sourceLines.filter(X => X.productGroupID === productGroup && selectedItemIDs.includes(X.itemID));\r\n }\r\n\r\n const actions = {\r\n // loadData: loadData,\r\n clearData: clearData,\r\n reset: reset,\r\n\r\n setItemSource: setItemSource,\r\n setSourceRecord: setSourceRecord,\r\n setProductGroup: setProductGroup,\r\n setProductItemGroups: setProductItemGroups,\r\n setFilterText: setFilterText,\r\n setSourceLines: setSourceLines,\r\n\r\n // addSourceRecord:addSourceRecord, // Items added to basket\r\n\r\n addSelectedItems: addSelectedItems,\r\n removeSelectedItems: removeSelectedItems,\r\n toggleSelectedItem: toggleSelectedItem,\r\n\r\n loadSalesQuoteItems: loadSalesQuoteItems,\r\n loadRouteItems: loadRouteItems,\r\n\r\n getSelectedProductGroupItemCount: getSelectedProductGroupItemCount,\r\n\r\n loadVesselItemIDs: loadVesselItemIDs,\r\n\r\n getSelectedProductItems: getSelectedProductItems,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\n\r\nexport const useCatalogueStore = () => useContext(CatalogueContext);","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\n\r\n\r\nconst initialState = {\r\n productGroup: 3,\r\n productItemGroups: [8, 10, 11, 12, 13, 14],\r\n licenseLines: [],\r\n\r\n avcsoItemIDs: [],\r\n avcsoLines: [],\r\n\r\n selectedItemIDs: [],\r\n\r\n // basketItemIDs: [],\r\n basketLines: [],\r\n\r\n months: 12,\r\n reference: \"\",\r\n\r\n};\r\n\r\n\r\nexport const AvcsoContext = createContext();\r\n\r\nexport const AvcsoProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n\r\n const loadData = () => {\r\n\r\n http.get(`/api/sales/avcso/licenses`)\r\n .then(response => {\r\n const data = response.data;\r\n\r\n setState(prev => {\r\n const newState = {\r\n ...prev,\r\n ...data\r\n };\r\n\r\n return newState;\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }\r\n\r\n const clearData = () => {\r\n setState((prev) => {\r\n const newState = { ...initialState };\r\n newState.avcsoItemIDs = prev.avcsoItemIDs;\r\n newState.licenseLines = prev.licenseLines;\r\n return newState;\r\n })\r\n }\r\n\r\n const isLoaded = () => {\r\n return state.avcsoItemIDs.length > 0;\r\n }\r\n\r\n const hasAvcsoLicense = () => {\r\n return isLoaded && state.licenseLines.length > 0;\r\n }\r\n\r\n const toggleSelectedItem = (itemID) => {\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n const isSelected = prev.selectedItemIDs.includes(itemID);\r\n newState.selectedItemIDs = isSelected ? prev.selectedItemIDs.filter(X => X !== itemID) : [...prev.selectedItemIDs, itemID];\r\n return newState;\r\n })\r\n }\r\n\r\n const setProductItemGroups = (productItemGroups) => {\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.productItemGroups = [...productItemGroups];\r\n return newState;\r\n })\r\n }\r\n\r\n const setAvcsoLines = (lines) => {\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.avcsoLines = [...lines];\r\n return newState;\r\n })\r\n }\r\n\r\n const addselectedToBasket = () => {\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n\r\n const basketItemIDs = prev.basketLines.map(X => X.itemID);\r\n const addItemIDs = prev.selectedItemIDs.filter(X => !basketItemIDs.includes(X));\r\n\r\n const newItemIDs = [...basketItemIDs, ...addItemIDs];\r\n\r\n const newBasketLines = prev.avcsoLines.filter(X => newItemIDs.includes(X.itemID));\r\n // console.log('newBasketLines', newBasketLines);\r\n newState.basketLines = newBasketLines;\r\n return newState;\r\n })\r\n }\r\n\r\n const removeBasketItems = (itemIDs) => {\r\n setState(prev => {\r\n const newState = { ...prev };\r\n newState.basketLines = newState.basketLines.filter(X => !itemIDs.includes(X.itemID));\r\n return { ...newState }\r\n });\r\n }\r\n\r\n const getBasketPrices = () => {\r\n\r\n const vesselID = 0;\r\n const itemIDs = state.basketLines.filter(L => !Boolean(L.itemPrice)).map(L => L.itemID);\r\n // console.log(\"getBasketPrices\", itemIDs)\r\n\r\n if (itemIDs.length === 0)\r\n return null;\r\n\r\n http.post(`/api/catalogue/${vesselID}/prices`, {\r\n vesselID: vesselID,\r\n itemIDs: itemIDs,\r\n avcso: true\r\n })\r\n .then(result => {\r\n const newItemPrices = _.orderBy(result.data, ['itemID', 'months'], ['asc', 'desc']);\r\n\r\n setState(prev => {\r\n const months = prev.months;\r\n const BL = [...prev.basketLines];\r\n\r\n BL\r\n .filter(L => !Boolean(L.itemPrice))\r\n .forEach(L => {\r\n const prices = newItemPrices.filter(I => L.itemID === I.itemID);\r\n L.itemDurations = prices;\r\n L.itemPrice = prices.filter(I => I.months === months)[0] || prices[0];\r\n });\r\n\r\n //console.log('BasketLinePrices', BL);\r\n\r\n return {\r\n ...prev,\r\n basketLines: BL,\r\n };\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n const hasBasketPrices = () => {\r\n const lineCount = state.basketLines.length;\r\n const validLines = state.basketLines.filter(X => Boolean(X.itemPrice));\r\n return lineCount === validLines.length;\r\n }\r\n\r\n\r\n const setBasketDuration = (months, itemID) => {\r\n\r\n setState(prev => {\r\n const newState = { ...prev };\r\n const id = itemID || 0;\r\n\r\n if (id === 0) {\r\n // Set all durations\r\n newState.months = months;\r\n newState.basketLines\r\n .filter(X => Boolean(X.itemDurations))\r\n .forEach(L => {\r\n L.itemPrice = L.itemDurations.filter(D => D.months === months)[0] || L.itemPrice || L.itemDurations[0];\r\n });\r\n }\r\n else {\r\n // Set line duration\r\n const line = newState.basketLines.find(I => I.itemID === itemID);\r\n line.itemPrice = line.itemDurations.filter(D => D.months === months)[0] || line.itemPrice || line.itemDurations[0];\r\n }\r\n return newState;\r\n });\r\n }\r\n\r\n\r\n const getTotalPriceLocal = () => {\r\n\r\n const result = {\r\n currencyID: 0,\r\n totalPrice: 0,\r\n valid: false,\r\n };\r\n const priceLines = state.basketLines.filter(X => X.itemPrice);\r\n\r\n if (priceLines.length === 0 || priceLines.length != state.basketLines.length)\r\n return result;\r\n\r\n // const currencyPrice = _.sum(state.basketLines).toFixed(2);\r\n\r\n\r\n const currencyPrice = _.sumBy(priceLines, (L) => L.itemPrice.price).toFixed(2);\r\n\r\n result.currencyID = state.basketLines[0].itemPrice.currencyID;\r\n result.totalPrice = currencyPrice;\r\n result.valid = true;\r\n\r\n // console.log('getTotalPriceLocal', result);\r\n\r\n return result;\r\n } \r\n\r\n const setReference = (reference) => {\r\n setState(prev => {\r\n return {\r\n ...prev,\r\n reference: reference\r\n }\r\n });\r\n }\r\n\r\n const orderBasket = () => {\r\n\r\n const postData = {\r\n vesselID: 0,\r\n sourceRouteIDs: [],\r\n salesQuoteIDs: [],\r\n reference: state.reference,\r\n lines: state.basketLines.map(X => ({\r\n itemID: X.itemID,\r\n quantity: X.quantity,\r\n months: _.get(X, \"itemPrice.months\", 12),\r\n })),\r\n avcso: true,\r\n };\r\n\r\n http.post(\"/api/sales/orders/create\", postData)\r\n .then((result) => {\r\n setState(prev => {\r\n return { ...prev, ordered: true }\r\n });\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n }\r\n\r\n const actions = {\r\n loadData: loadData,\r\n clearData: clearData,\r\n\r\n isLoaded: isLoaded,\r\n hasAvcsoLicense: hasAvcsoLicense,\r\n\r\n toggleSelectedItem: toggleSelectedItem,\r\n\r\n setProductItemGroups: setProductItemGroups,\r\n setAvcsoLines: setAvcsoLines,\r\n\r\n addselectedToBasket: addselectedToBasket,\r\n removeBasketItems: removeBasketItems,\r\n\r\n getBasketPrices: getBasketPrices,\r\n hasBasketPrices: hasBasketPrices,\r\n\r\n setBasketDuration: setBasketDuration,\r\n setReference: setReference,\r\n\r\n getTotalPriceLocal, getTotalPriceLocal,\r\n\r\n orderBasket: orderBasket,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport const useAvcsoStore = () => useContext(AvcsoContext);\r\n\r\n\r\n","import React from 'react'\r\n\r\n// Material UI Support Files\r\nimport { BottomNavigation, BottomNavigationAction } from '@material-ui/core';\r\nimport { HeadsetMic, ShoppingBasket, DirectionsBoat, Explore } from '@material-ui/icons';\r\nimport Home from '@material-ui/icons/Home';\r\n\r\n\r\n// Custom Styling Properties\r\nimport menuStyles from '../CSS/MenuStyles.module.css';\r\n\r\n// Actual work starts here\r\nconst BottomNav = () => {\r\n\r\n // const [value, setValue] = React.useState(0);\r\n\r\n return (\r\n \r\n {/*Bottom Menu: Holds Bottom Menu with default quick menu items defined per the most likely used menus by users*/}\r\n
\r\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 BottomNav","const Menu = [\r\n {\r\n id: 1,\r\n label: \"News & Announcements\",\r\n shortDescription: \"Get the latest from us\",\r\n to: \"/news\",\r\n },\r\n {\r\n id: 2,\r\n label: \"Order Management\",\r\n shortDescription: \"Manage orders and approvals\",\r\n to: \"/sales\",\r\n subItems: [\r\n { id: 1, label: 'Quotations To Approve', to: \"/sales/quotes\" },\r\n { id: 2, label: 'Create New Order', to: \"/sales/catalogue\" },\r\n { id: 3, label: 'Order History', to: \"/sales/orders\" },\r\n { id: 4, label: 'Flat Fee Contracts', to: \"/sales/flatfee\" },\r\n { id: 5, label: 'Shipment Tracking', to: \"/sales/shipments\" },\r\n { id: 6, label: 'AVCS Online', to: \"/sales/avcso\" },\r\n ],\r\n },\r\n {\r\n id: 3,\r\n label: \"Fleet Management\",\r\n shortDescription: \"Manage fleet and updates\",\r\n to: \"/fleet\",\r\n subItems: [\r\n { id: 1, label: 'Fleet Holdings', to: \"/fleet/holdings\" },\r\n { id: 2, label: 'Fleet Status', to: \"/fleet/status\" },\r\n // { id: 3, label: 'Fleet Tracking', to: \"/fleet/tracking\" },\r\n { id: 4, label: 'Fleet Overview', to: \"/fleet/overview\" },\r\n { id: 5, label: 'Navigator Updates', to: \"/fleet/navigator\" },\r\n { id: 6, label: 'Folio Status', to: \"/folios/status\" },\r\n ],\r\n },\r\n // {\r\n // id: 3,\r\n // label: \"Reports\",\r\n // to: \"/reports\",\r\n // subItems: [\r\n // { id: 1, label: 'Noon report' },\r\n // { id: 2, label: 'Ship Performance' },\r\n // { id: 3, label: 'ENC Usage' },\r\n // { id: 4, label: 'Alarms & Notifications' },\r\n // { id: 5, label: 'Compliancy check' },\r\n // { id: 6, label: 'ECDIS Info' },\r\n // ],\r\n // },\r\n // {\r\n // id: 4,\r\n // label: \"News\",\r\n // to: \"/news\",\r\n // subItems: [\r\n // ],\r\n // },\r\n // {\r\n // id: 5,\r\n // label: \"e-Reader\",\r\n // to: \"/e-reader\",\r\n // subItems: [\r\n // ],\r\n // },\r\n // {\r\n // id: 6,\r\n // label: \"Map\",\r\n // to: \"/map\",\r\n // subItems: [\r\n // ],\r\n // }\r\n\r\n];\r\n\r\nexport default Menu;","const MobileConfiguration =\r\n {\r\n Shutdown:\r\n { \r\n Code: \"900\",\r\n Status: false,\r\n Header: \"Mobile Version Unavailable\",\r\n ShortDescription: \"System Maintenance\" ,\r\n LongDescription: \"Our Technical Team is working on maintaing a perfect System for you. This usually takes 30minutes to an hour.\",\r\n Resolve: \"Please check back shortly or contact our customer service agents for alternative solutions to what you want to do\",\r\n },\r\n Version:\r\n { \r\n Current: \"1.0.0\",\r\n PreviousVersion: \"\"\r\n },\r\n Display:\r\n { \r\n MobileVersion: null,\r\n }\r\n }\r\n\r\nexport default MobileConfiguration","import React, { useEffect, useState } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\n////// Material UI Support Files\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Drawer, Button, List, ListItem, ListItemText, Divider, Icon, Grid, Collapse } from \"@material-ui/core\";\r\nimport { createMuiTheme, ThemeProvider } from '@material-ui/core/styles';\r\n\r\nimport {ExpandLess, ExpandMore} from '@material-ui/icons';\r\n// import ExpandMore from '@material-ui/icons/ExpandMore';\r\n\r\n////// Global Files\r\nimport Menu from '../../../Global/Data/Menu';\r\nimport { useUserStore } from '../../../Global/Stores/userStore';\r\n\r\n////// Custom Styling Properties\r\nimport menuStyles from '../CSS/MenuStyles.module.css'; \r\n\r\n////// Images\r\nimport CT_Logo from \"../../../../src/Images/CT_TEXT.png\";\r\nimport CT_DIST_Logo from \"../../../../src/Images/AVCS/ADM_ICA_DD_rgb.png\";\r\nimport MobileConfiguration from \"../../../Global/Data/Config\";\r\n\r\nconst useStyles = makeStyles({\r\n list: {\r\n width: window.screen.width,\r\n },\r\n noFormat: {\r\n color: \"inherit\",\r\n textDecoration: \"none\",\r\n },\r\n});\r\n\r\nconst theme = createMuiTheme({\r\n overrides: {\r\n // Style sheet name\r\n MuiListItemText: {\r\n // Name of the rule\r\n primary: {\r\n // Some CSS\r\n fontSize: 12,\r\n },\r\n secondary: {\r\n fontSize: 10,\r\n }\r\n },\r\n },\r\n});\r\n\r\nconst Copyright = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nconst TopNav = () => {\r\n // Get user Data\r\n const [userState, userActions] = useUserStore(); // Userinfo\r\n const [profileState, setProfileState] = useState(); // Userinfo\r\n const classes = useStyles();\r\n \r\n \r\n useEffect(() => {\r\n setProfileState(() => ({ ...userState.user }))\r\n }, []);\r\n \r\n \r\n // Menu slide from left\r\n const [state, setState] = React.useState({\r\n left: false\r\n });\r\n \r\n const toggleDrawer = (side, open) => event => {\r\n if (\r\n event.type === \"keydown\" &&\r\n (event.key === \"Tab\" || event.key === \"Shift\")\r\n ) {\r\n return;\r\n }\r\n \r\n setState({ ...state, [side]: open });\r\n };\r\n \r\n \r\n \r\n const [openMenu, setOpenMenu] = React.useState(false);\r\n \r\n const clickMenu = () => {\r\n setOpenMenu(!openMenu);\r\n };\r\n\r\n\r\n // Desktop View\r\n const onDesktopView = () => {\r\n // setAnchorEl(null);\r\n localStorage.setItem('isMobile', 'desktop');\r\n window.location.reload(true);\r\n }\r\n\r\n // Logout\r\n const onLogout = () => {\r\n // setAnchorEl(null);\r\n userActions.logout(true);\r\n }\r\n \r\n \r\n // Complete this function and it's use later\r\n \r\n \r\n if (!profileState){\r\n return null;\r\n }\r\n \r\n // console.log(profileState);\r\n // Load Menu Items from JSON File \r\n \r\n const sideList = side => (\r\n \r\n {/* Back/Menu Exit Button */} \r\n \r\n \r\n \r\n arrow_back} />\r\n \r\n \r\n \r\n {/* Start: Load menu from JSON File */}\r\n \r\n {/* Account and Settings */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Logout */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Logout */}\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 \r\n \r\n {sideList(\"left\")}\r\n


\r\n {}\r\n
\r\n
\r\n \r\n {profileState.firstName} {profileState.lastName}
\r\n {profileState.company} \r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\n\r\nconst MenuList = props => {\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClick = () => {\r\n setOpen(!open);\r\n };\r\n const classes = useStyles();\r\n\r\n const subMenuItems = props.subMenus;\r\n// console.log(\"Sub Menu Items: \", subMenuItems, \"\\n Main Menu Items: \", props.mainMenuItem);\r\n if(subMenuItems){\r\n return (\r\n \r\n \r\n \r\n \r\n {open ? : }\r\n \r\n \r\n \r\n {subMenuItems.map(subMenuItem => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\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\nconst ShowMenu = (props) => {\r\n return (\r\n \r\n {Menu.map(mainMenu => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\n\r\n\r\nexport default TopNav;\r\n","\r\nconst getSalesOrderStatusColor = (StatusID) => {\r\n let result = \"black\";\r\n switch (StatusID) {\r\n case 3:\r\n result = \"#ff9900\";\r\n break;\r\n case 4:\r\n result = \"#1dc71d\";\r\n break;\r\n case 5:\r\n result = \"#ff4a4a\";\r\n break;\r\n default:\r\n }\r\n return result;\r\n};\r\n\r\nconst getHoldingLineColor = (line) => {\r\n let color = \"black\";\r\n if (!line.active)\r\n color = \"black\"\r\n else if (line.valid)\r\n color = \"#1dc71d\" // Green\r\n else if (line.warning)\r\n color = \"#ff9900\" // Warning\r\n else if (line.issue)\r\n color = \"#ff4a4a\"; // Error\r\n\r\n return color;\r\n};\r\n\r\n\r\nconst getHoldingStatusClass = (issue, warning, active) => {\r\n let result = \"statusGreen\";\r\n if (active == false)\r\n result = \"statusGray\"\r\n else if (issue === true)\r\n result = \"statusRed\"\r\n else if (warning === true)\r\n result = \"statusOrange\"\r\n\r\n\r\n // console.log('getHoldingStatusClass', result, { issue, warning })\r\n return result;\r\n};\r\n\r\n\r\nexport { getSalesOrderStatusColor, getHoldingLineColor, getHoldingStatusClass }","import React from 'react';\r\nimport { Polygon } from 'react-leaflet';\r\n\r\nconst defaultWeight = 1;\r\nconst defaultWeightSelected = 5;\r\n\r\nconst ItemPolygon = (props) => {\r\n\r\n const selected = Boolean(props.selected || false);\r\n const focused = Boolean(props.focused || false);\r\n\r\n const fillOpacity = focused === true ? 0.2 : 0.01;\r\n const weight = selected === true ? defaultWeightSelected : defaultWeight;\r\n\r\n // const positions = props.positions;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ItemPolygon;\r\n","import React, { useMemo } from 'react';\r\nimport { getSalesOrderStatusColor } from '../Helpers/GlobalHelper';\r\nimport ItemPolygon from './ItemPolygon';\r\n\r\nconst SalesOrderLinePolygon = ({ line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n if (!line.item.polygonPoints)\r\n return null;\r\n\r\n const positions = line.item.polygonPoints;\r\n const color = getSalesOrderStatusColor(line.salesOrderLineStatusID);\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [selected]);\r\n\r\n};\r\n\r\nexport default SalesOrderLinePolygon;\r\n","\r\nfunction fixLat(lat) {\r\n if (lat > 85 || lat < -85) {\r\n if (lat > 85) {\r\n return 85;\r\n }\r\n if (lat < -85) {\r\n return -85;\r\n }\r\n }\r\n return lat;\r\n}\r\n\r\nconst regex = /\\(([^()]+)\\)/g;\r\nconst wktToCoordinatesArray = (wkt) => {\r\n let polygon = [];\r\n\r\n //console.log(wkt);\r\n if (!wkt)\r\n return polygon;\r\n\r\n let pols = wkt.split(\"),(\");\r\n for (let i = 0; i < pols.length; i++) {\r\n polygon[i] = [];\r\n let results;\r\n while ((results = regex.exec(pols[i]))) {\r\n const line = results[1];\r\n const points = line.split(\",\");\r\n\r\n //points.pop(); // remove last point\r\n\r\n points.forEach(point => {\r\n const xy = point.split(\" \");\r\n polygon[i].push([fixLat(parseFloat(xy[1])), parseFloat(xy[0])]);\r\n });\r\n }\r\n }\r\n return polygon;\r\n}\r\n\r\nconst checkPolygonInPoint = (LatLng, polyPoints) => {\r\n\r\n for (let index = 0; index < polyPoints.length; index++) {\r\n const poly = polyPoints[index];\r\n if (isMarkerInsidePolygon(LatLng, poly) === true)\r\n return true\r\n }\r\n}\r\n\r\nconst isMarkerInsidePolygon = (LatLng, polyPoints) => {\r\n\r\n if (polyPoints.length === 0)\r\n return false;\r\n\r\n const y = LatLng.lng;\r\n const x = LatLng.lat;\r\n\r\n let inside = false;\r\n for (let i = 0, j = polyPoints.length - 1; i < polyPoints.length; j = i++) {\r\n const xi = polyPoints[i][0], yi = polyPoints[i][1];\r\n const xj = polyPoints[j][0], yj = polyPoints[j][1];\r\n\r\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n\r\n if (intersect)\r\n inside = !inside;\r\n }\r\n return inside;\r\n};\r\n\r\nconst setSalesQuoteLines = (salesQuote) => {\r\n salesQuote.lines.forEach(line => {\r\n line.item.polygonPoints = wktToCoordinatesArray(line.item.polygon);\r\n });\r\n}\r\n\r\nconst getLineBounds = (lines) => {\r\n return lines\r\n .filter(X => X.item.polygonPoints && X.item.polygonPoints.length > 0)\r\n .map(X => X.item.polygonPoints);\r\n}\r\n\r\n\r\n\r\nexport { checkPolygonInPoint }","import React, { useMemo } from 'react';\r\nimport { ListItemIcon } from '@material-ui/core';\r\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\r\n\r\nconst OrderLineStatus = ({ line }) => {\r\n\r\n\r\n const getSalesOrderStatusClass = (salesOrderLineStatusID) => {\r\n let result = \"statusGray\";\r\n switch (salesOrderLineStatusID) {\r\n case 3:\r\n result = \"statusOrange\";\r\n break;\r\n case 4:\r\n result = \"statusGreen\";\r\n break;\r\n case 5:\r\n result = \"statusRed\";\r\n break;\r\n default:\r\n }\r\n return result;\r\n };\r\n\r\n const className = getSalesOrderStatusClass(line.salesOrderLineStatusID);\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n }, line.salesOrderLineStatusID);\r\n\r\n};\r\n\r\nexport default OrderLineStatus;\r\n","import React, { useState } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, ListItemSecondaryAction, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport OrderLineStatus from '../../Widgets/OrderLineStatus';\r\n\r\nconst MapPopupSalesOrderLines = ({ popupInfo }) => {\r\n\r\n\r\n const [closeKey, setCloseKey] = useState(0);\r\n // console.log('popupInfo', popupInfo);\r\n return popupInfo.position && closeKey !==popupInfo.key ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(line => {\r\n return (\r\n setCloseKey(popupInfo.key)}\r\n >\r\n \r\n\r\n \r\n {/* */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n ) : null;\r\n};\r\n\r\nexport default MapPopupSalesOrderLines;\r\n","import React from 'react';\r\nimport { Polyline } from 'react-leaflet';\r\n\r\n\r\nconst defaultColor = \"blue\";\r\nconst defaultColorSelected = \"red\";\r\n\r\n\r\n\r\n// const defaultStroke?: boolean;\r\nconst defaultWeight = 1;\r\nconst defaultWeightSelected = 2;\r\n\r\n\r\n// const defaultOpacity?: number;\r\n// const defaultLineCap?: LineCapShape;\r\n// const defaultLineJoin?: LineJoinShape;\r\n// const defaultDashArray?: string | number[];\r\n// const defaultDashOffset?: string;\r\n// const defaultFill?: boolean;\r\n// const defaultFillColor?: string;\r\n// const defaultFillOpacity?: number;\r\n\r\nconst BaseRoute = ({ color = defaultColor, positions, selected = false, sourceRouteID }) => {\r\n return ();\r\n}\r\n\r\nexport default BaseRoute\r\n","import React, { useMemo, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport BaseRoute from '../Base/BaseRoute';\r\n\r\nconst GeneralRoutesLayer = ({ Routes }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('GeneralRoutesLayer', Routes);\r\n\r\n if (!Routes || Routes.length === 0)\r\n return null;\r\n\r\n return (\r\n \r\n {\r\n Routes.length > 0 ? Routes.map(R => ()) : null\r\n }\r\n \r\n );\r\n\r\n }, [Routes]);\r\n};\r\n\r\nexport default GeneralRoutesLayer;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport SalesOrderLinePolygon from '../Polygons/SalesOrderLinePolygon';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\nimport MapPopupSalesOrderLines from '../Popup/MapPopupSalesOrderLines';\r\nimport GeneralRoutesLayer from './Catalogue/GeneralRoutesLayer';\r\n\r\nconst SalesOrderLayer = ({ match, history, mapActions }) => {\r\n const [saleState] = useSaleStore();\r\n const salesOrderID = saleState.orderDetail ? saleState.orderDetail.order.salesOrderID : 0;\r\n const selectedLineID = +match.params.lineID || 0;\r\n\r\n\r\n const filter = saleState.orderDetail ? saleState.orderDetail.statusFilter : [];\r\n\r\n // console.log('selectedLineID', salesOrderID, selectedLineID)\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n\r\n useEffect(() => {\r\n if (salesOrderID > 0) {\r\n mapActions.zoomToLines(saleState.orderDetail.order.lines);\r\n }\r\n }, [salesOrderID]);\r\n\r\n\r\n useEffect(() => {\r\n if (salesOrderID > 0 && selectedLineID > 0) {\r\n const line = saleState.orderDetail.order.lines.find(X => X.salesOrderLineID === selectedLineID);\r\n mapActions.zoomToLines(line);\r\n }\r\n }, [selectedLineID]);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n\r\n if (salesOrderID === 0)\r\n return null;\r\n\r\n\r\n const onClick = (e) => {\r\n // console.log(\"onClick\", e);\r\n let selected = lines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n\r\n //console.log(\"history\", selected.length);\r\n history.push(`/sales/orders/${selected[0].salesOrderID}/${selected[0].salesOrderLineID}`);\r\n // mapActions.zoomToLines(selected);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n // console.log(\"selected\", selected);\r\n };\r\n\r\n\r\n const lines = saleState.orderDetail.order.lines;\r\n const routes = saleState.orderDetail.order.routes;\r\n\r\n let filteredLines = lines.filter(X => X.item.polygonPoints);\r\n\r\n if (saleState.orderDetail.statusFilter) {\r\n // console.log('statusFilter', orderDetail.statusFilter);\r\n filteredLines = filteredLines.filter(X => saleState.orderDetail.statusFilter.includes(X.salesOrderLineStatusID));\r\n }\r\n\r\n // console.log(\"filteredLines\", filteredLines.length);\r\n\r\n\r\n const sortedLines = _.orderBy(filteredLines, ['item.scale'], ['desc']);\r\n\r\n // mapActions.zoomToLines(filteredLines);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n // sortedLines.map(X => )\r\n sortedLines.map(X => )\r\n }\r\n \r\n \r\n\r\n \r\n );\r\n\r\n\r\n\r\n }, [salesOrderID, popup, filter, selectedLineID])\r\n\r\n};\r\n\r\nexport default SalesOrderLayer;\r\n","import React, { useMemo } from 'react';\r\nimport ItemPolygon from './ItemPolygon';\r\n\r\nconst SalesQuoteLinePolygon = ({ line, selected }) => {\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('SalesQuoteLinePolygon', line);\r\n\r\n if (!line.item.polygonPoints)\r\n return null;\r\n\r\n const positions = line.item.polygonPoints;\r\n const color = line.validationID === 1 ? \"#1dc71d\" : \"#ff4a4a\";\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [line.validationID, selected]);\r\n}\r\n\r\nexport default SalesQuoteLinePolygon\r\n","import React from 'react'\r\nimport { ListItemIcon } from '@material-ui/core';\r\nimport CircleIcon from '@material-ui/icons/FiberManualRecord';\r\n\r\nconst StatusCircle = ({ className }) => {\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default StatusCircle\r\n","import React, { useState } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, ListItemSecondaryAction, Link } from '@material-ui/core';\r\n// import ValidationWidget from '../../Desktop/Misc/ValidationWidget';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport StatusCircle from '../../Widgets/StatusCircle';\r\n\r\nconst MapPopupSalesQuoteLines = ({ popupInfo }) => {\r\n\r\n // console.log('popupInfo', popupInfo);\r\n const [closeKey, setCloseKey] = useState(0);\r\n\r\n\r\n // console.log('popupInfo', popupInfo.lines);\r\n\r\n return popupInfo.position && closeKey !== popupInfo.key ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(line => {\r\n\r\n let classNameValidation = \"\";\r\n if (line.validationID === 1)\r\n classNameValidation = \"statusGreen\"\r\n else if (line.validationID === 2)\r\n classNameValidation = \"statusRed\"\r\n\r\n\r\n return (\r\n setCloseKey(popupInfo.key)}\r\n >\r\n \r\n\r\n \r\n\r\n {/* */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n ) : null;\r\n};\r\n\r\nexport default MapPopupSalesQuoteLines;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport SalesQuoteLinePolygon from '../Polygons/SalesQuoteLinePolygon';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\nimport MapPopupSalesQuoteLines from '../Popup/MapPopupSalesQuoteLines';\r\nimport GeneralRoutesLayer from './Catalogue/GeneralRoutesLayer';\r\n\r\nconst SalesQuoteLayer = ({ match, history, mapActions }) => {\r\n\r\n const [saleState] = useSaleStore();\r\n const salesQuoteID = saleState.quoteDetail ? saleState.quoteDetail.quote.salesQuoteID : 0;\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n\r\n\r\n // const salesQuoteID = +match.params.id;\r\n const selectedLineID = +match.params.lineID || 0;\r\n // console.log('selectedLineID', selectedLineID);\r\n\r\n useEffect(() => {\r\n if (salesQuoteID > 0) {\r\n //console.log(\"selected line ID: \", saleState.quoteDetail.quote.lines) \r\n mapActions.zoomToLines(saleState.quoteDetail.quote.lines);\r\n }\r\n }, [salesQuoteID]);\r\n \r\n\r\n useEffect(() => {\r\n if (salesQuoteID > 0 && selectedLineID > 0) {\r\n const line = saleState.quoteDetail.quote.lines.find(X => X.salesQuoteLineID === selectedLineID);\r\n mapActions.zoomToLines(line);\r\n }\r\n }, [salesQuoteID, selectedLineID]);\r\n\r\n if (salesQuoteID === 0) return null;\r\n\r\n const lines = saleState.quoteDetail.quote.lines;\r\n const routes = saleState.quoteDetail.quote.routes;\r\n\r\n const filteredLines = lines.filter(X => X.item.polygonPoints);\r\n const sortedLines = _.orderBy(filteredLines, ['item.scale'], ['desc']);\r\n //const selectedLineID = saleState.quoteDetail.selectedLineID;\r\n\r\n const onClick = (e) => {\r\n // console.log(\"onClick\", e);\r\n let selected = lines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n history.push(`/sales/quotes/${selected[0].salesQuoteID}/${selected[0].salesQuoteLineID}`);\r\n // mapActions.zoomToLines(selected);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"selected\", selected);\r\n };\r\n\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n // sortedLines.map(X => )\r\n sortedLines.map(X => )\r\n }\r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default SalesQuoteLayer;","import React, { useMemo } from 'react';\r\nimport { getHoldingLineColor } from '../Helpers/GlobalHelper';\r\nimport ItemPolygon from './ItemPolygon';\r\n\r\nconst HoldingLinePolygon = ({ line, selected }) => {\r\n\r\n\r\n return useMemo(() => {\r\n if (!line.item.polygonPoints)\r\n return null;\r\n\r\n const color = getHoldingLineColor(line);\r\n\r\n const positions = line.item.polygonPoints;\r\n return (\r\n \r\n );\r\n }, [selected])\r\n\r\n};\r\n\r\nexport default HoldingLinePolygon;\r\n","import React, { useMemo } from 'react';\r\nimport StatusCircle from './StatusCircle';\r\nimport { getHoldingStatusClass } from '../MapControl/Helpers/GlobalHelper';\r\n\r\nconst HoldingLineStatus = ({ line }) => {\r\n\r\n // if (line.item.itemID === 54083)\r\n //console.log('line', line);\r\n\r\n\r\n\r\n\r\n return useMemo(() => {\r\n\r\n const itemClass = getHoldingStatusClass(line.itemIssue, line.itemWarning, line.active);\r\n const updateClass = getHoldingStatusClass(line.updateIssue, line.updateWarning, line.active);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [line]);\r\n}\r\n\r\n\r\nexport default HoldingLineStatus\r\n","import React, { useState } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, ListItemSecondaryAction, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport HoldingLineStatus from '../../Widgets/HoldingLineStatus';\r\n\r\nconst MapPopupHoldingLines = ({ popupInfo }) => {\r\n const [closeKey, setCloseKey] = useState(0);\r\n // console.log('popupInfo', popupInfo);\r\n return popupInfo.position && closeKey !== popupInfo.key ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(line => {\r\n return (\r\n setCloseKey(popupInfo.key)}\r\n >\r\n \r\n\r\n {/* */}\r\n {/* */}\r\n\r\n \r\n \r\n\r\n {/* \r\n \r\n */}\r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n ) : null;\r\n};\r\n\r\nexport default MapPopupHoldingLines;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport HoldingLinePolygon from '../Polygons/HoldingLinePolygon';\r\nimport MapPopupHoldingLines from '../Popup/MapPopupHoldingLines';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\n\r\nconst HoldingLayer = ({ match, history, mapActions }) => {\r\n const [fleetState] = useFleetStore();\r\n const vesselID = fleetState.holdingDetail ? fleetState.holdingDetail.vessel.vesselID : 0;\r\n const filter = fleetState.holdingDetail ? fleetState.holdingDetail.filter : {};\r\n const selectedItemID = +match.params.itemID || 0;\r\n\r\n const productGroupID = _.get(fleetState, 'holdingDetail.filter.productGroupID', -1);\r\n\r\n // console.log('productGroupID', productGroupID);\r\n\r\n //console.log(filter);\r\n\r\n\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n\r\n useEffect(() => {\r\n if (vesselID > 0 && selectedItemID > 0) {\r\n const line = fleetState.holdingDetail.vessel.vesselItems.find(X => X.item.itemID === selectedItemID);\r\n mapActions.zoomToLines(line);\r\n //console.log(\"LINES: \", line);\r\n }\r\n }, [selectedItemID]);\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('HoldingLayer', fleetState.holdingDetail);\r\n\r\n if (vesselID === 0)\r\n return null;\r\n\r\n let lines = fleetState.holdingDetail.vessel.vesselItems.filter(X => X.item.polygonPoints);\r\n if (fleetState.holdingDetail.filter) {\r\n\r\n const statusFilter = fleetState.holdingDetail.filter.status;\r\n // console.log('filter.status', fleetState.holdingDetail.filter.status);\r\n\r\n lines = lines\r\n .filter(X => (productGroupID === 0) || (X.item.productGroupID === productGroupID))\r\n .filter(X => fleetState.holdingDetail.filter.scale.includes(X.item.productItemGroupID || 0))\r\n .filter(X => X.active || statusFilter.inactive)\r\n .filter(X => (\r\n (\r\n (statusFilter.issue && (X.issue)) ||\r\n (statusFilter.warning && (X.warning)) ||\r\n (statusFilter.valid && (X.valid))\r\n )));\r\n // .filter(X => (\r\n // (fleetState.holdingDetail.filter.status.issue === true && (X.itemIssue === true || X.updateIssue === true)) ||\r\n // (fleetState.holdingDetail.filter.status.warning === true && (X.itemWarning === true || X.updateWarning === true)) ||\r\n // (fleetState.holdingDetail.filter.status.valid && X.itemIssue === false && X.updateIssue === false && X.itemWarning === false && X.updateWarning === false)\r\n // ));\r\n }\r\n\r\n const onClick = (e) => {\r\n let selected = lines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n //console.log(\"history\", selected.length);\r\n history.push(`/fleet/holdings/${selected[0].vesselID}/${selected[0].item.itemID}`);\r\n // mapActions.zoomToLines(selected);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"selected\", selected);\r\n };\r\n\r\n // const filteredLines = lines);\r\n const sortedLines = _.orderBy(lines, ['item.scale'], ['desc']);\r\n\r\n // mapActions.zoomToLines(filteredLines);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n // sortedLines.map(X => )\r\n sortedLines.map(X => )\r\n }\r\n \r\n\r\n \r\n );\r\n\r\n\r\n\r\n }, [vesselID, filter, popup, selectedItemID, productGroupID])\r\n};\r\n\r\nexport default HoldingLayer;\r\n","import React, { createContext, useContext, useState, useEffect } from 'react';\r\nimport http from './../Services/httpService';\r\nimport _ from 'lodash';\r\n// import { useUserStore } from './userStore';\r\n\r\nconst initialState = {\r\n managers : null,\r\n folios : null,\r\n folioItems : null,\r\n folioVessels : null,\r\n folioVesselItemStatus : null,\r\n folioVesselItems : null,\r\n folioManager : null,\r\n folioVessel : null,\r\n};\r\n\r\nexport const FolioContext = createContext();\r\n\r\nexport const FolioProvider = ({ children }) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n\r\n // // Clear data when logout\r\n // const [userState] = useUserStore();\r\n // const logout = !Boolean(userState.tokenData.token);\r\n // useEffect(() => {\r\n // if (logout === true) {\r\n // console.log('FleetProvider logout', logout);\r\n // setState(P => initialState);\r\n // }\r\n // }, [logout]);\r\n\r\n const loadData = () => {\r\n // console.log(\"loadData\");\r\n }\r\n\r\n const clearData = () => {\r\n // console.log(\"clearData\");\r\n setState(() => { return { ...initialState } });\r\n }\r\n\r\n const getManagers = () => {\r\n\r\n http.get(`/api/companies`)\r\n .then(result => {\r\n const managersData = result.data;\r\n //console.log('Folio Managers', managersData);\r\n\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n managers: managersData,\r\n }\r\n });\r\n\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n return{\r\n managers: [],\r\n }\r\n });\r\n };\r\n\r\n\r\n const getFolios = (managerID) => {\r\n\r\n http.get(`/api/companies/${managerID}/folios`)\r\n .then(result => {\r\n const thefolios = result.data;\r\n //console.log('Folios', thefolios)\r\n\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n folios: thefolios,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n \r\n });\r\n };\r\n\r\n const getFolioItems = (managerID, folioID) => {\r\n\r\n http.get(`/api/companies/${managerID}/folios/${folioID}/items`)\r\n .then(result => {\r\n const theFolioItems = result.data;\r\n \r\n //console.log('FOLIO ITEMS', result.data)\r\n \r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n folioItems : theFolioItems,\r\n //folioVesselItemStatus : theFolioVessels.folioStatus,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n\r\n });\r\n };\r\n\r\n const getFolioVessels = (managerID, folioID) => {\r\n\r\n http.get(`/api/companies/${managerID}/folios/${folioID}/vessels`)\r\n .then(result => {\r\n const theFolioVessels = result.data;\r\n \r\n //console.log('Folio vessels', theFolioVessels)\r\n \r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n folioVessels : theFolioVessels,\r\n folioVesselItemStatus : theFolioVessels.folioStatus,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n\r\n });\r\n };\r\n\r\n\r\n //API/Companies/#ID#/Folios/#FID#/#VesselID#\r\n const getFolioVesselItems = (managerID, folioID, vesselID) => {\r\n\r\n http.get(`/api/companies/${managerID}/folios/${folioID}/vessels/${vesselID}`)\r\n .then(result => {\r\n const theFolioVesselItems = result.data.folioItems;\r\n const theFolioManager = result.data.folio;\r\n const theFolioVessel = result.data.vessel;\r\n \r\n //console.log('Folio Vessel Items', result.data)\r\n\r\n setState((prev) => {\r\n return {\r\n ...prev,\r\n folioVesselItems : theFolioVesselItems,\r\n folioManager : theFolioManager,\r\n folioVessel : theFolioVessel,\r\n }\r\n });\r\n })\r\n .catch(error => {\r\n \r\n });\r\n };\r\n \r\n\r\n\r\n\r\n const clearVesselHoldings = () => {\r\n\r\n };\r\n\r\n\r\n\r\n\r\n const actions = {\r\n loadData : loadData,\r\n clearData : clearData,\r\n\r\n getManagers : getManagers,\r\n getFolios : getFolios,\r\n getFolioItems : getFolioItems,\r\n getFolioVessels : getFolioVessels,\r\n getFolioVesselItems : getFolioVesselItems,\r\n clearVesselHoldings : clearVesselHoldings\r\n\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n};\r\n\r\nexport const useFolioStore = () => useContext(FolioContext);\r\n\r\n\r\n","import React, { useMemo } from 'react';\r\n//import { getHoldingLineColor } from '../Helpers/GlobalHelper'; When the going gets tough, we customize everything. :D\r\nimport ItemPolygon from './ItemPolygon';\r\n\r\nconst FolioLinePolygon = ({ line, selected, blackColor = false }) => {\r\n\r\n return useMemo(() => {\r\n if (!line.polygonPoints)\r\n return null;\r\n\r\n const color = blackColor ? \"#000000\" : getHoldingLineColor(line);\r\n\r\n const positions = line.polygonPoints;\r\n return (\r\n \r\n );\r\n }, [selected, line])\r\n\r\n};\r\n\r\n\r\n// took out the black color. I just feel like it is what it is. either you got it or not. plus people don't understand black. \r\nconst getHoldingLineColor = (line) => {\r\n //console.log(\"active: \", line.active, \"inInventory: \", line.inInventory)\r\n //console.log(line);\r\n let color = \"black\";\r\n // if (!line.active)\r\n // color = \"black\"\r\n // else \r\n if (line.inInventory && line.active)\r\n color = \"#1dc71d\" // Green\r\n else if (line.inInventory && !line.active)\r\n color = \"#ff9900\" // Warning\r\n else if (!line.inInventory && !line.active)\r\n color = \"#ff4a4a\"; // Error\r\n\r\n return color;\r\n};\r\n\r\nexport default FolioLinePolygon;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useFolioStore } from '../../../Global/Stores/folioStore';\r\n//import { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport FolioLinePolygon from '../Polygons/FolioLinePolygon';\r\nimport MapPopupHoldingLines from '../Popup/MapPopupHoldingLines';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\n\r\nconst FolioItemsLayer = ({ match, history, mapActions }) => {\r\n const [folioState] = useFolioStore();\r\n //const [fleetState] = useFleetStore();\r\n\r\n //const vesselID = folioState.folioItems ? folioState.folioVessel.vesselID : 0;\r\n // const filter = fleetState.holdingDetail ? fleetState.holdingDetail.filter : {};\r\n const managerID = +match.params.managerID || 0;\r\n const folioID = +match.params.folioID || 0;\r\n const selectedItemID = +match.params.itemID || 0;\r\n //const vesID = +match.params.vesselID || 0;\r\n //console.log(folioID)\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n \r\n useEffect(() => {\r\n if (managerID > 0 && folioID > 0) {\r\n const lines = folioState.folioItems ? folioState.folioItems :null;\r\n // console.log(\"LINES: \", folioState);\r\n\r\n //console.log(\"FOLIO ID CHANGED: \", lines);\r\n mapActions.zoomToLines(lines, false);\r\n }\r\n }, [managerID, folioID, folioState.folioItems]);\r\n\r\n \r\n //return useMemo(() => {\r\n // console.log('HoldingLayer', fleetState.holdingDetail);\r\n\r\n if (folioID === 0)\r\n return null;\r\n\r\n let lines = Boolean(folioState.folioItems) ? folioState.folioItems.filter(X => X.polygonPoints) : null;\r\n\r\n const onClick = (e) => {\r\n let selected = lines.filter(X => X.polygonPoints && checkPolygonInPoint(e.latlng, X.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n //console.log(\"history\", selected.length);\r\n //history.push(`/fleet/holdings/${selected[0].vesselID}/${selected[0].item.itemID}`); //TO FIX LATER\r\n // mapActions.zoomToLines(selected);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"selected\", selected);\r\n };\r\n\r\n // const filteredLines = lines);\r\n const sortedLines = _.orderBy(lines, ['item.scale'], ['desc']);\r\n //console.log(\"Sorted Lines: \", sortedLines)\r\n // mapActions.zoomToLines(filteredLines);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n // sortedLines.map(X => )\r\n sortedLines.map(X => )\r\n }\r\n \r\n\r\n \r\n );\r\n\r\n\r\n\r\n //}, [vesselID, vesID, popup, selectedItemID, folioID])\r\n};\r\n\r\nexport default FolioItemsLayer;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useFolioStore } from '../../../Global/Stores/folioStore';\r\n//import { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport FolioLinePolygon from '../Polygons/FolioLinePolygon';\r\nimport MapPopupHoldingLines from '../Popup/MapPopupHoldingLines';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\n\r\nconst FolioItemsLayer = ({ match, history, mapActions }) => {\r\n const [folioState] = useFolioStore();\r\n //const [fleetState] = useFleetStore();\r\n\r\n const vesselID = folioState.folioVesselItems ? folioState.folioVessel.vesselID : 0;\r\n // const filter = fleetState.holdingDetail ? fleetState.holdingDetail.filter : {};\r\n const managerID = +match.params.managerID || 0;\r\n const folioID = +match.params.folioID || 0;\r\n const selectedItemID = +match.params.itemID || 0;\r\n const vesID = +match.params.vesselID || 0;\r\n //console.log(folioID)\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n \r\n useEffect(() => {\r\n // if (managerID > 0 && folioID > 0) {\r\n // const lines = folioState.folioVesselItems ? folioState.folioVesselItems :null;\r\n // // console.log(\"LINES: \", folioState);\r\n\r\n // //console.log(\"FOLIO ID CHANGED: \", lines);\r\n // mapActions.zoomToLines(lines, false);\r\n // }\r\n\r\n\r\n if (folioID > 0 && selectedItemID > 0 ) {\r\n const line = folioState.folioVesselItems ? folioState.folioVesselItems.find(X => X.itemID === selectedItemID) :null;\r\n //console.log(\"LINE: \", line)\r\n mapActions.zoomToLines(line, false);\r\n }\r\n \r\n }, [vesID, vesselID, selectedItemID]);\r\n\r\n //return useMemo(() => {\r\n // console.log('HoldingLayer', fleetState.holdingDetail);\r\n\r\n if (vesselID === 0)\r\n return null;\r\n\r\n let lines = Boolean(folioState.folioVesselItems) ? folioState.folioVesselItems.filter(X => X.polygonPoints) : null;\r\n\r\n const onClick = (e) => {\r\n let selected = lines.filter(X => X.polygonPoints && checkPolygonInPoint(e.latlng, X.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n //console.log(\"history\", selected.length);\r\n //history.push(`/fleet/holdings/${selected[0].vesselID}/${selected[0].item.itemID}`); //TO FIX LATER\r\n // mapActions.zoomToLines(selected);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n\r\n // console.log(\"selected\", selected);\r\n };\r\n\r\n // const filteredLines = lines);\r\n const sortedLines = _.orderBy(lines, ['item.scale'], ['desc']);\r\n //console.log(\"Sorted Lines: \", sortedLines)\r\n // mapActions.zoomToLines(filteredLines);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {\r\n // sortedLines.map(X => )\r\n sortedLines.map(X => )\r\n }\r\n \r\n\r\n \r\n );\r\n\r\n\r\n\r\n //}, [vesselID, vesID, popup, selectedItemID, folioID])\r\n};\r\n\r\nexport default FolioItemsLayer;\r\n","\r\nimport L from \"leaflet\";\r\n/*\r\n * The MIT License (MIT)\r\n *\r\n * Copyright (c) 2015 Tim Leerhoff \r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n\r\n\r\n/**\r\n * Tracksymbol for leaflet.\r\n * The visualization is chosen by zoomlevel or heading availability.\r\n * If zoomlevel is smaller than 'minSilouetteZoom' a triangular symbol is rendered.\r\n * If zoomlevel is greater than 'minSilouetteZoom' a ship silouette is rendered.\r\n * If heading is undefined a diamond symbol is rendered.\r\n * The following options are available:\r\n *
    \r\n *
  • trackId: The unique id of the symbol (default: 0).
  • \r\n *
  • size: Static size of the symbol in pixels (default:24).
  • \r\n *
  • heading: Initial heading of the symbol (default: undefined).
  • \r\n *
  • course: Initial course of the symbol (default: undefined).
  • \r\n *
  • speed: Initial speed of the symbol-leader (default: undefined).
  • \r\n *
  • leaderTime: The length of the leader (speed * leaderTime) (default:60s).
  • \r\n *
  • minSilouetteZoom: The zoomlevel to switch from triangle to silouette (default:14).
  • \r\n *
  • gpsRefPos: Initial GPS offset of the symbol (default: undefined).
  • \r\n *
  • defaultSymbol: The triangular track symbol. Contains an array of n numbers. [x1,y1,x2,y2,...]
  • \r\n *
  • noHeadingSymbol: The diamond track symbol. Contains an array of n numbers. [x1,y1,x2,y2,...]
  • \r\n *
  • silouetteSymbol: The ship track symbol. Contains an array of n numbers. [x1,y1,x2,y2,...]
  • \r\n *
\r\n * @class TrackSymbol\r\n * @constructor\r\n * @param latlng {LanLng} The initial position of the symbol.\r\n * @param options {Object} The initial options described above.\r\n */\r\n\r\nL.TrackSymbol = L.Path.extend({\r\n\r\n initialize: function (latlng, options) {\r\n L.setOptions(this, options);\r\n if (latlng === undefined) {\r\n throw Error('Please give a valid lat/lon-position');\r\n }\r\n options = options || {};\r\n this._id = options.trackId || 0;\r\n this._leaflet_id = this._id;\r\n this._latlng = L.latLng(latlng);\r\n this._size = options.size || 24;\r\n this._heading = options.heading;\r\n this._course = options.course;\r\n this._speed = options.speed;\r\n this._leaderTime = options.leaderTime || 60.0;\r\n this._minSilouetteZoom = options.minSilouetteZoom || 14;\r\n this.setGPSRefPos(options.gpsRefPos);\r\n this._triSymbol = options.defaultSymbol || [0.75, 0, -0.25, 0.3, -0.25, -0.3];\r\n this._diaSymbol = options.noHeadingSymbol || [0.3, 0, 0, 0.3, -0.3, 0, 0, -0.3];\r\n this._silSymbol = options.silouetteSymbol || [1, 0.5, 0.75, 1, 0, 1, 0, 0, 0.75, 0];\r\n\r\n },\r\n\r\n /**\r\n * This function is empty but necessary \r\n * because it is called during the rendering process of Leaflet v1.0.\r\n * @method _project\r\n */\r\n _project: function () {\r\n },\r\n\r\n /**\r\n * Update the path\r\n * This function is called during the rendering process of leaflet v1.0\r\n * @method _update\r\n */\r\n _update: function () {\r\n if (!this._map) { return; }\r\n this._setPath();\r\n },\r\n\r\n /**\r\n * Sets the contents of the d-attribute in a path-element of an svg-file. \r\n * @method _setPath\r\n */\r\n _setPath: function () {\r\n this._path.setAttribute('d', this.getPathString());\r\n },\r\n /**\r\n * Set the default symbol.\r\n * @method setDefaultSymbol\r\n * @param symbol {Array} The corner points of the symbol. \r\n */\r\n setDefaultSymbol: function (symbol) {\r\n this._triSymbol = symbol;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Set the symbol for tracks with no heading.\r\n * @method setNoHeadingSymbol\r\n * @param symbol {Array} The corner points of the symbol. \r\n */\r\n setNoHeadingSymbol: function (symbol) {\r\n this._diaSymbol = symbol;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Set the symbol for tracks with shown silouette.\r\n * @method setSilouetteSymbol\r\n * @param symbol {Array} The corner points of the symbol. \r\n */\r\n setSilouetteSymbol: function (symbol) {\r\n this._silSymbol = symbol;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Set latitude/longitude on the symbol.\r\n * @method setLatLng\r\n * @param latlng {LatLng} Position of the symbol on the map. \r\n */\r\n setLatLng: function (latlng) {\r\n var oldLatLng = this._latlng;\r\n this._latlng = L.latLng(latlng);\r\n this.fire('move', { oldLatLng: oldLatLng, latlng: this._latlng });\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Set the speed shown in the symbol [m/s].\r\n * The leader-length is calculated via leaderTime.\r\n * @method setSpeed\r\n * @param speed {Number} The speed in [m/s]. \r\n */\r\n setSpeed: function (speed) {\r\n this._speed = speed;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Sets the course over ground [rad].\r\n * The speed-leader points in this direction.\r\n * @method setCourse\r\n * @param course {Number} The course in radians.\r\n */\r\n setCourse: function (course) {\r\n this._course = course;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Sets the heading of the symbol [rad].\r\n * The heading rotates the symbol.\r\n * @method setHeading\r\n * @param course {Number} The heading in radians.\r\n */\r\n setHeading: function (heading) {\r\n this._heading = heading;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Sets the leaderTime of the symbol [seconds].\r\n * @method setLeaderTime\r\n * @param leaderTime {Number} The leaderTime in seconds.\r\n */\r\n setLeaderTime: function (leaderTime) {\r\n this._leaderTime = leaderTime;\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Sets the position offset of the silouette to the center of the symbol.\r\n * The array contains the refpoints from ITU R-REC-M.1371-4-201004 page 108\r\n * in sequence A,B,C,D.\r\n * @method setGPSRefPos\r\n * @param gpsRefPos {Array} The GPS offset from center.\r\n */\r\n setGPSRefPos: function (gpsRefPos) {\r\n if (gpsRefPos === undefined ||\r\n gpsRefPos.length < 4) {\r\n this._gpsRefPos = undefined;\r\n }\r\n else if (gpsRefPos[0] === 0 &&\r\n gpsRefPos[1] === 0 &&\r\n gpsRefPos[2] === 0 &&\r\n gpsRefPos[3] === 0) {\r\n this._gpsRefPos = undefined;\r\n }\r\n else {\r\n this._gpsRefPos = gpsRefPos;\r\n }\r\n return this.redraw();\r\n },\r\n\r\n /**\r\n * Returns the trackId.\r\n * @method getTrackId\r\n * @return {Number} The track id.\r\n */\r\n getTrackId: function () {\r\n return this._Id;\r\n },\r\n\r\n _getLatSize: function () {\r\n return this._getLatSizeOf(this._size);\r\n },\r\n\r\n _getLngSize: function () {\r\n return this._getLngSizeOf(this._size);\r\n },\r\n\r\n _getLatSizeOf: function (value) {\r\n return (value / 40075017) * 360;\r\n },\r\n\r\n _getLngSizeOf: function (value) {\r\n return ((value / 40075017) * 360) / Math.cos((Math.PI / 180) * this._latlng.lat);\r\n },\r\n\r\n /**\r\n * Returns the bounding box of the symbol.\r\n * @method getBounds\r\n * @return {LatLngBounds} The bounding box.\r\n */\r\n getBounds: function () {\r\n var lngSize = this._getLngSize() / 2.0;\r\n var latSize = this._getLatSize() / 2.0;\r\n var latlng = this._latlng;\r\n return new L.LatLngBounds(\r\n [latlng.lat - latSize, latlng.lng - lngSize],\r\n [latlng.lat + latSize, latlng.lng + lngSize]);\r\n },\r\n\r\n /**\r\n * Returns the position of the symbol on the map.\r\n * @mathod getLatLng\r\n * @return {LatLng} The position object.\r\n */\r\n getLatLng: function () {\r\n return this._latlng;\r\n },\r\n\r\n //\r\n // Rotates the given point around the angle.\r\n // @method _rotate\r\n // @param point {Array} A point vector 2d.\r\n // @param angle {Number} Angle for rotation [rad].\r\n // @return The rotated vector 2d.\r\n //\r\n _rotate: function (point, angle) {\r\n var x = point[0];\r\n var y = point[1];\r\n var si_z = Math.sin(angle);\r\n var co_z = Math.cos(angle);\r\n var newX = x * co_z - y * si_z;\r\n var newY = x * si_z + y * co_z;\r\n return [newX, newY];\r\n },\r\n\r\n //\r\n // Rotates the given point-array around the angle.\r\n // @method _rotateAllPoints\r\n // @param points {Array} A point vector 2d.\r\n // @param angle {Number} Angle for rotation [rad].\r\n // @return The rotated vector-array 2d.\r\n //\r\n _rotateAllPoints: function (points, angle) {\r\n var result = [];\r\n for (var i = 0; i < points.length; i += 2) {\r\n var x = points[i + 0] * this._size;\r\n var y = points[i + 1] * this._size;\r\n var pt = this._rotate([x, y], angle);\r\n result.push(pt[0]);\r\n result.push(pt[1]);\r\n }\r\n return result;\r\n },\r\n\r\n _createLeaderViewPoints: function (angle) {\r\n var result = [];\r\n var leaderLength = this._speed * this._leaderTime;\r\n var leaderEndLng = this._latlng.lng + this._getLngSizeOf(leaderLength * Math.cos(angle));\r\n var leaderEndLat = this._latlng.lat + this._getLatSizeOf(leaderLength * Math.sin(angle));\r\n var endPoint = this._map.latLngToLayerPoint(L.latLng([leaderEndLat, leaderEndLng]));\r\n var startPoint = this._map.latLngToLayerPoint(this._latlng);\r\n return [startPoint.x, startPoint.y, endPoint.x, endPoint.y];\r\n },\r\n\r\n _transformAllPointsToView: function (points) {\r\n var result = [];\r\n var symbolViewCenter = this._map.latLngToLayerPoint(this._latlng);\r\n for (var i = 0; i < points.length; i += 2) {\r\n var x = symbolViewCenter.x + points[i + 0];\r\n var y = symbolViewCenter.y - points[i + 1];\r\n result.push(x);\r\n result.push(y);\r\n }\r\n return result;\r\n },\r\n\r\n _createPathFromPoints: function (points) {\r\n var result;\r\n for (var i = 0; i < points.length; i += 2) {\r\n var x = points[i + 0];\r\n var y = points[i + 1];\r\n if (result === undefined)\r\n result = 'M ' + x + ' ' + y + ' ';\r\n else\r\n result += 'L ' + x + ' ' + y + ' ';\r\n }\r\n return result + ' Z';\r\n },\r\n\r\n _getViewAngleFromModel: function (modelAngle) {\r\n return Math.PI / 2.0 - modelAngle;\r\n },\r\n\r\n _createNoHeadingSymbolPathString: function () {\r\n var viewPoints = this._transformAllPointsToView(this._rotateAllPoints(this._diaSymbol, 0.0));\r\n var viewPath = this._createPathFromPoints(viewPoints);\r\n if (this._course !== undefined && this._speed !== undefined) {\r\n var courseAngle = this._getViewAngleFromModel(this._course);\r\n var leaderPoints = this._createLeaderViewPoints(courseAngle);\r\n viewPath += '' + this._createPathFromPoints(leaderPoints);\r\n }\r\n return viewPath;\r\n },\r\n\r\n _createWithHeadingSymbolPathString: function () {\r\n var headingAngle = this._getViewAngleFromModel(this._heading);\r\n var viewPoints = this._transformAllPointsToView(this._rotateAllPoints(this._triSymbol, headingAngle));\r\n var viewPath = this._createPathFromPoints(viewPoints);\r\n if (this._course !== undefined && this._speed !== undefined) {\r\n var courseAngle = this._getViewAngleFromModel(this._course);\r\n var leaderPoints = this._createLeaderViewPoints(courseAngle);\r\n viewPath += '' + this._createPathFromPoints(leaderPoints);\r\n }\r\n return viewPath;\r\n },\r\n\r\n _resizeAndMovePoint: function (point, size, offset) {\r\n return [\r\n point[0] * size[0] + offset[0],\r\n point[1] * size[1] + offset[1]\r\n ];\r\n },\r\n\r\n _getSizeFromGPSRefPos: function () {\r\n return [\r\n this._gpsRefPos[0] + this._gpsRefPos[1],\r\n this._gpsRefPos[2] + this._gpsRefPos[3]\r\n ];\r\n },\r\n\r\n _getOffsetFromGPSRefPos: function () {\r\n return [\r\n -this._gpsRefPos[1],\r\n -this._gpsRefPos[3]\r\n ];\r\n },\r\n\r\n _transformSilouetteSymbol: function () {\r\n var headingAngle = this._getViewAngleFromModel(this._heading);\r\n var result = [];\r\n var size = this._getSizeFromGPSRefPos();\r\n var offset = this._getOffsetFromGPSRefPos();\r\n for (var i = 0; i < this._silSymbol.length; i += 2) {\r\n var pt = [\r\n this._silSymbol[i + 0],\r\n this._silSymbol[i + 1]\r\n ];\r\n pt = this._resizeAndMovePoint(pt, size, offset);\r\n pt = this._rotate(pt, headingAngle);\r\n var pointLng = this._latlng.lng + this._getLngSizeOf(pt[0]);\r\n var pointLat = this._latlng.lat + this._getLatSizeOf(pt[1]);\r\n var viewPoint = this._map.latLngToLayerPoint(L.latLng([pointLat, pointLng]));\r\n result.push(viewPoint.x);\r\n result.push(viewPoint.y);\r\n }\r\n return result;\r\n },\r\n\r\n _createSilouetteSymbolPathString: function () {\r\n var silouettePoints = this._transformSilouetteSymbol();\r\n var viewPath = this._createPathFromPoints(silouettePoints);\r\n if (this._course !== undefined && this._speed !== undefined) {\r\n var courseAngle = this._getViewAngleFromModel(this._course);\r\n var leaderPoints = this._createLeaderViewPoints(courseAngle);\r\n viewPath += '' + this._createPathFromPoints(leaderPoints);\r\n }\r\n return viewPath;\r\n },\r\n\r\n /**\r\n * Generates the symbol as SVG path string.\r\n * depending on zoomlevel or track heading different symbol types are generated.\r\n * @return {String} The symbol path string.\r\n */\r\n getPathString: function () {\r\n\r\n\r\n if (this._heading === undefined) {\r\n //console.log('No Heading Symbol Path String', this._map.getZoom())\r\n return this._createNoHeadingSymbolPathString();\r\n }\r\n else {\r\n if (this._gpsRefPos === undefined || this._map.getZoom() <= this._minSilouetteZoom) {\r\n //console.log('With Heading Symbol Path String', this._map.getZoom())\r\n return this._createWithHeadingSymbolPathString();\r\n }\r\n else {\r\n //console.log('Silouette Symbol Path String', this._map.getZoom())\r\n return this._createSilouetteSymbolPathString();\r\n }\r\n }\r\n },\r\n\r\n // onAdd: map => { \r\n // console.log('onAdd', map);\r\n // },\r\n // onRemove: map => {\r\n // console.log('onRemove', map);\r\n // },\r\n\r\n onRemove: function () {\r\n this._renderer._removePath(this);\r\n },\r\n\r\n});\r\n\r\n/**\r\n * Factory function to create the symbol.\r\n * @method trackSymbol\r\n * @param latlng {LatLng} The position on the map.\r\n * @param options {Object} Additional options. \r\n */\r\nL.trackSymbol = function (latlng, options) {\r\n return new L.TrackSymbol(latlng, options);\r\n //return new L.Circle(latlng, options);\r\n};\r\n\r\n","\r\nimport React from \"react\";\r\nimport { withLeaflet, Path } from \"react-leaflet\";\r\nimport L from \"leaflet\";\r\nimport './leaflet-tracksymbol';\r\n\r\n\r\nclass TrackMarker extends Path {\r\n\r\n // constructor(props, context) {\r\n // super(props);\r\n // props.leaflet.map.addEventListener(\"mousemove\", ev => {\r\n // this.panelDiv.innerHTML = `

Lat: ${ev.latlng.lat.toFixed(4)} Lng: ${ev.latlng.lng.toFixed(4)}

`;\r\n // console.log(this.panelDiv.innerHTML);\r\n // });\r\n // props.leaflet.map.addEventListener(\"mousemove\", this.displayInfo);\r\n\r\n // const map = props.leaflet.map;\r\n\r\n // map.on(\"zoomend\", (ev) => {\r\n\r\n // var currZoom = map.getZoom();\r\n // console.log('zoomend', currZoom);\r\n // console.log('this.leafletElement', this.leafletElement)\r\n // });\r\n\r\n // const { vessel, vesselPosition } = props;\r\n\r\n // console.log('Vessel', vessel);\r\n // console.log('VesselPosition', vesselPosition);\r\n //}\r\n\r\n // displayInfo = (ev) => {\r\n // this.panelDiv.innerHTML = `

Lat: ${ev.latlng.lat.toFixed(4)} Lng: ${ev.latlng.lng.toFixed(4)}

`;\r\n // // console.log(this.panelDiv.innerHTML);\r\n // }\r\n\r\n createLeafletElement(opts) {\r\n // console.log('opts', opts);\r\n const { vesselPosition } = opts;\r\n\r\n // if(!vesselPosition) return null;\r\n\r\n const { lat, long, speed, course, vesselID, vesselLocationID } = vesselPosition;\r\n\r\n const latlng = L.latLng(parseFloat(lat), parseFloat(long));\r\n\r\n\r\n //const courseRnd = Math.floor(Math.random() * 360);\r\n const courseMarker = course * Math.PI / 180.0; // Radians from north\r\n const headingMarker = course * Math.PI / 180.0; // Radians from north\r\n //const speed = 10.0; // In m/s\r\n // const course = 45.0 * Math.PI / 180.0; // Radians from north\r\n // const heading = 45.0 * Math.PI / 180.0; // Radians from north\r\n\r\n // this.contextValue = { ...opts.leaflet };\r\n\r\n // this.leafletElement = \r\n\r\n //return new L.Circle(latlng);\r\n\r\n // return new L.TestSymbol(latlng, {\r\n // // return new L.Circle(latlng, {\r\n // trackId: vesselID,\r\n // fill: true,\r\n // fillColor: '#0000ff',\r\n // fillOpacity: 1.0,\r\n // stroke: true,\r\n // color: '#000000',\r\n // opacity: 1.0,\r\n // weight: 1.0,\r\n // minSilouetteZoom: 14,\r\n // speed: speed,\r\n // course: courseMarker,\r\n // heading: headingMarker,\r\n // gpsRefPos: [30, 30, 10, 10],\r\n // });\r\n\r\n const el = new L.TrackSymbol(latlng, {\r\n //const el = new L.Circle(latlng, {\r\n //trackId: vesselID,\r\n //trackId: `VP${vesselID}`,\r\n trackId: `VP${vesselLocationID}`,\r\n //trackId: vesselLocationID,\r\n fill: true,\r\n fillColor: '#0000ff',\r\n fillOpacity: 1.0,\r\n stroke: true,\r\n color: '#000000',\r\n opacity: 1.0,\r\n weight: 1.0,\r\n minSilouetteZoom: 14,\r\n speed: speed,\r\n course: courseMarker,\r\n heading: headingMarker,\r\n gpsRefPos: [30, 30, 10, 10],\r\n });\r\n\r\n // this.leafletElement = el;\r\n return el;\r\n }\r\n\r\n // updateLeafletElement(fromProps, toProps) {\r\n\r\n // }\r\n // componentDidMount() {\r\n // // // const { map } = this.props.leaflet;\r\n\r\n // // // console.log('map', map);\r\n\r\n // // // this.leafletElement.addTo(map);\r\n // // // map.addEventListener(\"mousemove\", this.displayInfo);\r\n // // // map.on(\"zoomend\", (ev) => {\r\n\r\n // // // var currZoom = map.getZoom();\r\n // // // console.log('zoomend', currZoom);\r\n // // // });\r\n // }\r\n\r\n // componentWillUnmount() {\r\n // //this.props.leaflet.map.removeEventListener(\"mousemove\", this.displayInfo);\r\n\r\n // console.log(\"TrackMarker Unmount\");\r\n // }\r\n\r\n\r\n}\r\n\r\nexport default withLeaflet(TrackMarker);","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { FeatureGroup, Popup, Tooltip } from 'react-leaflet'\r\nimport { Table, TableBody, TableRow, TableCell, Typography } from '@material-ui/core';\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport TrackMarker from '../Markers/TrackMarker';\r\nimport Moment from 'react-moment';\r\nimport { useParams } from 'react-router-dom';\r\n\r\n\r\nconst FleetPositionsLayer = ({ Visible, mapActions }) => {\r\n\r\n // const { map } = useLeaflet();\r\n\r\n // let params = useParams();\r\n // console.log('FleetPositionsLayer Params', params);\r\n\r\n // let pars = useParams();\r\n // let location = useLocation();\r\n // let history = useHistory();\r\n // let routeMatch = useRouteMatch();\r\n\r\n // console.log('useParams', pars);\r\n // console.log('useLocation', location);\r\n // console.log('useHistory', history);\r\n // console.log('routeMatch', routeMatch);\r\n\r\n const [globalState] = useGlobalStore();\r\n const [fleetState, fleetActions] = useFleetStore();\r\n\r\n // const selectedVesselID = +match.params.vesselID || 0;\r\n const selectedVesselID = 0;\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n const vessels = globalState.vessels || [];\r\n const loaded = Boolean(fleetState.fleetPositions) && Boolean(globalState.vessels);\r\n\r\n // console.table(fleetState.fleetPositions);\r\n // console.table(globalState.vessels);\r\n\r\n // const positions = fleetState.fleetPositions;\r\n const positions = fleetState.fleetPositions;\r\n\r\n useEffect(() => {\r\n\r\n fleetActions.getFleetPositions();\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (loaded && selectedVesselID > 0) {\r\n const pos = fleetState.fleetPositions.find(X => X.vesselID === selectedVesselID);\r\n\r\n if (pos) {\r\n mapActions.zoomToPoint(pos.long, pos.lat);\r\n }\r\n }\r\n }, [selectedVesselID]);\r\n\r\n\r\n // useEffect(() => {\r\n\r\n // console.warn(\"Track\", L);\r\n // // const ts3 = new L.aisTrackSymbol({ \"latitude\": 54.3, \"longitude\": 8.1 }).addTo(map);\r\n // return () => {\r\n\r\n // };\r\n // }, [])\r\n\r\n\r\n\r\n return useMemo(() => {\r\n //console.log('FleetPositionsLayer', positions);\r\n\r\n // console.log('useMemo');\r\n\r\n // if (!loaded || !Visible)\r\n // return null;\r\n\r\n const showVessels = loaded && Visible;\r\n //const showVessels = false;\r\n\r\n // return null;\r\n\r\n\r\n const handleVesselClick = (e) => {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: e.layer\r\n }\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n {/* V.vesselID === P.vesselID)}\r\n vesselPosition={P}\r\n /> */}\r\n\r\n\r\n {\r\n showVessels && positions.map(P => {\r\n\r\n const vsl = vessels.find(V => V.vesselID === P.vesselID);\r\n\r\n // if(!vsl){\r\n // console.log('Vessel not found:', P.vesselID);\r\n // }\r\n\r\n return vsl ? (\r\n \r\n\r\n \r\n {vsl.vesselName}\r\n\r\n \r\n ) : null;\r\n })\r\n }\r\n \r\n \r\n );\r\n }, [positions, loaded, Visible, selectedVesselID, popup, vessels]);\r\n};\r\n\r\n\r\nconst VesselPositionPopup = ({ Vessel, VesselPosition }) => {\r\n\r\n const { vesselName, mmsi, imo } = Vessel;\r\n const { logDate, speed, course, long, lat } = VesselPosition;\r\n\r\n const speedValue = speed <= 0 ? \"N/A\" : `${speed} kn`;\r\n const courseValue = course <= 0 ? \"N/A\" : `${course}°`;\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n {vesselName}\r\n \r\n \r\n\r\n \r\n \r\n Timestamp: \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n Position:\r\n \r\n \r\n {`Lat: ${lat.toFixed(2)} Lng: ${long.toFixed(2)}`}\r\n \r\n \r\n\r\n \r\n \r\n MMSI:\r\n \r\n \r\n {mmsi || 'N/A'}\r\n \r\n \r\n\r\n \r\n \r\n IMO:\r\n \r\n \r\n {imo || 'N/A'}\r\n \r\n \r\n\r\n \r\n \r\n Speed:\r\n \r\n \r\n {speedValue}\r\n \r\n \r\n\r\n \r\n \r\n Course:\r\n \r\n \r\n {courseValue}\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n\r\n }, [Vessel, VesselPosition]);\r\n\r\n\r\n}\r\n\r\n\r\nexport default FleetPositionsLayer;\r\n","import React, { useState } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\n\r\nconst MapPopupSalesShipmentLines = ({ popupInfo }) => {\r\n\r\n\r\n const [closeKey, setCloseKey] = useState(0);\r\n // console.log('popupInfo', popupInfo);\r\n return popupInfo.position && closeKey !==popupInfo.key ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(line => {\r\n return (\r\n setCloseKey(popupInfo.key)}\r\n >\r\n\r\n \r\n \r\n\r\n {/* \r\n \r\n */}\r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n ) : null;\r\n};\r\n\r\nexport default MapPopupSalesShipmentLines;\r\n\r\n\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport _ from 'lodash';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport GeneralRoutesLayer from './Catalogue/GeneralRoutesLayer';\r\nimport ItemPolygon from '../Polygons/ItemPolygon';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\nimport MapPopupSalesShipmentLines from '../Popup/MapPopupSalesShipmentLines';\r\n\r\nconst SalesShipmentLayer = ({ match, history, mapActions }) => {\r\n const [saleState] = useSaleStore();\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: [],\r\n });\r\n\r\n const salesShipmentID = +match.params.id || 0;\r\n const selectedLineID = +match.params.lineID || 0;\r\n\r\n const loaded = _.get(saleState, 'shipmentDetail.header.salesShipmentID', -1) === salesShipmentID;\r\n\r\n const lines = _.get(saleState, 'shipmentDetail.lines', []);\r\n const routes = _.get(saleState, 'shipmentDetail.routes', []);\r\n\r\n\r\n // Zoom to shipment\r\n useEffect(() => {\r\n if (loaded) {\r\n mapActions.zoomToLines(lines);\r\n }\r\n }, [salesShipmentID, loaded]);\r\n\r\n // Zoom to line\r\n useEffect(() => {\r\n if (loaded && selectedLineID > 0) {\r\n const line = lines.find(X => X.salesOrderLineID === selectedLineID);\r\n mapActions.zoomToLines(line);\r\n }\r\n }, [selectedLineID, loaded]);\r\n\r\n\r\n if (salesShipmentID === 0)\r\n return null;\r\n\r\n\r\n const sortedLines = _.orderBy(lines, ['item.scale'], ['desc']);\r\n\r\n\r\n const onClick = (e) => {\r\n // console.log(\"onClick\", e);\r\n let selected = lines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n history.push(`/sales/shipments/${selected[0].salesShipmentID}/${selected[0].salesShipmentLineID}`);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\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 sortedLines.map(X => )\r\n }\r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nconst SalesShipmentLinePolygon = ({ line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n if (!line.item.polygonPoints)\r\n return null;\r\n\r\n const positions = line.item.polygonPoints;\r\n const color = \"black\";\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [line.itemID, selected]);\r\n};\r\n\r\nexport default SalesShipmentLayer;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\nconst MapPopupPurchaseOrderLines = ({ vesselFlatFeePeriodID, popupInfo }) => {\r\n const [closeKey, setCloseKey] = useState(0);\r\n // console.log('popupInfo', popupInfo);\r\n\r\n\r\n useEffect(() => {\r\n setCloseKey(popupInfo.key);\r\n }, [vesselFlatFeePeriodID])\r\n\r\n return popupInfo.position && closeKey !== popupInfo.key ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(line => {\r\n return (\r\n setCloseKey(popupInfo.key)}\r\n >\r\n\r\n \r\n \r\n\r\n {/* \r\n \r\n */}\r\n \r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n\r\n ) : null;\r\n}\r\n\r\nexport default MapPopupPurchaseOrderLines\r\n","import React, { useMemo } from 'react';\r\nimport ItemPolygon from '../Polygons/ItemPolygon';\r\n// import { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport _ from 'lodash';\r\n\r\n// const WorldAreaLayer = ({ match }) => {\r\nconst WorldAreaLayer = ({ worldArea }) => {\r\n // const [saleState] = useSaleStore();\r\n\r\n // const flatFeeID = +match.params.id || 0;\r\n // const vesselFlatFeePeriodID = _.get(saleState, 'flatFeeDetail.flatFee.vesselFlatFeePeriodID', -1);\r\n // const isValid = vesselFlatFeePeriodID === flatFeeID;\r\n\r\n // const worldArea = _.get(saleState, 'flatFeeDetail.flatFee.worldArea', null);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('WorldAreaLayer', worldArea);\r\n if (!worldArea)\r\n return null;\r\n\r\n const { caption, description, polygonPoints } = worldArea;\r\n\r\n const color = \"orange\";\r\n const selected = true;\r\n return (\r\n \r\n )\r\n\r\n }, [worldArea]);\r\n};\r\n\r\nexport default WorldAreaLayer;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport SalesOrderLinePolygon from '../Polygons/SalesOrderLinePolygon';\r\nimport { checkPolygonInPoint } from '../MapFunctions';\r\nimport MapPopupSalesOrderLines from '../Popup/MapPopupSalesOrderLines';\r\nimport GeneralRoutesLayer from './Catalogue/GeneralRoutesLayer';\r\nimport MapPopupPurchaseOrderLines from '../Popup/MapPopupPurchaseOrderLines';\r\nimport ItemPolygon from '../Polygons/ItemPolygon';\r\nimport WorldAreaLayer from './WorldAreaLayer';\r\nimport _ from 'lodash';\r\nimport { useMapStore } from '../../../Global/Stores/mapStore';\r\n\r\n// const PurchaseOrderLayer = ({ match, history, mapActions }) => {\r\nconst PurchaseOrderLayer = ({ purchaseOrder, selectedLineID, history }) => {\r\n const [, mapActions] = useMapStore();\r\n // const [saleState] = useSaleStore();\r\n\r\n // const flatFeeID = +match.params.id || 0;\r\n // const orderID = +match.params.orderID || 0;\r\n // const selectedLineID = +match.params.lineID || 0;\r\n\r\n\r\n\r\n // const vesselFlatFeePeriodID = _.get(saleState, 'flatFeeOrderDetail.header.vesselFlatFeePeriodID', -1);\r\n // const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n\r\n // const loaded = (purchaseOrderID === orderID);\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n // Zoom to order\r\n useEffect(() => {\r\n if (purchaseOrder) {\r\n mapActions.zoomToLines(purchaseOrder.lines);\r\n }\r\n }, [purchaseOrder]);\r\n\r\n // // Zoom to line\r\n // useEffect(() => {\r\n // if (orderID > 0 && selectedLineID > 0) {\r\n // const line = saleState.flatFeeOrderDetail.lines.find(X => X.purchaseOrderLineID === selectedLineID);\r\n // mapActions.zoomToLines(line);\r\n // }\r\n // }, [selectedLineID]);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n if (!purchaseOrder)\r\n return null;\r\n\r\n // console.log('selectedLineID', selectedLineID);\r\n\r\n\r\n // console.log('flatFeeOrderDetail', saleState.flatFeeOrderDetail);\r\n const purchaseOrderID = purchaseOrder.header.purchaseOrderID;\r\n const vesselFlatFeePeriodID = purchaseOrder.header.vesselFlatFeePeriodID;\r\n const lines = purchaseOrder.lines;\r\n const routes = purchaseOrder.routes;\r\n\r\n const mapLines = lines.filter(X => X.item.polygonPoints);\r\n const sortedLines = _.orderBy(mapLines, ['item.scale'], ['desc']);\r\n\r\n\r\n const onClick = (e) => {\r\n let selected = lines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n\r\n // const url = history.location.pathname;\r\n // const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n // const to = `${popLink}/${selected[0].purchaseOrderLineID}`;\r\n\r\n // console.log('url', url);\r\n // console.log('to', to);\r\n // history.push(to);\r\n\r\n history.push(`/sales/flatfee/${vesselFlatFeePeriodID}/${purchaseOrderID}/${selected[0].purchaseOrderLineID}`);\r\n\r\n\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\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 sortedLines.map(X => )\r\n }\r\n \r\n\r\n \r\n\r\n \r\n );\r\n\r\n }, [purchaseOrder, selectedLineID, popup])\r\n};\r\n\r\nconst PurchaseOrderLinePolygon = ({ line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n if (!line.item.polygonPoints)\r\n return null;\r\n\r\n const positions = line.item.polygonPoints;\r\n const color = \"black\";\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [line.itemID, selected]);\r\n};\r\n\r\nexport default PurchaseOrderLayer;\r\n","import React, { useMemo } from 'react';\r\nimport ItemPolygon from '../Polygons/ItemPolygon';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport _ from 'lodash';\r\n\r\nconst FolioLayer = ({ folio }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('FolioLayer', folio);\r\n \r\n if (!folio)\r\n return null;\r\n\r\n const { number, title, items } = folio;\r\n const mapItems = items.filter(I => !!I.polygonPoints);\r\n\r\n const color = \"purple\";\r\n const selected = true;\r\n return (\r\n \r\n {\r\n mapItems.map(I => (\r\n ))}\r\n \r\n )\r\n\r\n }, [folio]);\r\n};\r\n\r\nexport default FolioLayer;\r\n","import React from 'react'\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport _ from 'lodash';\r\nimport PurchaseOrderLayer from './PurchaseOrderLayer';\r\nimport WorldAreaLayer from './WorldAreaLayer';\r\nimport FolioLayer from './FolioLayer';\r\n\r\nconst FlatFeeContractLayer = ({ match, history }) => {\r\n const [saleState] = useSaleStore();\r\n\r\n const flatFeeID = +match.params.id || 0;\r\n const orderID = +match.params.orderID || 0;\r\n const selectedLineID = +match.params.lineID || 0;\r\n\r\n // console.log('FlatFeeContractLayer', flatFeeID);\r\n\r\n const vesselFlatFeePeriodID = _.get(saleState, 'flatFeeDetail.flatFee.vesselFlatFeePeriodID', -1);\r\n const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n\r\n const contractLoaded = (flatFeeID == vesselFlatFeePeriodID);\r\n const orderLoaded = contractLoaded && (purchaseOrderID === orderID);\r\n\r\n // Contract\r\n // const contract = _.get(saleState, 'flatFeeDetail.flatFee', null);\r\n const worldArea = _.get(saleState, 'flatFeeDetail.flatFee.worldArea', null);\r\n const folio = _.get(saleState, 'flatFeeDetail.flatFee.folio', null);\r\n\r\n const order = _.get(saleState, 'flatFeeOrderDetail', null);\r\n\r\n\r\n // const order = _.get(saleState, 'flatFeeOrderDetail.orders', []).find();\r\n\r\n //console.log('contract', contract);\r\n // console.log('order', order);\r\n\r\n return (\r\n \r\n {contractLoaded ? : null}\r\n {contractLoaded ? : null} \r\n {orderLoaded ? : null} \r\n \r\n )\r\n}\r\n\r\nexport default FlatFeeContractLayer\r\n","import React, { createContext, useContext, useState } from 'react';\r\n\r\nexport const ColumnContext = createContext();\r\n\r\nexport const ColumnProvider = ({ children }) => {\r\n const [state, setState] = useState(0);\r\n\r\n // useEffect(() => {\r\n //console.log('ColumnStore', state);\r\n\r\n // }, [state]);\r\n\r\n const addColumn = (val) => {\r\n setState(prev => prev + val);\r\n }\r\n \r\n const actions = {\r\n addColumn,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useColumnStore = () => useContext(ColumnContext);\r\n","\r\nimport React from 'react';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport { withLeaflet, MapControl } from \"react-leaflet\";\r\nimport L from \"leaflet\";\r\nimport AVCS_LOGO from './../../../Images/AVCS/AVCS_LOGO.png';\r\n// import AVCS_LOGO from './../../../Images/AVCS/ADM_TM_rgb.png';\r\n\r\nclass MapAVCSOLogo extends MapControl {\r\n\r\n constructor(props, context) {\r\n super(props);\r\n }\r\n\r\n openLink = () => {\r\n //console.log('openLink');\r\n window.open(`https://www.admiralty.co.uk/digital-services/digital-charts/admiralty-vector-chart-service`, `_blank`);\r\n }\r\n\r\n createLeafletElement(opts) {\r\n const MapAVCSOLogo = L.Control.extend({\r\n onAdd: map => {\r\n this.panelDiv = L.DomUtil.create(\"div\", \"leaflet-avcso-image\");\r\n this.panelDiv.innerHTML = ReactDOMServer.renderToString()\r\n return this.panelDiv;\r\n },\r\n onRemove: map => {\r\n this.panelDiv = L.DomUtil.create(\"div\", \"leaflet-avcso-image\");\r\n return this.panelDiv;\r\n },\r\n });\r\n return new MapAVCSOLogo({ position: (this.props.position || \"bottomleft\") });\r\n }\r\n\r\n componentDidMount() {\r\n const { map } = this.props.leaflet;\r\n this.leafletElement.addTo(map);\r\n this.leafletElement.getContainer().addEventListener(\"click\", this.openLink);\r\n }\r\n\r\n componentWillUnmount() {\r\n // const { map } = this.props.leaflet;\r\n this.leafletElement.getContainer().removeEventListener(\"click\", this.openLink);\r\n this.leafletElement.remove();\r\n }\r\n}\r\n\r\nexport default withLeaflet(MapAVCSOLogo);","import React, { useEffect, useState, useMemo } from 'react';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport { WMSTileLayer, Marker, Popup, Tooltip, useLeaflet } from 'react-leaflet';\r\n// import { DisplayParameters } from './DisplayParams';\r\nimport { useMapStore } from '../../../../Global/Stores/mapStore';\r\nimport _ from 'lodash';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\n// import http from '../../../../Global/Services/httpService';\r\nimport axios from 'axios';\r\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, List, ListItem, ListItemText, ListItemSecondaryAction, IconButton } from '@material-ui/core';\r\nimport MapAVCSOLogo from '../../Markers/MapAVCSOLogo';\r\n//import MapAVCSOTrademark from '../../Markers/MapAVCSOTrademark';\r\n// import AVCS_TRADEMARK_LOGO from './../../../Images/AVCS/ADM_TM_rgb.png';\r\nimport AVCS_TRADEMARK_LOGO from './../../../../Images/AVCS/ADM_TM.png';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\n\r\n// const { BaseLayer, Overlay } = LayersControl;\r\n\r\n//const token = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0MTk0MmFjYy0zOTg4LTRhZDctYmQ4ZC0zNzViMTI0OGVhMjQiLCJpYXQiOiIxNTY2Mjk4MDUyIiwic3ViIjoiQjJCQ2hhcnRUcmFja0hLIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6IkIyQkNoYXJ0VHJhY2tISyIsInVzZXJpZCI6IjM3NzE5Iiwic2VjcmV0IjoiMTAwMDpBVzVuR0t5ZGszcS9lQ21wSmh0THFzS00rY0orbmJOdjpjWXROZVRONXE5Mmhzall3L0tVVkRONW1yVDcwWkNlbiIsImVuZHBvaW50L1N1Ym1pdE9yZGVyIjoidHJ1ZSIsImVuZHBvaW50L0dldE9yZGVyIjoidHJ1ZSIsImVuZHBvaW50L0dldEhvbGRpbmdzIjoidHJ1ZSIsImVuZHBvaW50L0dldCBUb2tlbiB3aXRoIExvZ2luIjoidHJ1ZSIsImVuZHBvaW50L1JlbmV3IFRva2VuIjoidHJ1ZSIsImVuZHBvaW50L0dldCBBVkNTIFBlcm1pdHMiOiJ0cnVlIiwiZW5kcG9pbnQvR2V0IGUtTlAgUGVybWl0cyI6InRydWUiLCJlbmRwb2ludC9SZWdpc3RlciBBRU5QIFZpZXdlciI6InRydWUiLCJlbmRwb2ludC9BVkNTIE9ubGluZSI6InRydWUiLCJlbmRwb2ludC9HZXQgQ2F0YWxvZ3VlcyI6InRydWUiLCJlbmRwb2ludC9HZXQgQVJDUyBQZXJtaXRzIjoidHJ1ZSIsImVuZHBvaW50L0dldCBlLU5QIE5NcyI6InRydWUiLCJlbmRwb2ludC9nZXRBRFBLZXlzIjoidHJ1ZSIsImVuZHBvaW50L2dldEFWQ1NXZWVrbHlTY2hlZHVsZUEiOiJ0cnVlIiwiZXhwIjoxNTY2MzAxNjUyLCJpc3MiOiJVS0hPX0ZNIiwiYXVkIjoiVUtIT19GTSJ9.rt39SlbAICt56ld62RwUakl8jmyDMTclIcRXwEb83mA\";\r\n\r\n// const licenseid = \"32079\";\r\n// const token = \"sWd-OldnfroaQz3jIhQtZrx5j3uDnK-X_JXEykv_f8CQm_dvFANwQDOsShk2PJfj\";\r\n// const userref = \"32079\";\r\n// const version = \"1.3.0\";\r\n// const baseAddress = \"https://avcs-preprod.admiralty.co.uk/server/rest/services/AVCS/MapServer/exts/MaritimeChartService/WMSServer\";\r\n\r\nconst Display_Params = {\r\n \"ECDISParameters\": {\r\n \"version\": \"10.6.1\",\r\n \"DynamicParameters\": {\r\n \"Parameter\": [\r\n // { \"name\": \"DisplayCategory\", \"value\": \"1,2,4\" },\r\n // { \"name\": \"ColorScheme\", \"value\": 5 },\r\n // { \"name\": \"DisplayFrames\", \"value\": 1 },\r\n // { \"name\": \"DisplayCategory\", \"value\": \"1\" },\r\n ]\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nconst AvcsoLayer = () => {\r\n const [mapState, mapActions] = useMapStore();\r\n const [, userActions] = useUserStore();\r\n\r\n // const test = DisplayParameters.DisplayParameters.ECDISParameters.DynamicParameters;\r\n // console.log('AvcsoLayer');\r\n\r\n const hasAVCSO = userActions.hasAppModuleID(7, false);\r\n const { license, selectionMode, EULA } = mapState.AVCSO;\r\n\r\n const isFeatureInfoActive = mapActions.isFeatureInfoActive();\r\n\r\n useEffect(() => {\r\n\r\n const generateToken = () => {\r\n\r\n if (EULA === null) {\r\n mapActions.getAvcsoEULA(license.expiration);\r\n }\r\n\r\n // console.log('generateToken');\r\n if (hasAVCSO === true && EULA === true) {\r\n\r\n mapActions.getAvcsoToken(license.expiration);\r\n }\r\n }\r\n\r\n generateToken();\r\n const interval = setInterval(generateToken, 60 * 1000 * 1); // 1 minute\r\n\r\n return () => {\r\n // console.log('clearInterval');\r\n clearInterval(interval);\r\n };\r\n\r\n }, [hasAVCSO, license, EULA]);\r\n\r\n\r\n // console.log('EULA', EULA);\r\n if (EULA === null) {\r\n return null;\r\n }\r\n\r\n if (EULA === false) {\r\n return ();\r\n }\r\n\r\n // if (EULA === null) {\r\n // return ();\r\n // }\r\n // else if (EULA === false) {\r\n // return null;\r\n // }\r\n\r\n const pars = mapState.AVCSO.parameter.filter(X => X.value !== null);\r\n const groups = mapState.AVCSO.parameterGroup;\r\n\r\n const layers = _.get(mapState.AVCSO.layers, \"value\", \"\");\r\n\r\n\r\n //console.log('layers', layers);\r\n\r\n const display = { ...Display_Params };\r\n display.ECDISParameters.DynamicParameters.Parameter = pars;\r\n display.ECDISParameters.DynamicParameters.ParameterGroup = groups;\r\n\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst WMSTileLayerExtended = ({ license, layers, Display_Params, selectionMode, featureInfoActive, mapActions }) => {\r\n\r\n const { map } = useLeaflet();\r\n\r\n const [Feature, setFeature] = useState({\r\n // position: {\r\n // lat: 45.47554027158593,\r\n // lng: -1.4501953125000002\r\n // }\r\n })\r\n\r\n // console.log('Display_Params', JSON.parseS(Display_Params))\r\n\r\n //console.table('WMSTileLayerExtended', license)\r\n\r\n useEffect(() => {\r\n\r\n const getFeatureInfo = event => {\r\n\r\n // console.log('getFeatureInfo', selectionMode);\r\n // if (selectionMode !== 1) {\r\n // // console.log('return');\r\n // return;\r\n // }\r\n\r\n\r\n if (!featureInfoActive) {\r\n return;\r\n }\r\n\r\n const ev = event;\r\n const bounds = ev.target.getBounds();\r\n const size = ev.target.getSize();\r\n\r\n const layerString = (layers || [21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]).join(',');\r\n const { x, y } = ev.containerPoint;\r\n\r\n const sw = map.options.crs.project(bounds._southWest);\r\n const ne = map.options.crs.project(bounds._northEast);\r\n const bbox = sw.x + \",\" + sw.y + \",\" + ne.x + \",\" + ne.y; // works with both EPSG4326, EPSG3857\r\n const code = map.options.crs.code;\r\n\r\n const infoFormat = 'text/html';\r\n //const infoFormat = 'application/json';\r\n //const openUrl = `${license.url}?SERVICE=WMS&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&VERSION=1.3.0&WIDTH=${size.x}&HEIGHT=${size.y}&CRS=${code}&BBOX=${bbox}&info_format=${infoFormat}&LAYERS=${layerString}&query_layers=${layerString}&i=${x}&j=${y}&Userid=${license.userId}&userRef=${license.userId}&token=${license.token}`;\r\n\r\n // console.log('license.token', license.token);\r\n\r\n //console.log('ev', ev);\r\n // console.log('openUrl', openUrl);\r\n //window.open(openUrl, \"_blank\"); //to open new page\r\n\r\n axios.get(license.url, {\r\n params: {\r\n SERVICE: 'WMS',\r\n REQUEST: 'GetFeatureInfo',\r\n FORMAT: 'image/png',\r\n TRANSPARENT: true,\r\n VERSION: '1.3.0',\r\n WIDTH: size.x,\r\n HEIGHT: size.y,\r\n CRS: code,\r\n BBOX: bbox,\r\n // info_format: 'text/html',\r\n //info_format: 'text/xml',\r\n info_format: 'application/json',\r\n LAYERS: layerString,\r\n query_layers: layerString,\r\n i: x,\r\n j: y,\r\n Userid: license.userId,\r\n userRef: license.userRef,\r\n token: license.token,\r\n f: 'pjson'\r\n }\r\n })\r\n .then(res => {\r\n const data = res.data.features;\r\n\r\n const featureInfo = {\r\n position: ev.latlng,\r\n features: data,\r\n }\r\n\r\n //console.log('JSON', data);\r\n\r\n setFeature(() => {\r\n // console.log('setFeature')\r\n return ({\r\n position: ev.latlng,\r\n features: data,\r\n })\r\n });\r\n\r\n mapActions.setAvcsoFeatureInfo(featureInfo);\r\n\r\n })\r\n }\r\n\r\n\r\n map.on(\"click\", getFeatureInfo);\r\n\r\n return () => {\r\n map.off(\"click\", getFeatureInfo);\r\n };\r\n\r\n }, [license, layers, Display_Params, selectionMode, featureInfoActive, setFeature, mapActions]);\r\n\r\n const trademark = ReactDOMServer.renderToString()\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\nconst AVCSO_FeatureMarker = ({ Feature }) => {\r\n\r\n // const [, mapActions] = useMapStore();\r\n const { position, features } = Feature;\r\n\r\n // const features = data.features;\r\n\r\n // console.log('AVCSO_FeatureMarker', Feature);\r\n\r\n return useMemo(() => {\r\n\r\n //console.log('AVCSO_FeatureMarker', position);\r\n if (!position || features.length === 0) {\r\n return null;\r\n }\r\n // mapActions.toggleAvcsoSelectionMode();\r\n\r\n //const dom = new DOMParser().parseFromString(Feature.data, \"text/xml\");\r\n // console.log('AVCSO_FeatureMarker', dom);\r\n // const content = dom.getElementsByTagName(\"Feature\").map(X =>
{X.description}
);\r\n\r\n return (\r\n \r\n {/* Tooltip */}\r\n {/* \r\n \r\n {\r\n features.map(F => ())\r\n }\r\n \r\n */}\r\n \r\n );\r\n\r\n }, [position, features]);\r\n}\r\n\r\n// const FeatureLine = ({ Feature }) => {\r\n// // const [, mapActions] = useMapStore();\r\n\r\n// const { dataset, cscl, rcid, code, acronym, description, lnam, geometryType, Attributes } = Feature;\r\n\r\n// // const { acronym, description, value, mappedValue } = Attributes[0];\r\n\r\n// const handleFeatureClick = () => {\r\n// console.log('Feature', Feature.Attributes);\r\n// // mapActions.setAvcsoFeatureInfo(Feature);\r\n// }\r\n\r\n// return (\r\n// \r\n// \r\n\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// );\r\n\r\n// }\r\n\r\n\r\nconst AVCSO_Agreement = () => {\r\n\r\n const [, mapActions] = useMapStore();\r\n\r\n const [open, setOpen] = useState(true);\r\n\r\n const handleAggreement = (val) => {\r\n // console.log('handleAggreement', val);\r\n\r\n if (val === true) {\r\n mapActions.setAvcsoEULA(val);\r\n }\r\n else {\r\n //mapActions.toggleAvcsoSelectionMode();\r\n setOpen(() => false);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {/* AVCS Online - EULA */}\r\n \r\n \r\n {/* \r\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 AvcsoLayer;\r\n","\r\nexport const Layers = {\r\n \"name\": \"Layers\",\r\n \"type\": \"L\",\r\n \"default\": \"X21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0\",\r\n \"value\": \"21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0\",\r\n \"Description\": \"Layers to be displayed.\",\r\n \"ExpectedInput\": [\r\n { \"code\": 0, \"value\": \"Display Base\" },\r\n { \"code\": 1, \"value\": \"Drying line\" },\r\n { \"code\": 2, \"value\": \"Buoys, beacons, structures,aids to navigation\" },\r\n { \"code\": 3, \"value\": \"Lights\" },\r\n { \"code\": 4, \"value\": \"Boundaries and limits\" },\r\n { \"code\": 5, \"value\": \"Prohibited and restricted areas\" },\r\n { \"code\": 6, \"value\": \"Chart scale boundaries\" },\r\n { \"code\": 7, \"value\": \"Cautionary notes\" },\r\n { \"code\": 8, \"value\": \"Ships' routeing systems and ferry routes\" },\r\n { \"code\": 9, \"value\": \"Archipelagic sea lanes\" },\r\n { \"code\": 10, \"value\": \"Standard Miscellaneous\" },\r\n { \"code\": 11, \"value\": \"Spot soundings\" },\r\n { \"code\": 12, \"value\": \"Submarine cables and pipelines\" },\r\n { \"code\": 13, \"value\": \"All isolated dangers\" },\r\n { \"code\": 14, \"value\": \"Magnetic variation\" },\r\n { \"code\": 15, \"value\": \"Depth contours\" },\r\n { \"code\": 16, \"value\": \"Seabed\" },\r\n { \"code\": 17, \"value\": \"Tidal\" },\r\n { \"code\": 18, \"value\": \"Low accuracy symbol\"},\r\n { \"code\": 19, \"value\": \"Shallow Water Pattern\"},\r\n { \"code\": 20, \"value\": \"Other Miscellaneous\"},\r\n { \"code\": 21, \"value\": \"Admiralty Information Overlay\"},\r\n ]\r\n};","import React, { useState, useMemo } from 'react';\r\nimport { DisplayParameters } from './DisplayParams';\r\nimport { Layers } from './Layers';\r\nimport { Typography, FormControlLabel, Radio, RadioGroup, Divider, FormControl, FormGroup, Checkbox, FormLabel, TextField, Box, OutlinedInput, InputLabel, Select, MenuItem, ListItemText } from '@material-ui/core';\r\nimport { useMapStore } from '../../../../Global/Stores/mapStore';\r\nimport _ from 'lodash';\r\n\r\nconst AVCSO_Options = DisplayParameters.DisplayParameters.ECDISParameters.DynamicParameters;\r\n\r\nconst AvcsOLayerOptions = () => {\r\n\r\n // const options = DisplayParameters.DisplayParameters.ECDISParameters.DynamicParameters;\r\n\r\n // console.log('AvcsOLayerOptions', options);\r\n\r\n // const valuesE = options.Parameter\r\n // .filter(X => X.type === 'E')\r\n // .map(X => );\r\n\r\n // const valuesL = options.Parameter\r\n // .filter(X => X.type === 'L')\r\n // .map(X => );\r\n\r\n\r\n // const valuesF = options.Parameter\r\n // .filter(X => X.type === 'F')\r\n // .map(X => );\r\n\r\n\r\n const parameters = AVCSO_Options.Parameter\r\n // .filter(X => X.type === 'L' && X.name == 'IntendedUsage')\r\n .map(X => );\r\n\r\n\r\n // console.log('parameters', parameters.length, valuesE.length, valuesL.length, valuesF.length);\r\n\r\n\r\n const groups = AVCSO_Options.ParameterGroup.map(X => );\r\n\r\n return (\r\n
\r\n {parameters}\r\n {groups}\r\n \r\n
\r\n );\r\n};\r\n\r\n// 1\r\nexport const AVCSO_LayerOptionsContainer = () => {\r\n\r\n const [mapState] = useMapStore();\r\n const activeLayers = mapState.AVCSO.layers.value;\r\n\r\n return (\r\n \r\n {\r\n \r\n }\r\n \r\n );\r\n}\r\n\r\n// 2\r\nexport const AVCSO_ParameterOptionsContainer = () => {\r\n\r\n // console.log('AVCSO_Options.Parameter', AVCSO_Options.Parameter)\r\n return (\r\n \r\n {\r\n AVCSO_Options.Parameter.map(X => {\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// 3\r\nexport const AVCSO_ParameterGroupOptionsContainer = () => {\r\n return (\r\n \r\n {\r\n AVCSO_Options.ParameterGroup.map(X => )\r\n }\r\n \r\n );\r\n}\r\n\r\n\r\nconst ParameterGroupOptions = ({ Group }) => {\r\n const groupName = Group.caption || Group.name;\r\n\r\n return (\r\n \r\n \r\n {groupName}\r\n {\r\n Group.Parameter.map(X => )\r\n }\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nconst ParameterOption = ({ Parameter, GroupName, IsGroup }) => {\r\n\r\n const [mapState] = useMapStore();\r\n //const activeValue = mapState.AVCSO.parameter.find(P => P.name === Parameter.name);\r\n // const activeValue = mapState.AVCSO.parameter.find(P => P.name === Parameter.name);\r\n\r\n // console.log('activeValue', activeValue);\r\n\r\n\r\n let activeValue = mapState.AVCSO.parameter.find(P => P.name === Parameter.name);\r\n if (IsGroup) {\r\n const grp = mapState.AVCSO.parameterGroup.find(X => X.name === GroupName);\r\n if (grp) {\r\n activeValue = grp.Parameter.find(P => P.name === Parameter.name);\r\n }\r\n }\r\n\r\n const getOption = (option, IsGroup, GroupName) => {\r\n switch (option.type) {\r\n case 'E':\r\n return ();\r\n case 'L':\r\n return ();\r\n case 'F':\r\n return ();\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n return (getOption(Parameter, IsGroup, GroupName));\r\n}\r\n\r\n\r\nconst LayerOptionsE = ({ Option, Value, GroupName, IsGroup }) => {\r\n const [, mapActions] = useMapStore();\r\n //const [value, setValue] = useState(Option.default);\r\n const [value, setValue] = useState(_.get(Value, 'value') || Option.default);\r\n\r\n\r\n // console.log('Value', _.get(Value, 'value', Option.default));\r\n // console.log('LayerOptionsE', GroupName);\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => { if (inputLabel.current) { setLabelWidth(inputLabel.current.offsetWidth); } }, [value]);\r\n\r\n return useMemo(() => {\r\n\r\n const { name, caption, Description, ExpectedInput } = Option;\r\n\r\n const handleValueChanged = (e) => {\r\n const target = e.target;\r\n const val = target.type == \"checkbox\" ? (1 + +target.checked) : (+target.value);\r\n\r\n setValue(_ => {\r\n const par = val == Option.default && false ? { name, value: null } : { name, value: val };\r\n\r\n console.log('par', par);\r\n\r\n mapActions.setAvcsoParameter({ Parameter: par, IsGroup, GroupName });\r\n\r\n return val.toString();\r\n })\r\n }\r\n\r\n const displayName = caption || (Description.length < 35 ? Description : name);\r\n const isBinary = ExpectedInput.length == 2 && ExpectedInput[0].value == \"False\" && ExpectedInput[1].value == \"True\";\r\n\r\n if (isBinary == true) {\r\n return (\r\n \r\n }\r\n label={displayName}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {displayName}\r\n \r\n {\r\n ExpectedInput.map(X => ({X.value}))\r\n }\r\n \r\n\r\n \r\n \r\n );\r\n\r\n }, [value, IsGroup, GroupName, labelWidth]);\r\n}\r\n\r\n\r\nconst LayerOptionsL = ({ Option, Value, GroupName, IsGroup }) => {\r\n const [, mapActions] = useMapStore();\r\n const [value, setValue] = useState((_.get(Value, 'value') || Option.default).split(',').map(X => +X));\r\n\r\n // return useMemo(() => {\r\n\r\n // console.log(Option.name, value);\r\n // console.log('Option.default', Option.default.split(',').map(X => +X));\r\n\r\n const { name, Description, ExpectedInput } = Option;\r\n\r\n const handleValueChanged = (e) => {\r\n\r\n const target = e.target;\r\n const val = +target.value;\r\n\r\n setValue(P => {\r\n const newState = P.includes(val) ? P.filter(X => X !== val) : [...P, val].map(X => +X);\r\n const par = newState == Option.default && false ? { name, value: null } : { name, value: newState.toString() };\r\n mapActions.setAvcsoParameter({ Parameter: par, IsGroup, GroupName });\r\n\r\n return newState;\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n {Description}\r\n \r\n {\r\n\r\n ExpectedInput.map(X => (\r\n }\r\n label={X.value}\r\n />\r\n ))\r\n }\r\n \r\n \r\n {/* */}\r\n \r\n );\r\n\r\n // }, [value]);\r\n}\r\n\r\n\r\nconst LayerOptionsF = ({ Option, Value, GroupName, IsGroup }) => {\r\n const [, mapActions] = useMapStore();\r\n // const [value, setValue] = useState(+Option.default);\r\n const [value, setValue] = useState(+_.get(Value, 'value', Option.default));\r\n\r\n\r\n\r\n //const inputLabel = React.useRef(null);\r\n // const [labelWidth, setLabelWidth] = React.useState(0);\r\n // React.useEffect(() => {\r\n // if (inputLabel.current) {\r\n // console.log(inputLabel.current.offsetWidth);\r\n // setLabelWidth(inputLabel.current.offsetWidth);\r\n // }\r\n // }, [value]);\r\n\r\n\r\n\r\n //console.log('LayerOptionsF', GroupName, Option.name, Value);\r\n // console.log('Option.default', Option.default);\r\n\r\n //return useMemo(() => {\r\n const { name, caption, Description, ExpectedInput } = Option;\r\n\r\n // console.log('Option', Option);\r\n // console.log('value', value);\r\n\r\n const handleValueChanged = (e) => {\r\n const val = +e.target.value;\r\n\r\n setValue(() => {\r\n\r\n const par = val == +Option.default && false ? { name, value: null } : { name, value: val };\r\n // console.log('LayerOptionsF', par);\r\n\r\n mapActions.setAvcsoParameter({ Parameter: par, IsGroup, GroupName });\r\n\r\n return val\r\n });\r\n }\r\n\r\n const inputProps = {\r\n min: 0,\r\n step: 0.1,\r\n };\r\n\r\n const label = caption || Description;\r\n return (\r\n \r\n );\r\n\r\n //}, [value, labelWidth]);\r\n}\r\n\r\nconst AvcsoLayerParameter = ({ Layer, ActiveLayers }) => {\r\n const [, mapActions] = useMapStore();\r\n\r\n //const [value, setValue] = useState(Layer.default.split(',').map(X => +X));\r\n const [value, setValue] = useState(ActiveLayers || Layer.default.split(',').map(X => +X));\r\n\r\n // console.log('ActiveLayers', ActiveLayers);\r\n\r\n return useMemo(() => {\r\n const { name, Description, ExpectedInput } = Layer;\r\n\r\n const handleValueChanged = (e) => {\r\n const val = +e.target.value;\r\n\r\n setValue(P => {\r\n const newState = _.sortBy((P.includes(val) ? P.filter(X => X !== val) : [...P, val]), [(X) => -X]);\r\n const par = newState == Layer.default ? { name, value: null } : { name, value: newState };\r\n\r\n mapActions.setAvcsoLayers(par);\r\n\r\n return newState;\r\n });\r\n }\r\n\r\n return (\r\n
\r\n \r\n {name}\r\n \r\n {\r\n\r\n ExpectedInput.map(X => (\r\n }\r\n label={X.value}\r\n />\r\n ))\r\n }\r\n \r\n \r\n {/* */}\r\n
\r\n );\r\n\r\n }, [value, ActiveLayers]);\r\n\r\n}\r\n\r\nexport default AvcsOLayerOptions;\r\n","\r\nexport const DisplayParameters =\r\n{\r\n \"DisplayParameters\": {\r\n \"ECDISParameters\": {\r\n \"version\": \"10.6.1\",\r\n \"DynamicParameters\": {\r\n \"Parameter\": [\r\n {\r\n \"name\": \"AreaSymbolizationType\",\r\n \"caption\": \"Area symbolization\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 2,\r\n \"Description\": \"Area symbolization: Sets type of symbology for area boundaries.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"Plain boundaries\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Symbolized boundaries\"\r\n }\r\n ]\r\n },\r\n // {\r\n // \"name\": \"AttDesc\",\r\n // \"caption\": \"Attribute description\",\r\n // \"type\": \"E\",\r\n // \"default\": 1,\r\n // \"value\": 1,\r\n // \"Description\": \"Attribute description: Display attribute acronym or description name.\",\r\n // \"ExpectedInput\": [\r\n // {\r\n // \"code\": 1,\r\n // \"value\": \"Acronym\"\r\n // },\r\n // {\r\n // \"code\": 2,\r\n // \"value\": \"Description\"\r\n // }\r\n // ]\r\n // },\r\n {\r\n \"name\": \"ColorScheme\",\r\n \"caption\": \"Color Scheme\",\r\n \"type\": \"E\",\r\n \"default\": 0,\r\n \"value\": 0,\r\n \"Description\": \"Colour schemes.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 0,\r\n \"value\": \"DAY\"\r\n },\r\n {\r\n \"code\": 1,\r\n \"value\": \"DAY_BRIGHT\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"DAY_BLACKBACK\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"DAY_WHITEBACK\"\r\n },\r\n {\r\n \"code\": 4,\r\n \"value\": \"DUSK\"\r\n },\r\n {\r\n \"code\": 5,\r\n \"value\": \"NIGHT\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"CompassRose\",\r\n \"caption\": \"Compass Rose\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Display Compass Rose.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DataQuality\",\r\n \"caption\": \"Quality of Data Symbology\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Data quality: M_QUAL symbology.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DeepContour\",\r\n \"caption\": \"Depth Contour (meters)\",\r\n \"type\": \"F\",\r\n \"default\": 30,\r\n \"value\": 30,\r\n \"Description\": \"Deep Contour: Set depth of the deep contour value in meters.\"\r\n },\r\n {\r\n \"name\": \"DisplayAIOFeatures\",\r\n \"caption\": \"Display AIO features.\",\r\n \"type\": \"L\",\r\n \"default\": \"1,2,3,4,5,6,7\",\r\n \"value\": \"1,2,3,4,5,6,7\",\r\n \"Description\": \"Display AIO features.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"Temporary notice\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Preliminary notice\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"ENC Preliminary notice\"\r\n },\r\n {\r\n \"code\": 4,\r\n \"value\": \"No information\"\r\n },\r\n {\r\n \"code\": 5,\r\n \"value\": \"Text\"\r\n },\r\n {\r\n \"code\": 6,\r\n \"value\": \"Bounding box\"\r\n },\r\n {\r\n \"code\": 7,\r\n \"value\": \"Area pattern\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayCategory\",\r\n \"type\": \"L\",\r\n \"default\": \"1,2,4\",\r\n \"value\": \"1,2,4\",\r\n \"Description\": \"Display categories.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"DISPLAYBASE\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"STANDARD\"\r\n },\r\n {\r\n \"code\": 4,\r\n \"value\": \"OTHER\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayDepthUnits\",\r\n \"caption\": \"Depth unit\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Depth units: Display depth units in different values.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"Meters\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Feet\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"Fathoms\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayFrames\",\r\n \"caption\": \"Frame Visibility\",\r\n \"type\": \"E\",\r\n \"default\": 3,\r\n \"value\": 1,\r\n \"Description\": \"Display frames: Sets dataset extent visability.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"On\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Off\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"Automatic\"\r\n },\r\n {\r\n \"code\": 4,\r\n \"value\": \"Visible Only\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayFrameText\",\r\n \"caption\": \"Frame Text\",\r\n \"type\": \"E\",\r\n \"default\": 0,\r\n \"value\": 1,\r\n \"Description\": \"Display dataset information on dataset frames.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 0,\r\n \"value\": \"Off\"\r\n },\r\n {\r\n \"code\": 1,\r\n \"value\": \"DSNM\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"CSCL\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"DSNM over CSCL\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayFrameTextPlacement\",\r\n \"caption\": \"Frame Text Placement\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Display frame text placement.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"Upper left\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Centroid\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayLightSectors\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 1,\r\n \"Description\": \"Display light sectors.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplayNOBJNM\",\r\n \"caption\": \" National Object Naming (local language)\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 2,\r\n \"Description\": \"Display national object name: NOBJNM when available.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DisplaySafeSoundings\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Display safe soundings.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"HonorScamin\",\r\n \"caption\": \"Enable Scale Minimum Feature Attribution\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Honor SCAMIN value when displaying features.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"IntendedUsage\",\r\n \"type\": \"L\",\r\n \"default\": \"0\",\r\n \"value\": \"0\",\r\n \"Description\": \"Intended usage: Enables the display of S-57 datasets based on intended usage.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 0,\r\n \"value\": \"All Datasets\"\r\n },\r\n {\r\n \"code\": 1,\r\n \"value\": \"Overview\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"General\"\r\n },\r\n {\r\n \"code\": 3,\r\n \"value\": \"Coastal\"\r\n },\r\n {\r\n \"code\": 4,\r\n \"value\": \"Approach\"\r\n },\r\n {\r\n \"code\": 5,\r\n \"value\": \"Harbour\"\r\n },\r\n {\r\n \"code\": 6,\r\n \"value\": \"Berthing\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"IsolatedDangers\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Isolated dangers in shallow water.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"IsolatedDangersOff\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Turn off all isolated dangers.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"LabelContours\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Label contours.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"LabelSafetyContours\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Label safety contours.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"OptionalDeepSoundings\",\r\n \"caption\": \"Deep Soundings\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Optional deep soundings: Do not show safe water soundings in conflict with other features.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"PointSymbolizationType\",\r\n \"caption\": \"Point Symbolization\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Point symbolization: Sets type of symbology for point features.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"Simplified\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Paper chart\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"RemoveDuplicateText\",\r\n \"caption\": \"Remove Duplicate Text\",\r\n \"type\": \"E\",\r\n \"default\": 1,\r\n \"value\": 2,\r\n \"Description\": \"Remove duplicate text for text group 21 features.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"SafetyContour\",\r\n \"caption\": \"Safety Contour (meters)\",\r\n \"type\": \"F\",\r\n \"default\": 30,\r\n \"value\": 30,\r\n \"Description\": \"Safety contour: Depth of the safety contour in meters.\"\r\n },\r\n {\r\n \"name\": \"SafetyDepth\",\r\n \"caption\": \"Safety Depth (meters)\",\r\n \"type\": \"F\",\r\n \"default\": 30,\r\n \"value\": 30,\r\n \"Description\": \"Safety depth: Depth of the safety depth in meters.\"\r\n },\r\n {\r\n \"name\": \"ShallowContour\",\r\n \"caption\": \"Shallow Contour (meters)\",\r\n \"type\": \"F\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Shallow contour: Depth of the shallow contour in meters.\"\r\n },\r\n {\r\n \"name\": \"TextHalo\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Display text halo.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"On\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"Off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"TwoDepthShades\",\r\n \"caption\": \"2 Depth Shades\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 1,\r\n \"Description\": \"Depth shades: Two depth area shades or four.\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"ParameterGroup\": [\r\n {\r\n \"name\": \"AreaSymbolSize\",\r\n \"caption\": \"Area Symbol Size\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"scaleFactor\",\r\n \"type\": \"F\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"caption\": \"Scale_factor\",\r\n \"Description\": \"Scale factor\"\r\n },\r\n {\r\n \"name\": \"minZoom\",\r\n \"type\": \"F\",\r\n \"default\": 0.01,\r\n \"value\": 0.01,\r\n \"caption\": \"Minimum_zoom\",\r\n \"Description\": \"Minimum zoom\"\r\n },\r\n {\r\n \"name\": \"maxZoom\",\r\n \"type\": \"F\",\r\n \"default\": 1.2,\r\n \"value\": 1.2,\r\n \"caption\": \"Maximum_zoom\",\r\n \"Description\": \"Maximum zoom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"DatasetDisplayRange\",\r\n \"caption\": \"Display Range\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"minZoom\",\r\n \"type\": \"F\",\r\n \"default\": 0.01,\r\n \"value\": 0.01,\r\n \"caption\": \"Minimum_zoom\",\r\n \"Description\": \"Minimum dataset display value.\"\r\n },\r\n {\r\n \"name\": \"maxZoom\",\r\n \"type\": \"F\",\r\n \"default\": 1.2,\r\n \"value\": 1.2,\r\n \"caption\": \"Maximum_zoom\",\r\n \"Description\": \"Maximum dataset display value.\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"LineSymbolSize\",\r\n \"caption\": \"Line Symbol Size\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"scaleFactor\",\r\n \"type\": \"F\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"caption\": \"Scale_factor\",\r\n \"Description\": \"Scale factor.\"\r\n },\r\n {\r\n \"name\": \"minZoom\",\r\n \"type\": \"F\",\r\n \"default\": 0.1,\r\n \"value\": 0.1,\r\n \"caption\": \"Minimum_zoom\",\r\n \"Description\": \"Minimum zoom.\"\r\n },\r\n {\r\n \"name\": \"maxZoom\",\r\n \"type\": \"F\",\r\n \"default\": 1.2,\r\n \"value\": 1.2,\r\n \"caption\": \"Maximum_zoom\",\r\n \"Description\": \"Maximum zoom.\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"PointSymbolSize\",\r\n \"caption\": \"Point Symbol Size\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"scaleFactor\",\r\n \"type\": \"F\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"Description\": \"Scale_factor.\"\r\n },\r\n {\r\n \"name\": \"minZoom\",\r\n \"type\": \"F\",\r\n \"default\": 0.1,\r\n \"value\": 0.1,\r\n \"caption\": \"Minimum_zoom\",\r\n \"Description\": \"Minimum zoom.\"\r\n },\r\n {\r\n \"name\": \"maxZoom\",\r\n \"type\": \"F\",\r\n \"default\": 1.2,\r\n \"value\": 1.2,\r\n \"caption\": \"Maximum_zoom\",\r\n \"Description\": \"Maximum zoom.\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"TextGroups\",\r\n \"caption\": \"Text Groups\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"11\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Important text\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"21\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Names for position reporting\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"23\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Light description string\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"24\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Note on chart data\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"25\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Nature of seabed\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"26\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Geographic names\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"27\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Magnetic variation and swept depth\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"28\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Height of islet or land feature\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"29\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Berth number\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"30\",\r\n \"type\": \"E\",\r\n \"default\": 2,\r\n \"value\": 2,\r\n \"Description\": \"Current Velocity\",\r\n \"ExpectedInput\": [\r\n {\r\n \"code\": 1,\r\n \"value\": \"False\"\r\n },\r\n {\r\n \"code\": 2,\r\n \"value\": \"True\"\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"TextSize\",\r\n \"caption\": \"Text Size\",\r\n \"Parameter\": [\r\n {\r\n \"name\": \"scaleFactor\",\r\n \"type\": \"F\",\r\n \"default\": 1,\r\n \"value\": 1,\r\n \"caption\": \"Scale_factor\",\r\n \"Description\": \"Scale factor.\"\r\n },\r\n {\r\n \"name\": \"minZoom\",\r\n \"type\": \"F\",\r\n \"default\": 0.1,\r\n \"value\": 0.1,\r\n \"caption\": \"Minimum_zoom\",\r\n \"Description\": \"Minimum zoom.\"\r\n },\r\n {\r\n \"name\": \"maxZoom\",\r\n \"type\": \"F\",\r\n \"default\": 1.2,\r\n \"value\": 1.2,\r\n \"caption\": \"Maximum_zoom\",\r\n \"Description\": \"Maximum zoom.\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"ServerParameters\": {\r\n \"defaultVisibility\": true,\r\n \"framesOn\": false\r\n }\r\n};","import React, { useState } from 'react';\r\nimport { Paper, InputBase, IconButton, Divider, TextField, InputAdornment } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n//import FilterIcon from '@material-ui/icons/FilterList';\r\nimport SwapVertIcon from '@material-ui/icons/SwapVert';\r\nimport _ from 'lodash';\r\n\r\nconst SearchFilter = ({ placeholder, onSearch, onSort }) => {\r\n\r\n const [, setState] = useState('');\r\n const [sort, setSort] = useState(1);\r\n\r\n const hasSorting = !!onSort;\r\n\r\n\r\n const handleOnSearch = (e) => {\r\n // console.log('e', e.target.value);\r\n const val = e.target.value;\r\n setState(() => setState(val));\r\n onSearch(val);\r\n }\r\n\r\n const handleOnSort = () => {\r\n // const val = e.target.value;\r\n setSort((prev) => {\r\n\r\n const val = prev * -1;\r\n // console.log('sort', val);\r\n if (!!onSort)\r\n onSort(val);\r\n\r\n return val;\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 hasSorting && (\r\n \r\n \r\n handleOnSort()}>\r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\n\r\nexport const TextFieldSearch = ({ Placeholder, OnSearch }) => {\r\n\r\n // const [, setState] = useState(''); \r\n const handleSearch = _.debounce((e) => {\r\n // console.log('handleSearch', e)\r\n // catalogueActions.setFilterText(e);\r\n OnSearch(e);\r\n }, 400);\r\n\r\n return (\r\n handleSearch(e.target.value)}\r\n InputProps={{\r\n startAdornment: (\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 SearchFilter;\r\n","import React, { useMemo, useState } from 'react'\r\nimport { List, ListItem, Paper, ListItemText, Link, CircularProgress } from '@material-ui/core'\r\nimport { useGlobalStore } from './../../../../Global/Stores/globalStore'\r\nimport _ from 'lodash';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport SearchFilter from '../../../Desktop/Misc/SearchFilter';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { IconButton } from '@material-ui/core';\r\nimport { useMapStore } from '../../../../Global/Stores/mapStore';\r\n\r\nconst RouteContainer = () => {\r\n\r\n const [mapState, mapActions] = useMapStore();\r\n const [globalState] = useGlobalStore();\r\n const [filter, setFilter] = useState('');\r\n const [sort, setSort] = useState(1);\r\n \r\n const [ defaultRoute ] = mapState.activeRoutes;\r\n\r\n const [selectedItem, setSelectedItem] = useState(defaultRoute ? defaultRoute.sourceRouteID : 0);\r\n\r\n const loaded = Boolean(globalState.routes);\r\n const routes = loaded ? globalState.routes : [];\r\n let filterRoutes = routes.filter(route => route.name.toLowerCase().indexOf(filter) !== -1);\r\n \r\n filterRoutes = _.orderBy(filterRoutes, [B => B.name.toLowerCase()], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n const onRouteClick = (route) => {\r\n setSelectedItem(() => route.sourceRouteID);\r\n\r\n mapActions.setActiveDrawerMenu(0);\r\n mapActions.zoomTo(route.routePoints);\r\n mapActions.setActiveRoutes([route]);\r\n }; \r\n \r\n const onRouteClear = (e) => {\r\n e.stopPropagation();\r\n\r\n setSelectedItem(0);\r\n mapActions.clearActiveRoutes();\r\n mapActions.setActiveDrawerMenu(0);\r\n };\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n setSort(() => S)} />\r\n {\r\n \r\n {\r\n (loaded) && (routes.length > 0) &&\r\n (\r\n filterRoutes.map(route => {\r\n return (\r\n onRouteClick(route)}>\r\n \r\n {\r\n (selectedItem == route.sourceRouteID) && \r\n (\r\n onRouteClear(e)}>\r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n })\r\n )\r\n } \r\n \r\n }\r\n \r\n
\r\n {\r\n (loaded) && (routes.length === 0) &&\r\n (\r\n \r\n \r\n \r\n click to add new route\r\n \r\n \r\n )\r\n }\r\n {\r\n (!loaded) && \r\n (\r\n
\r\n \r\n
\r\n )\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }, [filterRoutes, selectedItem]);\r\n};\r\n\r\nexport default RouteContainer;","// import React, { Component } from \"react\";\r\nimport { withLeaflet, MapControl } from \"react-leaflet\";\r\nimport L from \"leaflet\";\r\n\r\nclass MapInfo extends MapControl {\r\n\r\n constructor(props, context) {\r\n super(props);\r\n }\r\n\r\n displayInfo = (ev) => {\r\n\r\n let lng = ev.latlng.lng;\r\n if (lng > 180 || lng < -180) {\r\n const shift = parseInt(Math.abs(ev.latlng.lng / 180));\r\n lng = ((ev.latlng.lng + 180 + shift * 360) % 360) - 180\r\n }\r\n\r\n this.panelDiv.innerHTML = `
Lat: ${ev.latlng.lat.toFixed(4)}  Lng: ${lng.toFixed(4)}
`;\r\n // console.log(this.panelDiv.innerHTML);\r\n }\r\n\r\n createLeafletElement(opts) {\r\n const MapInfo = L.Control.extend({\r\n onAdd: map => {\r\n this.panelDiv = L.DomUtil.create(\"div\", \"leaflet-positionInfo\");\r\n this.panelDiv.innerHTML = `
Lat: _  Lng: _
`;\r\n return this.panelDiv;\r\n },\r\n onRemove: map => {\r\n this.panelDiv = L.DomUtil.create(\"div\", \"leaflet-positionInfo\");\r\n return this.panelDiv;\r\n },\r\n });\r\n return new MapInfo({ position: (this.props.position || \"bottomleft\") });\r\n }\r\n\r\n componentDidMount() {\r\n const { map } = this.props.leaflet;\r\n this.leafletElement.addTo(map);\r\n map.addEventListener(\"mousemove\", this.displayInfo);\r\n }\r\n\r\n componentWillUnmount() {\r\n const { map } = this.props.leaflet;\r\n this.leafletElement.remove();\r\n map.removeEventListener(\"mousemove\", this.displayInfo);\r\n }\r\n}\r\n\r\nexport default withLeaflet(MapInfo);","import React, { useState, useMemo } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { List, ListItem, ListItemText, Link, ListItemIcon, Checkbox } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\nconst CatalogueMapPopup = ({ popupInfo, selectedItemID, selectedItemIDs, canAddItems = false }) => {\r\n // const [basketState] = useBasketStore();\r\n const [closeKey, setCloseKey] = useState(0);\r\n\r\n const showPopup = (popupInfo.position) && (closeKey !== popupInfo.key);\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('popupInfo.lines', popupInfo.lines);\r\n // console.log('selectedItemIDs 2', selectedItemIDs);\r\n\r\n const closePopup = () => {\r\n setCloseKey(popupInfo.key);\r\n }\r\n\r\n return showPopup === true ? (\r\n \r\n \r\n {\r\n popupInfo.lines.map(X => )\r\n }\r\n \r\n \r\n ) : null;\r\n\r\n }, [showPopup, popupInfo.key, selectedItemIDs]);\r\n};\r\n\r\n\r\nconst PopupLine = ({ line, focused, selected, closePopup, canAddItems }) => {\r\n\r\n // console.log('selected', selected);\r\n return (\r\n \r\n \r\n {\r\n canAddItems === true ? (\r\n \r\n ) : null\r\n }\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default CatalogueMapPopup;\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport CatalogueMapPopup from './CatalogueMapPopup';\r\nimport ItemPolygon from '../../Polygons/ItemPolygon';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useCatalogueStore } from '../../../../Global/Stores/catalogueStore';\r\nimport { checkPolygonInPoint } from '../../MapFunctions';\r\nimport GeneralRoutesLayer from './GeneralRoutesLayer';\r\n// import _ from 'lodash';\r\n\r\nconst CatalogueSelectLayer = ({ match, history, mapActions }) => {\r\n\r\n // const [globalState,] = useGlobalStore(); \r\n const [, globalActions] = useGlobalStore();\r\n const [catalogueState,] = useCatalogueStore();\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n\r\n //console.log('CatalogueSelectLayer');\r\n\r\n const { sourceLines, selectedItemIDs, productGroup, productItemGroups, sourceRecord } = catalogueState;\r\n // console.log('selectedItemIDs', selectedItemIDs);\r\n const focusedItemID = +match.params.itemID || 0;\r\n\r\n const loaded = globalActions.isLoaded();\r\n\r\n useEffect(() => {\r\n\r\n if (focusedItemID > 0) {\r\n const line = sourceLines.find(X => X.itemID === focusedItemID);\r\n if (line) {\r\n // console.log('focusedItemID', focusedItemID, [line]);\r\n mapActions.zoomTo(line.polygonPoints);\r\n }\r\n }\r\n\r\n }, [focusedItemID, loaded, sourceLines]);\r\n\r\n // const sourceOptionID = itemSource.id;\r\n // const isRoute = sourceOptionID === 1\r\n\r\n\r\n const selectedItemID = +match.params.itemID || 0;\r\n // const items = _.get(globalState, 'catalogue.items', []);\r\n\r\n\r\n // if (!globalState.catalogue || !globalState.catalogue.items)\r\n // return null;\r\n\r\n const mapItems = sourceLines.filter(X => productGroup === X.productGroupID && X.polygonPoints && productItemGroups.includes(X.productItemGroupID));\r\n // const mapItemIDs = mapItems.map(X => X.itemID); //.slice(1, 10000);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n //console.log('CatalogueSelectLayer 2');\r\n\r\n //const testItems = mapItems.filter(X => mapItemIDs.includes(X.itemID));\r\n\r\n //console.log('CatalogueSelectLayer', selectedItemID, mapItemIDs, items, popup);\r\n // console.log('mapItemIDs', mapItemIDs);\r\n\r\n const routeLayer = sourceRecord && sourceRecord.sourceRouteID ? : null;\r\n\r\n const onClick = (e) => {\r\n // const event = e;\r\n let selected = mapItems.filter(X => X.polygonPoints && checkPolygonInPoint(e.latlng, X.polygonPoints));\r\n if (selected.length === 0) {\r\n selected = e.layer;\r\n }\r\n\r\n\r\n if (selected.length === 1) {\r\n history.push(`${selected[0].itemID}`);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n\r\n // console.log('onClick', selected);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n mapItems\r\n .map(X => {\r\n //const selected = (X.itemID === selectedItemID);\r\n const selected = selectedItemIDs.includes(X.itemID);\r\n const focused = selectedItemID === X.itemID;\r\n\r\n //return ()\r\n return ()\r\n })\r\n }\r\n \r\n {routeLayer}\r\n \r\n );\r\n\r\n }, [productItemGroups, selectedItemIDs, selectedItemID, mapItems, sourceRecord]);\r\n //}, [productItemGroups]);\r\n}\r\n\r\n\r\nconst CatalogItemPolygon = ({ Item, Selected, Focused }) => {\r\n\r\n // const inBasket = !!basketState.basketLines.find(X => X.itemID === Item.itemID);\r\n\r\n const itemID = Item.itemID;\r\n return useMemo(() => {\r\n\r\n // console.log('CatalogItemPolygon', Item);\r\n if (!Item.polygonPoints) {\r\n // console.log('Skip Map Item', Item);\r\n return null;\r\n }\r\n\r\n\r\n // const color = Item.validationID === 1 ? \"#1dc71d\" : \"#ff4a4a\";\r\n // const fillOpacity = Selected === true ? 0.2 : 0.01;\r\n const color = Selected === true ? \"green\" : \"black\";\r\n // const color = \"black\";\r\n\r\n return (\r\n );\r\n\r\n }, [itemID, Item, Selected, Focused]);\r\n}\r\n\r\nexport default CatalogueSelectLayer\r\n","import React, { useMemo } from 'react';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport ItemPolygon from '../../Polygons/ItemPolygon';\r\nimport { checkPolygonInPoint } from '../../MapFunctions';\r\nimport _ from 'lodash';\r\nimport GeneralRoutesLayer from './GeneralRoutesLayer';\r\n\r\nconst CatalogueBasketLayer = ({ match, history }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [basketState,] = useBasketStore();\r\n\r\n\r\n const loaded = _.get(globalState, 'catalogue.items', []).length > 0;\r\n if (!loaded)\r\n return null;\r\n\r\n\r\n const selectedItemID = +match.params.itemID || 0;\r\n // const { mapItems } = basketState;\r\n const { basketLines, closedProductGroups, routes } = basketState;\r\n\r\n const mapLines = basketLines.filter(L => Boolean(L.item) && !closedProductGroups.includes(L.item.productGroupID) && Boolean(L.item.polygonPoints));\r\n\r\n\r\n const routeLayer = routes.length > 0 ? : null;\r\n\r\n //console.log('CatalogueBasketLayer', mapLines);\r\n\r\n const onClick = (e) => {\r\n let selected = mapLines.filter(X => X.item.polygonPoints && checkPolygonInPoint(e.latlng, X.item.polygonPoints));\r\n if (selected.length === 0)\r\n selected = e.layer;\r\n\r\n if (selected.length === 1) {\r\n history.push(`${selected[0].itemID}`);\r\n // mapActions.zoomToLines(selected);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {/* */}\r\n \r\n {\r\n mapLines\r\n .map(X => {\r\n const selected = (X.itemID === selectedItemID);\r\n return ()\r\n })\r\n }\r\n \r\n {routeLayer}\r\n \r\n );\r\n}\r\n\r\n\r\nconst CatalogItemPolygon = ({ Item, Selected, Focused }) => {\r\n const [basketState] = useBasketStore();\r\n\r\n const inBasket = !!basketState.basketLines.find(X => X.itemID === Item.itemID);\r\n return useMemo(() => {\r\n\r\n // console.log('CatalogItemPolygon', Item);\r\n\r\n if (!Item.polygonPoints)\r\n return null;\r\n\r\n\r\n // const color = Item.validationID === 1 ? \"#1dc71d\" : \"#ff4a4a\";\r\n // const fillOpacity = Selected === true ? 0.2 : 0.01;\r\n const color = inBasket === true ? \"green\" : \"black\";\r\n\r\n return (\r\n );\r\n\r\n }, [Item, Selected, inBasket, Focused]);\r\n}\r\n\r\nexport default CatalogueBasketLayer\r\n","import React from 'react';\r\nimport { Button, Dialog, DialogContent, DialogActions, Link } from '@material-ui/core';\r\n\r\nconst AvcsoFeaturePopup = ({ isImage, link, name }) => {\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClickOpen = (e) => {\r\n // console.log('handleClickOpen');\r\n e.preventDefault();\r\n setOpen(_ => true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(_ => false);\r\n };\r\n\r\n return (\r\n
\r\n \r\n {name}\r\n \r\n\r\n \r\n \r\n {\r\n isImage ?\r\n () :\r\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 AvcsoFeaturePopup;\r\n","import React, { useState } from 'react'\r\nimport { Table, TableHead, TableRow, TableCell, TableBody, Paper, Typography } from '@material-ui/core'\r\nimport { useMapStore } from '../../../../Global/Stores/mapStore';\r\nimport { getAvcsoImageLink } from '../../../../Global/Services/httpService';\r\nimport AvcsoFeaturePopup from './AvcsoFeaturePopup';\r\n\r\nconst AvcsoFeatureContainer = () => {\r\n const [mapState] = useMapStore();\r\n\r\n const [selectedRcid, setSelectedRcid] = useState(0)\r\n\r\n\r\n const featureInfo = mapState.AVCSO.featureInfo;\r\n\r\n if (!featureInfo)\r\n return (\r\n \r\n \r\n Click on any point on the map to show the pick report for this location.\r\n \r\n \r\n );\r\n\r\n const { position, features } = featureInfo;\r\n\r\n const selectedFeature = features.find(X => X.rcid === selectedRcid);\r\n\r\n const handleFeaureSelect = (feature) => {\r\n setSelectedRcid(P => feature.rcid)\r\n }\r\n\r\n\r\n //console.log('selectedFeature', selectedFeature)\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n \r\n Type\r\n Description\r\n \r\n \r\n \r\n {\r\n features.map(F => (\r\n handleFeaureSelect(F)}>\r\n {F.geometryType}\r\n {F.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\nconst hideAtts = ['SCAMIN', 'SORDAT', 'SORIND'];\r\nconst FeatureAttributesTable = ({ Feature }) => {\r\n const [mapState,] = useMapStore();\r\n //const token = `token=tSN2Jq2JL2mQTWPfpiC6yIAucLj-7BWm_lSzJEYd7loCwpr_rHF-pI1tofs03NmA`;\r\n\r\n\r\n if (!Feature) return null;\r\n\r\n //const baseLink = `https://avcs-preprod.admiralty.co.uk/server/rest/services/AVCS/MapServer/exts/MaritimeChartService/MapServer/notes?f=text/plain&`;\r\n\r\n const { Attributes } = Feature;\r\n const showAttributes = Attributes.filter(X => X.description && !hideAtts.includes(X.acronym));\r\n // const fileAttributes = Attributes.filter(X => X.acronym.endsWith('_token'));\r\n\r\n\r\n // console.log('fileAttributes', fileAttributes);\r\n\r\n // const file = `file=7MQUuRmF3Uh=l;G@>7j4eiofafhNHOubi7F6OStE>hQwIo4:ItVwfa1Bphlw3eB7mRlw7iUmdLD0`;\r\n // const link = `${baseLink}${file}&${token}`;\r\n\r\n\r\n const getLink = (filename, fileAttr, isText) => {\r\n\r\n const license = mapState.AVCSO.license;\r\n\r\n const baseLink = license.urlNotes;\r\n const file = `file=${fileAttr.value}`;\r\n const token = `token=${license.token}`;;\r\n let link = `${baseLink}${file}&${token}`;\r\n // return ({filename});\r\n\r\n let comp;\r\n if (isText) {\r\n comp = ();\r\n }\r\n else {\r\n link = getAvcsoImageLink(link);\r\n // return ({filename});\r\n comp = ({filename});\r\n }\r\n return ();\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Key\r\n Value\r\n \r\n \r\n \r\n {\r\n showAttributes.map(A => {\r\n\r\n const key = A.description || A.acronym;\r\n const value = A.mappedValue || A.value;\r\n\r\n let media = null;\r\n if (A.acronym == 'TXTDSC') {\r\n const fileAttribute = Attributes.find(X => X.acronym == 'txtdsc_token');\r\n if (fileAttribute) {\r\n media = getLink(value, fileAttribute, true);\r\n }\r\n }\r\n\r\n if (A.acronym == 'PICREP') {\r\n const fileAttribute = Attributes.find(X => X.acronym == 'picrep_token');\r\n if (fileAttribute) {\r\n media = getLink(value, fileAttribute, false);\r\n }\r\n }\r\n\r\n if(A.acronym == 'encaff')\r\n {\r\n media = value.split(',').join(', ');\r\n //console.log('encaff 1', value,);\r\n //console.log('encaff 2', media);\r\n }\r\n // if (media) {\r\n // return (\r\n // \r\n // \r\n // {media}\r\n // \r\n // \r\n // );\r\n // }\r\n\r\n return (\r\n \r\n {key}\r\n {media || value}\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 AvcsoFeatureContainer\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport ItemPolygon from '../../Polygons/ItemPolygon';\r\nimport { checkPolygonInPoint } from '../../MapFunctions';\r\nimport CatalogueMapPopup from './CatalogueMapPopup';\r\n\r\nconst AvcsoItemsLayer = ({ match, history, mapActions }) => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState,] = useAvcsoStore();\r\n\r\n\r\n\r\n const [popup, setPopup] = useState({\r\n key: 0,\r\n position: null,\r\n lines: []\r\n });\r\n\r\n\r\n const { selectedItemIDs, avcsoLines, licenseLines, productItemGroups } = avcsoState;\r\n const focusedItemID = +match.params.itemID || 0;\r\n\r\n\r\n const loaded = globalActions.isLoaded();\r\n\r\n useEffect(() => {\r\n\r\n if (focusedItemID > 0) {\r\n const line = avcsoLines.find(X => X.itemID === focusedItemID);\r\n if (line) {\r\n // console.log('focusedItemID', focusedItemID, [line]);\r\n mapActions.zoomTo(line.polygonPoints);\r\n }\r\n }\r\n\r\n }, [focusedItemID, loaded, avcsoLines]);\r\n\r\n\r\n // console.log('AvcsoItemsLayer', loaded);\r\n\r\n //return null;\r\n\r\n if (!loaded) {\r\n return null;\r\n }\r\n\r\n const vesselItemIDs = licenseLines.map(X => X.itemID);\r\n const mapItems = avcsoLines.filter(X => productItemGroups.includes(X.productItemGroupID));\r\n\r\n const onClick = (e) => {\r\n\r\n // console.log('onClick', e);\r\n\r\n // const mapItems = globalActions.getCatalogueItems(avcsoItemIDs);\r\n\r\n let selected = mapItems.filter(X => X.polygonPoints && checkPolygonInPoint(e.latlng, X.polygonPoints));\r\n if (selected.length === 0) {\r\n selected = [e.layer];\r\n }\r\n\r\n if (selected.length === 1) {\r\n history.push(`${selected[0].itemID}`);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n setPopup(prev => {\r\n return {\r\n key: prev.key + 1,\r\n position: e.latlng,\r\n lines: selected\r\n }\r\n });\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n mapItems\r\n .map(X => {\r\n //const selected = (X.itemID === selectedItemID);\r\n const selected = selectedItemIDs.includes(X.itemID);\r\n const focused = focusedItemID === X.itemID;\r\n const inInventory = vesselItemIDs.includes(X.itemID);\r\n\r\n //return ()\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\n\r\nconst AvcsoItemPolygon = ({ Item, ItemID, Selected, Focused, InInventory }) => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n //const Item = globalActions.getCatalogueItem(ItemID);\r\n if (!Item || !Item.polygonPoints) {\r\n // console.log('Skip Map Item', Item);\r\n return null;\r\n }\r\n\r\n\r\n // const color = Item.validationID === 1 ? \"#1dc71d\" : \"#ff4a4a\";\r\n // const fillOpacity = Selected === true ? 0.2 : 0.01;\r\n const color = InInventory ? 'blue' : Selected === true ? \"green\" : \"black\";\r\n // const color = \"black\";\r\n\r\n return (\r\n );\r\n\r\n }, [ItemID, Selected, Focused, InInventory, globalActions]);\r\n}\r\n\r\nexport default AvcsoItemsLayer\r\n","import React, { useMemo, useState } from 'react';\r\nimport { FeatureGroup } from 'react-leaflet';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport ItemPolygon from '../../Polygons/ItemPolygon';\r\nimport { checkPolygonInPoint } from '../../MapFunctions';\r\nimport CatalogueMapPopup from './CatalogueMapPopup';\r\n\r\nconst AvcsoBasketLayer = ({ match, history }) => {\r\n\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState,] = useAvcsoStore();\r\n\r\n const { selectedItemIDs, basketLines, licenseLines, productItemGroups } = avcsoState;\r\n const focusedItemID = +match.params.itemID || 0;\r\n const loaded = globalActions.isLoaded();\r\n\r\n if (!loaded) {\r\n return null;\r\n }\r\n\r\n const onClick = (e) => {\r\n\r\n let selected = basketLines.filter(X => X.polygonPoints && checkPolygonInPoint(e.latlng, X.polygonPoints));\r\n if (selected.length === 0) {\r\n selected = [e.layer];\r\n }\r\n\r\n if (selected.length === 1) {\r\n history.push(`${selected[0].itemID}`);\r\n }\r\n else if (selected.length > 0) {\r\n\r\n // setPopup(prev => {\r\n // return {\r\n // key: prev.key + 1,\r\n // position: e.latlng,\r\n // lines: selected\r\n // }\r\n // });\r\n }\r\n }\r\n\r\n return (\r\n \r\n {/* */}\r\n \r\n {\r\n basketLines\r\n .map(X => {\r\n \r\n const selected = true;\r\n const focused = focusedItemID === X.itemID;\r\n const inInventory = licenseLines.includes(X.itemID);\r\n\r\n //return ()\r\n return (\r\n \r\n );\r\n })\r\n }\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nconst AvcsoItemPolygon = ({ Item, ItemID, Selected, Focused, InInventory }) => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n //const Item = globalActions.getCatalogueItem(ItemID);\r\n if (!Item || !Item.polygonPoints) {\r\n // console.log('Skip Map Item', Item);\r\n return null;\r\n }\r\n\r\n\r\n // const color = Item.validationID === 1 ? \"#1dc71d\" : \"#ff4a4a\";\r\n // const fillOpacity = Selected === true ? 0.2 : 0.01;\r\n const color = InInventory ? 'blue' : Selected === true ? \"green\" : \"black\";\r\n // const color = \"black\";\r\n\r\n return (\r\n );\r\n\r\n }, [ItemID, Selected, Focused, InInventory, globalActions]);\r\n}\r\n\r\nexport default AvcsoBasketLayer;\r\n","import { useEffect } from \"react\";\r\nimport L from \"leaflet\";\r\nimport \"./leaflet-polyline-measure.css\";\r\nimport \"./polyline-measure-custom.css\";\r\nimport \"./leaflet-polyline-measure.js\";\r\n\r\nexport default function LeafletRuler({ mapRef }) {\r\n\r\n const map = mapRef.current.leafletElement; \r\n\r\n const scaleOptions = {\r\n maxWidth: 240, \r\n metric: true, \r\n imperial: false,\r\n position: 'bottomleft'\r\n };\r\n\r\n const circle = {\r\n weight: 2,\r\n radius: 4,\r\n color: '#fff',\r\n fillColor: '#4598d5'\r\n };\r\n\r\n const line = {\r\n weight: 2,\r\n color: '#4598d5',\r\n };\r\n\r\n const polylineMeasureOption = {\r\n tempLine: line,\r\n fixedLine: line,\r\n endCircle: circle,\r\n showBearings: false, \r\n startCircle: circle,\r\n position: 'topleft',\r\n unit: 'nauticalmiles', \r\n intermedCircle: circle,\r\n showUnitControl: true, \r\n measureControlLabel: '',\r\n showClearControl: true, \r\n showFirstToolTip: false,\r\n clearMeasurementsOnStop: false,\r\n tooltipDistanceText: 'Distance',\r\n measureControlTitleOn: 'Start Measuring',\r\n measureControlTitleOff: 'End Measurement',\r\n tooltipTotalDistanceText: 'Total Distance',\r\n currentCircle: { \r\n ...circle,\r\n radius: 8, \r\n fillOpacity: 1,\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n\r\n if(map !== null) \r\n {\r\n L.control.scale(scaleOptions).addTo(map);\r\n L.control.polylineMeasure (polylineMeasureOption).addTo(map);\r\n }\r\n\r\n }, [map]);\r\n\r\n return null;\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Map as LeafletMap, TileLayer, LayerGroup } from 'react-leaflet';\r\nimport { Route, Switch } from \"react-router-dom\";\r\n// import storage from 'store';\r\nimport SalesOrderLayer from './Layers/SalesOrderLayer';\r\nimport { useMapStore } from '../../Global/Stores/mapStore';\r\nimport SalesQuoteLayer from './Layers/SalesQuoteLayer';\r\nimport HoldingLayer from './Layers/HoldingLayer';\r\nimport FolioItemsLayer from './Layers/FolioItemsLayer';\r\nimport FolioVesselItemsLayer from './Layers/FolioVesselItemsLayer';\r\n// import { Switch } from 'react-router-dom'\r\nimport FleetPositionsLayer from './Layers/FleetPositionsLayer';\r\nimport NmScale from \"@marfle/react-leaflet-nmscale\";\r\n// import CatalogueItemsLayer from './Layers/Catalogue/CatalogueItemsLayer';\r\n// import BasketItemsLayer from './Layers/Catalogue/BasketItemsLayer';\r\n// import BasketRoutesLayer from './Layers/Catalogue/BasketRoutesLayer';\r\n// import ManagerBasketLayer from './Layers/Catalogue/ManagerBasketLayer';\r\n// import QuoteBasketLayer from './Layers/Catalogue/QuoteBasketLayer';\r\nimport SalesShipmentLayer from './Layers/SalesShipmentLayer';\r\n// import PurchaseOrderLayer from './Layers/PurchaseOrderLayer';\r\n// import WorldAreaLayer from './Layers/WorldAreaLayer';\r\nimport FlatFeeContractLayer from './Layers/FlatFeeContractLayer';\r\nimport { useColumnStore } from '../../Global/Stores/columnStore';\r\nimport AvcsoLayer from './Layers/AVCSO/AvcsoLayer';\r\nimport { useUserStore } from '../../Global/Stores/userStore';\r\nimport { Grid, Divider } from '@material-ui/core';\r\nimport LayersIcon from '@material-ui/icons/Layers';\r\n\r\nimport QueueIcon from '@material-ui/icons/Queue';\r\nimport ClearAllIcon from '@material-ui/icons/ClearAll';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\nimport SettingsApplicationsIcon from '@material-ui/icons/SettingsApplications';\r\nimport AdjustIcon from '@material-ui/icons/Adjust';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\n\r\nimport { AVCSO_LayerOptionsContainer, AVCSO_ParameterOptionsContainer, AVCSO_ParameterGroupOptionsContainer } from './Layers/AVCSO/AvcsOLayerOptions';\r\nimport RouteContainer from './Layers/Routing/RouteContainer';\r\nimport MapInfo from './Markers/MapInfo';\r\n// import MapAVCSOLogo from './Markers/MapAVCSOLogo';\r\nimport SatelliteIcon from '@material-ui/icons/Satellite';\r\n\r\nimport http, { getToken } from './../../Global/Services/httpService'\r\nimport CatalogueSelectLayer from './Layers/Catalogue/CatalogueSelectLayer';\r\nimport CatalogueBasketLayer from './Layers/Catalogue/CatalogueBasketLayer';\r\nimport AvcsoFeatureContainer from './Layers/AVCSO/AvcsoFeatureContainer';\r\nimport AvcsoItemsLayer from './Layers/Catalogue/AvcsoItemsLayer';\r\nimport AvcsoBasketLayer from './Layers/Catalogue/AvcsoBasketLayer';\r\n\r\nimport RouteIcon from './../../Images/Routes/Route-Icon.svg'\r\nimport GeneralRoutesLayer from './Layers/Catalogue/GeneralRoutesLayer';\r\nimport LeafletRuler from './LeafletRuler/LeafletRuler';\r\n\r\n/*\r\nNOTE:\r\nMaking the map generic\r\nSince the map component is used by both mobile and desktop views, there are a few UI issues to solve\r\n [1] The mobile view requires menu items to display horizontally. \r\n [2] There are as well instances where the mobile view requires a map without the menu. \r\nTo solve this, calling the MapControl will have to include 2 arguments/props. \r\n [1] MenuOrientation\r\n [1] Horizontal\r\n [2] Vertical\r\n [2] Show Menu\r\n [1] True\r\n [2] False\r\n\r\nExample Usage:\r\n \r\n\r\n- The menuOrientation argument/prop runs through other components since several components\r\n require a view difference\r\n\r\n- If no arguments/props are passed, error is returned. so ensure that correct arguments/props in lowercases are passed\r\n\r\n*/\r\n\r\n// const { BaseLayer, Overlay } = LayersControl;\r\nconst MapControl = ({menuOrientation = 'ver', showMenu = true }) => {\r\n // const [width, setwidth] = useState(0);\r\n const ref = useRef(null);\r\n const [showRoutes, setShowRoutes] = useState(false);\r\n const [mapState, mapActions] = useMapStore();\r\n const [columnStore] = useColumnStore();\r\n\r\n const viewPort = JSON.parse(sessionStorage.getItem('viewPort')) || {\r\n lat: 60.505,\r\n lng: -0.09,\r\n zoom: 4\r\n };\r\n const position = [viewPort.lat, viewPort.lng]; \r\n\r\n useEffect(() => {\r\n // console.log('columnStore', columnStore);\r\n const map = ref.current.leafletElement;\r\n setTimeout(() => map.invalidateSize(false), 10);\r\n }, [columnStore]);\r\n\r\n const bounds = (mapState.bounds && mapState.bounds.length > 0) ? mapState.bounds : null;\r\n\r\n const { activeLayer, drawerMenu, AVCSO } = mapState;\r\n\r\n const selectionMode = AVCSO.selectionMode;\r\n\r\n const onViewportChange = (viewPort) => {\r\n setShowRoutes(false);\r\n };\r\n\r\n const onViewportChanged = (viewPort) => {\r\n setShowRoutes(mapState.activeRoutes && mapState.activeRoutes.length > 0);\r\n };\r\n\r\n // console.log(\"bounds\", bounds);\r\n // const outer = [[50.505, -29.09], [52.505, 29.09]]\r\n // const inner = [[49.505, -2.09], [53.505, 2.09]]\r\n\r\n\r\n // const hasAVCSO = !!mapState.AVCSO.license.token;\r\n\r\n\r\n // console.log('AVCSO.parameter', AVCSO.parameter);\r\n\r\n\r\n // const cursorValue = selectionMode === 1 ? 'crosshair' : '';\r\n const cursorValue = mapActions.isFeatureInfoActive() ? 'crosshair' : '';\r\n\r\n return (\r\n \r\n \r\n\r\n {/* */}\r\n\r\n {\r\n activeLayer === 2 ? () : (\r\n \r\n \r\n {/* */}\r\n \r\n\r\n )\r\n }\r\n\r\n\r\n \r\n\r\n {/* */}\r\n }\r\n />\r\n\r\n }\r\n />\r\n\r\n }\r\n />\r\n\r\n\r\n {/* FlatFee Layers */}\r\n }\r\n />\r\n\r\n {/* */}\r\n {/* Catalogue Select Items */}\r\n }\r\n />\r\n\r\n {/* Catalogue Route Items */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue Basket Layer */}\r\n }\r\n />\r\n\r\n\r\n {/* AVCS Online Items */}\r\n }\r\n />\r\n {/* AVCS Online Items */}\r\n }\r\n />\r\n\r\n {/* Basket Items to Order */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Basket Routes to Order */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue Route Items */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue Product Items */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue Routes */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue ManagerBaskets */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Catalogue QuoteBaskets */}\r\n {/* }\r\n /> */}\r\n\r\n {/* Holdings */}\r\n }\r\n />\r\n\r\n {/* Folios */}\r\n \r\n }\r\n />\r\n \r\n }\r\n />\r\n \r\n\r\n {/* }\r\n /> */} \r\n\r\n {/* }\r\n /> */}\r\n\r\n {/* {\r\n mapState.activeOverlays.includes(1) ? : null\r\n } */}\r\n\r\n \r\n \r\n \r\n\r\n { showRoutes ? : null }\r\n \r\n\r\n { showMenu === true ? : null }\r\n\r\n \r\n );\r\n};\r\n\r\nconst MapMenuBar = ({ drawerMenu, menuOrientation }) => {\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\nconst MapMenuLayers = ({menuOrientation}) => {\r\n\r\n const [mapState, mapActions] = useMapStore();\r\n const { activeLayer } = mapState;\r\n const activeMenu = mapState.drawerMenu.activeMenu;\r\n const EULA = mapState.AVCSO.EULA;\r\n\r\n const onLayerClick = (layerID) => {\r\n // console.log('onLayerClick', layerID);\r\n mapActions.setActiveLayer(layerID);\r\n }\r\n\r\n const onToggleMapMenu = (drawerMenu) => {\r\n // console.log('onLayerClick', layerID);\r\n mapActions.setActiveDrawerMenu(drawerMenu);\r\n }\r\n\r\n // OSM\r\n // AVCSO -> Features + FeatureGroups + Layers\r\n if(menuOrientation === \"ver\"){\r\n return (\r\n \r\n } onSelect={() => onLayerClick(1)} Selected={activeLayer === 1} />\r\n\r\n onLayerClick(2)}\r\n Selected={activeLayer === 2}\r\n ToggleMapMenu={onToggleMapMenu}\r\n ActiveMenu={activeMenu}\r\n EULA={EULA}\r\n menuOrientation={menuOrientation}\r\n />\r\n\r\n \r\n\r\n \r\n\r\n \r\n )\r\n } else if (menuOrientation === \"hor\"){\r\n return (\r\n \r\n \r\n \r\n } onSelect={() => onLayerClick(1)} Selected={activeLayer === 1} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n onLayerClick(2)}\r\n Selected={activeLayer === 2}\r\n ToggleMapMenu={onToggleMapMenu}\r\n ActiveMenu={activeMenu}\r\n EULA={EULA}\r\n menuOrientation={menuOrientation}\r\n />\r\n \r\n \r\n\r\n \r\n )\r\n }\r\n}\r\n\r\nconst MapMenuOverlays = () => {\r\n const [mapState, mapActions] = useMapStore();\r\n\r\n const FleetPositionsOverlayID = 1;\r\n\r\n const setOverlay = (overlayID, active) => {\r\n // console.log('toggleOverlay', overlayID, active);\r\n mapActions.setOverlayVisible(overlayID, active);\r\n }\r\n\r\n const isFleetPositionsActive = mapState.activeOverlays.includes(FleetPositionsOverlayID);\r\n\r\n return (\r\n \r\n } onSelect={() => setOverlay(FleetPositionsOverlayID, !isFleetPositionsActive)} Selected={isFleetPositionsActive} />\r\n \r\n );\r\n}\r\n\r\nconst MapMenuRouteIcon = () => {\r\n return ()\r\n}\r\n\r\nconst MapMenuRoutes = ({ ToggleMapMenu }) => {\r\n\r\n const [mapState] = useMapStore();\r\n\r\n const RouteID = 5;\r\n const isRouteActive = mapState.drawerMenu.activeMenu === RouteID;\r\n return (\r\n \r\n } onSelect={() => ToggleMapMenu(RouteID)} Selected={isRouteActive} />\r\n \r\n );\r\n}\r\n\r\n\r\nconst MapMenuDrawerContainer = ({ drawerMenu, menuOrientation }) => {\r\n\r\n const { activeMenu } = drawerMenu;\r\n const menuShowing = activeMenu > 0;\r\n\r\n let menuContainer = null;\r\n switch (activeMenu) {\r\n case 1: // AVCSO Layers\r\n menuContainer = ;\r\n break;\r\n case 2: // AVCSO Paremeter Options\r\n menuContainer = ;\r\n break;\r\n case 3: // AVCSO Group Options\r\n menuContainer = ;\r\n break;\r\n case 4: // AVCSO GetFeatures\r\n menuContainer = ;\r\n break;\r\n case 5: // Routes\r\n menuContainer = ;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if(menuOrientation === \"ver\"){\r\n return(\r\n
\r\n {\r\n menuContainer\r\n }\r\n
\r\n )\r\n } else if(menuOrientation === \"hor\"){\r\n return(\r\n
\r\n {\r\n menuContainer\r\n }\r\n
\r\n )\r\n }\r\n\r\n}\r\n\r\n\r\nconst MapMenuItemAVCSO = ({ Selected, onSelect, ToggleMapMenu, ActiveMenu, EULA, menuOrientation }) => {\r\n // console.log('ActiveMenu', ActiveMenu);\r\n const [, userActions] = useUserStore();\r\n const hasAVCSO = userActions.hasFeatureID(6, false) && userActions.hasAppModuleID(7, false);\r\n\r\n\r\n const disabled = !hasAVCSO;// || EULA === false;\r\n if(menuOrientation === \"ver\"){\r\n return (\r\n \r\n }\r\n onSelect={onSelect}\r\n Selected={Selected}\r\n divider={false}\r\n disabled={disabled}\r\n />\r\n\r\n\r\n {\r\n Selected === true && EULA === true ? (\r\n \r\n } onSelect={() => ToggleMapMenu(1)} Selected={ActiveMenu === 1} divider={false} />\r\n } onSelect={() => ToggleMapMenu(2)} Selected={ActiveMenu === 2} divider={false} />\r\n } onSelect={() => ToggleMapMenu(3)} Selected={ActiveMenu === 3} divider={false} />\r\n \r\n \r\n \r\n ) : null\r\n }\r\n \r\n \r\n )\r\n } else if(menuOrientation === \"hor\"){\r\n return (\r\n
\r\n \r\n \r\n }\r\n onSelect={onSelect}\r\n Selected={Selected}\r\n divider={false}\r\n disabled={disabled}\r\n />\r\n \r\n \r\n {\r\n Selected === true && EULA === true ? (\r\n \r\n \r\n } onSelect={() => ToggleMapMenu(1)} Selected={ActiveMenu === 1} divider={false} />\r\n \r\n \r\n } onSelect={() => ToggleMapMenu(2)} Selected={ActiveMenu === 2} divider={false} />\r\n \r\n \r\n } onSelect={() => ToggleMapMenu(3)} Selected={ActiveMenu === 3} divider={false} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : null\r\n }\r\n {/* */}\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst MapMenuBarItemAvcsoReadme = () => {\r\n\r\n const onSelect = () => {\r\n const to = `${http.endpoint}/api/file/avcso/readme?access_token=${getToken()}`;\r\n window.open(to, \"_blank\");\r\n }\r\n\r\n return (\r\n \r\n \r\n } onSelect={onSelect} Selected={false} divider={false} />\r\n \r\n );\r\n}\r\n\r\nconst MapMenuBarItemAvcsoSelectionMode = () => {\r\n const [mapState, mapActions] = useMapStore();\r\n\r\n // const selected = mapState.AVCSO.selectionMode === 1; // selctionMode = getFeatureInfo\r\n const selected = mapState.drawerMenu.activeMenu === 4; // selctionMode = getFeatureInfo\r\n\r\n // console.log('SelectionMode', mapState.AVCSO.selectionMode);\r\n const onSelect = () => {\r\n // Toggle SelectionMode\r\n // mapActions.toggleAvcsoSelectionMode();\r\n mapActions.setActiveDrawerMenu(4);\r\n }\r\n\r\n return (\r\n \r\n \r\n } onSelect={onSelect} Selected={selected} divider={false} />\r\n \r\n );\r\n\r\n}\r\n\r\nconst MapMenuBarItem = ({ Icon, Selected, onSelect, divider = false, disabled = false }) => {\r\n\r\n const classNames = `mapMenuItem${(Selected === true ? \" active\" : \"\")}${disabled === true ? ' ctdisabled' : ''}`;\r\n return (\r\n \r\n
\r\n {Icon}\r\n
\r\n {divider === true ? : null}\r\n
\r\n );\r\n}\r\n\r\nexport default MapControl;\r\n","import React from 'react';\r\n\r\n////// Call Map\r\nimport MapControl from '../../MapControl/MapControl';\r\n\r\n////// Material UI support Files\r\nimport { Fab, Icon, Dialog, Slide } from '@material-ui/core';\r\n\r\n////// Styling Things\r\nimport menuStyling from '../CSS/MenuStyles.module.css';\r\n\r\n// Modal Window\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nconst FloatingMenuButton = () => {\r\n // Modal Window\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const openMap = () => {\r\n setOpen(true);\r\n };\r\n\r\n const closeMap = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n close\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n location_on\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default FloatingMenuButton","import React from 'react'\r\nimport { Link } from \"react-router-dom\";\r\n\r\n////// Matrial UI support files\r\nimport { ListItem, ListItemText, Divider, Card, List, Button } from \"@material-ui/core\";\r\n\r\n////// Global Support Files\r\nimport Menu from '../../../Global/Data/Menu';\r\n\r\n////// CSS Files\r\nimport homeStyles from '../CSS/HomeStyles.module.css';\r\nimport menuStyles from '../CSS/MenuStyles.module.css';\r\n\r\n\r\nconst MyHome = () => {\r\n return(\r\n \r\n
\r\n {Menu.map(mainMenu => {\r\n if (mainMenu.subItems){\r\n if (mainMenu.to === window.location.pathname){\r\n return (
\r\n \r\n \r\n \r\n \r\n \r\n {mainMenu.subItems.map(subMenu => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n )\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )};\r\n }})}\r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MyHome","\r\nexport const isValidateEmail = (email) => {\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(String(email).toLowerCase());\r\n}","import React from 'react';\r\nimport { CircularProgress } from '@material-ui/core';\r\n\r\nconst Loading = () => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport Loading from '../Misc/Loading';\r\nimport { useColumnStore } from '../../../Global/Stores/columnStore';\r\nimport { useUserStore } from '../../../Global/Stores/userStore';\r\n\r\nconst ContentColumn = ({ children, loaded, selectedID = null, access = false, disablePadding = false }) => {\r\n\r\n const [, columnActions] = useColumnStore();\r\n const [, userActions] = useUserStore();\r\n\r\n const [featureAccess, setFeatureAccess] = useState(false);\r\n\r\n const location = window.location.pathname;\r\n\r\n const id = selectedID === null ? new Date() : selectedID;\r\n\r\n useEffect(() => {\r\n const hasAccess = access || userActions.canAccessPath(window.location.pathname);\r\n setFeatureAccess(() => hasAccess);\r\n }, [])\r\n\r\n useEffect(() => {\r\n columnActions.addColumn(1);\r\n return () => {\r\n columnActions.addColumn(-1);\r\n };\r\n }, []);\r\n\r\n\r\n // console.log('location', window.location.pathname);\r\n\r\n const paddingClass = disablePadding === true ? 'disablePadding' : '';\r\n\r\n return useMemo(() => {\r\n // console.log('location', location);\r\n\r\n return featureAccess === true ? (\r\n \r\n {/* */}\r\n {loaded === true ? children : }\r\n \r\n ) : null;\r\n\r\n }, [loaded, featureAccess, location, id]);\r\n\r\n};\r\n\r\nexport default ContentColumn;\r\n","import React from 'react'\r\n\r\n// Custom Styling Properties\r\nimport menuStyles from '../CSS/MenuStyles.module.css';\r\n\r\n// Actual work starts here\r\nconst Breadcrumb = ({Module, currentPage}) => {\r\n\r\n return (\r\n
\r\n {Module} | {currentPage}\r\n
\r\n )\r\n}\r\n\r\nexport default Breadcrumb","import React, { useEffect, useState, useMemo } from 'react'\r\nimport { Box, Typography, Grid, TextField, Button } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport { isValidateEmail } from '../../../../Global/Data/Methods';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ProtectedArea from '../../../Custom/ProtectedArea';\r\n\r\nimport Breadcrumb from '../../Navigation/Breadcrumb';\r\n\r\nconst Profile = () => {\r\n const [userState, userActions] = useUserStore();\r\n const [loading, setLoading] = useState(false);\r\n const [profileState, setProfileState] = useState();\r\n\r\n useEffect(() => {\r\n setProfileState(() => ({ ...userState.user, password: \"\", password2: \"\" }))\r\n }, []);\r\n\r\n return useMemo(() => {\r\n\r\n if (!profileState)\r\n return null;\r\n\r\n const { firstName, lastName, email, password, password2 } = profileState;\r\n // console.log('profileState', profileState);\r\n\r\n const canSave = (\r\n (firstName.length > 0) &&\r\n (lastName.length > 0) &&\r\n (email.length > 0) &&\r\n (isValidateEmail(email)) &&\r\n (password.length > 5) &&\r\n (password === password2));\r\n\r\n const handleChange = (e) => {\r\n if (!loading) {\r\n const { name, value } = e.target;\r\n setProfileState(() => ({ ...profileState, [name]: value }));\r\n }\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n if (!canSave) return;\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n email: email,\r\n password: password,\r\n };\r\n\r\n setLoading(() => true);\r\n\r\n http.post('/api/account/users/change', postData)\r\n .then(result => {\r\n\r\n // console.log('changed Profile', result.data);\r\n userActions.login({ user: result.data.user });\r\n })\r\n .catch(() => {\r\n\r\n setLoading(() => false);\r\n });\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n\r\n {/* My Profile */}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n SAVE PROFILE\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\n }, [profileState, loading])\r\n}\r\n\r\nexport default Profile\r\n","import React, { useEffect, useState, useMemo } from 'react'\r\nimport { Box, Typography, Divider, TextField, Button, Card, CardActions, CardContent } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport { isValidateEmail } from '../../../../Global/Data/Methods';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ProtectedArea from '../../../Custom/ProtectedArea';\r\n\r\nimport Breadcrumb from '../../Navigation/Breadcrumb';\r\n\r\nconst Profile = () => {\r\n const [userState, userActions] = useUserStore();\r\n const [loading, setLoading] = useState(false);\r\n const [profileState, setProfileState] = useState();\r\n\r\n useEffect(() => {\r\n setProfileState(() => ({ ...userState.user, password: \"\", password2: \"\" }))\r\n }, []);\r\n\r\n return useMemo(() => {\r\n\r\n if (!profileState)\r\n return null;\r\n\r\n const { firstName, lastName, email, password, password2 } = profileState;\r\n // console.log('profileState', profileState);\r\n\r\n const canSave = (\r\n (firstName.length > 0) &&\r\n (lastName.length > 0) &&\r\n (email.length > 0) &&\r\n (isValidateEmail(email)) &&\r\n (password.length > 5) &&\r\n (password === password2));\r\n\r\n const handleChange = (e) => {\r\n if (!loading) {\r\n const { name, value } = e.target;\r\n setProfileState(() => ({ ...profileState, [name]: value }));\r\n }\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n if (!canSave) return;\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n email: email,\r\n password: password,\r\n };\r\n\r\n setLoading(() => true);\r\n\r\n http.post('/api/account/users/change', postData)\r\n .then(result => {\r\n\r\n // console.log('changed Profile', result.data);\r\n userActions.login({ user: result.data.user });\r\n })\r\n .catch(() => {\r\n\r\n setLoading(() => false);\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 First Name\r\n \r\n \r\n {firstName}\r\n \r\n
\r\n \r\n Last Name\r\n \r\n \r\n {lastName}\r\n \r\n
\r\n \r\n Email Address\r\n \r\n \r\n {email}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\n }, [profileState, loading])\r\n}\r\n\r\nexport default Profile\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Table, TableHead, TableCell, TableBody, TableRow } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nimport Breadcrumb from '../../Navigation/Breadcrumb';\r\n\r\nconst UserList = ({ match, history }) => {\r\n\r\n const [userState, userActions] = useUserStore();\r\n\r\n const id = +_.get(match, 'params.id', 0);\r\n\r\n // console.log('id', id);\r\n\r\n useEffect(() => {\r\n userActions.getUsers();\r\n }, []);\r\n\r\n\r\n const { users } = userState;\r\n //console.log('users 1', users);\r\n\r\n return useMemo(() => {\r\n\r\n //console.log('users 2', users);\r\n const sorted = _.orderBy(users, [I => I.firstName.toLowerCase()]);\r\n //console.log('users 3', sorted);\r\n\r\n const openUser = (id) => {\r\n history.push(`/account/users/manage/${id}`)\r\n }\r\n\r\n const loaded = users.length > 0;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n First Name\r\n Last Name\r\n \r\n \r\n\r\n \r\n {\r\n sorted.map(X => {\r\n // console.log('X', X)\r\n return ()\r\n })\r\n }\r\n \r\n\r\n
\r\n
\r\n );\r\n }, [users, id]);\r\n}\r\n\r\nconst UserRow = ({ user, openUser, selected }) => {\r\n\r\n // console.log('User Row', user);\r\n return useMemo(() => {\r\n\r\n const { personID, firstName, lastName, deleted } = user;\r\n return (\r\n deleted !== true ? (\r\n openUser(personID)} selected={selected} hover={true} >\r\n {firstName}\r\n {lastName}\r\n ) : null);\r\n\r\n }, [user, selected])\r\n}\r\n\r\nexport default UserList\r\n","import React, { useState } from 'react'\r\nimport { Grid, TextField, Button, } from '@material-ui/core';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport { isValidateEmail } from '../../../../Global/Data/Methods';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nimport Breadcrumb from '../../Navigation/Breadcrumb';\r\n\r\n// The option to set password has only been commented out, state set to false and value check set to 0\r\n// Should this option ever come back to version, we would only have to undo than re-write\r\n\r\nconst UserCreate = ({ history }) => {\r\n\r\n const [creating, setCreating] = useState(false);\r\n const [firstName, setFirstName] = useState(\"\");\r\n const [lastName, setLastName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [password, setPassword] = useState(false);\r\n const [passwordRepeat, setPasswordRepeat] = useState(false);\r\n\r\n const disabled = creating ||\r\n (firstName.length < 3) ||\r\n (lastName.length < 3) ||\r\n (password.length < 0) ||\r\n (passwordRepeat.length < 0) ||\r\n password !== passwordRepeat || !isValidateEmail(email);\r\n\r\n const firstNameChange = (e) => {\r\n const val = e.target.value;\r\n setFirstName(() => val);\r\n }\r\n\r\n const lastNameChange = (e) => {\r\n const val = e.target.value;\r\n setLastName(() => val);\r\n }\r\n\r\n const emailChange = (e) => {\r\n const val = e.target.value;\r\n setEmail(() => val);\r\n }\r\n\r\n const passwordChange = (e) => {\r\n const val = e.target.value;\r\n setPassword(() => val);\r\n }\r\n\r\n const passwordRepeatChange = (e) => {\r\n const val = e.target.value;\r\n setPasswordRepeat(() => val);\r\n }\r\n\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n email: email,\r\n password: password,\r\n };\r\n\r\n\r\n setCreating(() => true);\r\n\r\n http.post('/api/account/users/create', postData)\r\n .then(result => {\r\n // actions.login(result.data);\r\n\r\n setFirstName(() => \"\");\r\n setLastName(() => \"\");\r\n setEmail(() => \"\");\r\n setPassword(() => \"\");\r\n setPasswordRepeat(() => \"\");\r\n\r\n history.push(\"/account/users\");\r\n })\r\n .catch(() => {\r\n setCreating(() => false);\r\n });\r\n }\r\n\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n {/* Create new user */}\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n Create\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default UserCreate\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport { Link, Typography, Table, TableBody, TableRow, TableCell, FormControl, FormControlLabel, Checkbox, Button } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nimport Breadcrumb from '../../Navigation/Breadcrumb';\r\n\r\nconst UserDetail = ({ match }) => {\r\n const [userState, userActions] = useUserStore();\r\n\r\n\r\n const id = +_.get(match, 'params.id', 0);\r\n\r\n const user = userState.users.find(X => X.personID === id);\r\n const hasUserManagement = userActions.hasUserManagement();\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('UserDetail', userState);\r\n\r\n if (!user)\r\n return null;\r\n\r\n const handleDeleteUser = () => {\r\n // console.log('deleteUser', user.personID);\r\n userActions.deleteUser(user.personID);\r\n }\r\n\r\n const { firstName, lastName, email } = user;\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 Firstname:\r\n {firstName}\r\n \r\n\r\n \r\n Lastname:\r\n {lastName}\r\n \r\n\r\n \r\n Email:\r\n \r\n {email}\r\n {/* {email} */}\r\n \r\n \r\n\r\n \r\n Features:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Delete User\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }, [user]);\r\n};\r\n\r\n\r\nconst UserFeatures = ({ user }) => {\r\n const [userState, userActions] = useUserStore();\r\n\r\n\r\n const [features, setFeatures] = useState([]);\r\n\r\n useEffect(() => {\r\n\r\n setFeatures(p => user.userFeatureIDs);\r\n\r\n }, [user])\r\n\r\n\r\n\r\n return useMemo(() => {\r\n\r\n const toggleFeature = (fid) => {\r\n setFeatures(p => {\r\n return p.includes(fid) ? p.filter(X => X !== fid) : [...p, fid];\r\n })\r\n }\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n userActions.setUserFeatures(user.personID, features);\r\n }\r\n\r\n\r\n const canSave = !_.isEqual(user.userFeatureIDs.sort(), features.sort());\r\n const hasUserManagement = userActions.hasUserManagement();\r\n // console.log('hasUserManagement', hasUserManagement)\r\n\r\n\r\n return (\r\n \r\n \r\n {\r\n userState.appFeatures.map(X => (\r\n toggleFeature(X.appFeatureID)}\r\n />\r\n }\r\n label={X.name} />))\r\n }\r\n \r\n Save\r\n \r\n );\r\n\r\n }, [user, user.userFeatureIDs, features]);\r\n}\r\n\r\nexport default UserDetail;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport Profile from './Profile/Profile';\r\nimport ViewProfile from './Profile/ViewProfile';\r\n// import Users from './Users/Users';\r\nimport UserList from './Users/UserList';\r\nimport UserCreate from './Users/UserCreate';\r\nimport UserDetail from './Users/UserDetail';\r\nimport { Button, ButtonGroup} from '@material-ui/core';\r\n\r\nconst Account = () => {\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n {/* */}\r\n {/* \r\n */}\r\n\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n\r\n );\r\n}\r\n\r\nconst AccountOptions = () => {\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 Account\r\n","import React, { useMemo } from 'react';\r\nimport './NumberStatus.scss';\r\n\r\nconst NumberStatus = ({ number }) => {\r\n\r\n return useMemo(() => {\r\n // console.log('NumberStatus', number);\r\n\r\n return (\r\n
\r\n
\r\n

{number}

\r\n
\r\n );\r\n\r\n }, [number]);\r\n};\r\n\r\nexport default NumberStatus;\r\n","import React, { useMemo } from 'react';\r\nimport { Link as Link1, withRouter } from 'react-router-dom';\r\nimport { Link, ListItem, ListItemText, ListItemSecondaryAction, Chip } from '@material-ui/core';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n\r\n\r\nconst ListItemLink = ({ text, subText, to, location, number, numberSmall, selected, isHeader = true, divider = false, icon = null }) => {\r\n // console.log('number 1', number);\r\n\r\n const isSelected = selected === true || (location.pathname.startsWith(to));\r\n\r\n const hasIcon = Boolean(icon);\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('ListItemLink number', number);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n numberSmall ? : null\r\n }\r\n {\r\n number ? : null\r\n }\r\n\r\n\r\n {icon !== null ? icon : null}\r\n \r\n \r\n \r\n );\r\n\r\n // }, []);\r\n }, [text, to, number, numberSmall, isSelected, isHeader, hasIcon]);\r\n}\r\n\r\nexport default withRouter(ListItemLink);\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport List from '@material-ui/core/List';\r\n// import SummaryCardHeader from './SummaryCardHeader';\r\nimport ListItemLink from '../Misc/ListItemLink';\r\n// import SummaryCard from './SummaryCard';\r\n// import img from \"./../../../../Images/summaries/icon-news.png\";\r\nimport { Divider } from '@material-ui/core';\r\nimport Moment from 'react-moment';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\n\r\nconst AnnouncementSummary = () => {\r\n\r\n const [globalState, globalActions] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n\r\n useEffect(() => {\r\n globalActions.getAnnouncements();\r\n }, []);\r\n\r\n return useMemo(() => {\r\n return (\r\n
\r\n {/* */}\r\n\r\n \r\n\r\n {\r\n newsItems.map(X => ())\r\n }\r\n\r\n\r\n\r\n {/* \r\n \r\n */}\r\n \r\n \r\n
\r\n );\r\n }, [newsItems]);\r\n}\r\n\r\n\r\nexport const AnnouncementLine = ({ newsItem, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n const { chartagentNewsID, title, startDate } = newsItem;\r\n const to = `/news/${chartagentNewsID}`;\r\n const isSelected = selected === true;\r\n // const posted = Date.parse(startDate).toLocaleString();\r\n const posted = ();\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }, [newsItem]);\r\n}\r\n\r\nexport default AnnouncementSummary;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Typography, List } from '@material-ui/core';\r\nimport { AnnouncementLine } from './AnnouncementSummary';\r\nimport ContentColumn from '../Custom/ContentColumn';\r\nimport Loading from '../Misc/Loading';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\n\r\nconst NewsList = ({ match }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n const selectedID = +match.params.newsID;\r\n const loaded = Boolean(newsItems.length);\r\n\r\n // console.log(selectedID)\r\n\r\n useEffect(() => {\r\n globalActions.getAnnouncements();\r\n }, []);\r\n \r\n// console.log(newsItems.length)\r\n return (\r\n {/*} Removed loaded={loaded} */}\r\n {/*
\r\n {`News & Announcements`}\r\n
*/}\r\n\r\n
\r\n {\r\n loaded ? (\r\n \r\n {\r\n newsItems.map(X => ())\r\n }\r\n \r\n ) :
No news to display
\r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NewsList\r\n","import React from 'react'\r\nimport { Link, Route } from \"react-router-dom\";\r\n\r\n// Matrial UI support files\r\nimport { ListItem, ListItemText, Divider, Card } from \"@material-ui/core\";\r\n\r\n// Global Support Files\r\nimport Menu from '../../Global/Data/Menu';\r\n\r\n// Content Files\r\nimport NewsList from './News/NewsList';\r\n\r\n//Alert/Status Message Dialog\r\nimport StatusMessage from './StatusMessage';\r\n\r\n// CSS Files\r\nimport homeStyling from './CSS/HomeStyles.module.css';\r\n\r\n/*\r\nNOTES:\r\n\r\nTODOs:\r\nModify Popup message to a dynamic load from a remote/seperate modifiable file\r\n\r\n*/\r\n// const showStatus = 0;\r\n// Construct popup Message\r\nconst msgTitle = \"Development Notice!!!\";\r\nconst msgBody = \"Development is ongoing and you may every now and then see weird stuff or the page reloading. Do not panic! smile! Development is in progress!!! :) Click Me \";\r\nconst msgBtnTitle = \"Learn More\";\r\nconst msgBtbLink = \"/help\";\r\n\r\n\r\nconst MyHome = () => {\r\n return(\r\n \r\n {/* (window.location.pathname+window.location.search == \"/home?mv\") ? : null */}\r\n
\r\n

News & Announcements

\r\n \r\n
\r\n
\r\n \r\n {/* */}\r\n \r\n \r\n
\r\n
\r\n
\r\n

What Do You Want To Do?

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


\r\n\r\n {Menu.map(mainMenu => {\r\n if (mainMenu.subItems){\r\n return (
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
);\r\n }\r\n \r\n })}\r\n








\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default MyHome","import React from 'react'\r\n\r\n// Maetrial UI support files \r\nimport { ExpansionPanel, ExpansionPanelSummary, ExpansionPanelDetails, Typography } from \"@material-ui/core\";\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst UserManual = () => {\r\n return(\r\n \r\n \r\n
\r\n

ChartTrack Application Manual

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

Colour Key

\r\n

Following colour key is used throughout the ShipManager site:

\r\n

Green: Good\r\n
Yellow: Warning\r\n
Red: Issue\r\n
Grey: Neutral/Not applicable

\r\n

For more information on the colour key used for a specific section, please go to the Help information of that section.

\r\n

Home

\r\n

Provides a high-level overview of your account and fleet.\r\n
Shows functions grouped per module and lets you navigate easily.

\r\n

News & Announcements

\r\n

General announcements from your chart agent, system maintenance, product updates, ...\r\n
Click on any item to see full details.

\r\n

Order Management

\r\n

All order related information and actions.

\r\n

Quotations to approve

\r\n

Provides the possibility to approve and reject quotes sent to you by your chart agent.

\r\n

\r\n \"Quote The status circle in the header shows the total number of items and the status of the items.

\r\n

Colour key:\r\n
Green: Item has been approved.\r\n
Red: Item has been rejected.\r\n
Grey: Still to approve/reject.

\r\n

Select the vessel whose quotations you want to approve, and then select the quotation. Click on an item in the list for details and to zoom to the selected item on the map. Once all items have been approved/rejected, click the <Confirm> button. You will be able to change your reference, if necessary, before sending the order through for processing. Please note the order will be processed immediately after confirmation, this can't be undone!

\r\n

Create new order

\r\n

Allows you to create new orders. Orders can be created from routes, existing baskets or quotes, the catalogue, and any mix of these.\r\n
Select the vessel fpr which you want to order, select the source for your orders (route, basket, quote, catalogue), review and confirm.\r\n
You can create and save routes, upload basket files, select existing quotes to select items from. Once you add your selected items to the basket, the srouce for your items will reset and you can add more items by selecting another source.\r\n
Durarions and quantities can be set during basket review.\r\n
An order reference must be set before final confirmation.

\r\n

Please note the order will be processed immediately after confirmation, this can't be undone!

\r\n

Order history

\r\n

Provides an overview of the order history for the current and previous year for each vessel.

\r\n

\r\n \"OrderStatus circle indicates the total number of items in the order and order status for each item.

\r\n

Colour key:\r\n
Grey: Your chart agent has received your order.\r\n
Red: Item(s) on backorder.\r\n
Yellow: Item(s) shipped.\r\n
Green: Item(s) delivered.

\r\n

Clicking any order in the list shows the order details and status per item.

\r\n

Flat Fee contracts

\r\n

Provides an overview of your running flat fee contracts, if you have any.

\r\n

Select the vessel whose flat fee contracts you wish to see. Select a contract to see what orders were placed within the contract. Select an order to see the items in it.

\r\n

Shipment tracking

\r\n

Shows status of all your shipments.

\r\n

Select the vessel whose shipments you want to see. Click any shipment to see the items in it. If available, the tracking link \r\n \"Track will open the transport company's tracking website showing actual status of your shipment.

\r\n

AVCS Online

\r\n

Allows you to contact your chartagent to activate an AVCS Online subscription.\r\n
If you have an active AVCSO subscription, allows you to order individual AVCSO cells.

\r\n

Fleet Management

\r\n

Complete overview of your fleet with compliance issues & warnings.

\r\n

Fleet Holdings

\r\n

Fleet Status

\r\n

Fleet Tracking

\r\n

Allows you to contact your chartagent to activate fleet tracking for all your vessels.\r\n
If you have fleet tracking activated, your vessels can be shown on the map, with tracking details.

\r\n

Fleet overview

\r\n

shows a per-vessel overview of your entire fleet. Selecting any vessel shows you full details.\r\n
Certificate of enrolment and ChartTrack Navigator license can be downloaded and sent to vessel here.

\r\n

Navigator Updates

\r\n

Shows last Navigator update for all your vessels.\r\n
Selecting a vessels shows details about their updates.

\r\n

Colour key:\r\n
Grey: Vessel does not use ChartTrack Navigator.\r\n
Red: Vessel has not updates in over 2 weeks.\r\n
Yellow: Vessel has not updated in over 1 week.\r\n
Green: Vessel has updated within the last week.

\r\n

Help

\r\n

Opens this help page.

\r\n

Profile & Users

\r\n

Manage your profile and your users.

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Colour key:
GreenNo issues or warnings, completely up to date.
YellowPaper products: An edition, correction or updates is out of date, but no more than 1 week.\r\n
Digital licenses: Licenses are renewable.
RedPaper products: An edition, correction or updates is more than 1 week out of date.\r\n
Digital licenses: Licenses have expired but are still in their grace period or have been deprecated.
Update information:
Overview of the updating behaviour of the vessels in your fleet.\r\n
(relevant for vessels using Navigator only)
Colour key:
GreenVessel is updating on a weekly basis.
YellowVessel hasn't updated for a week.
RedVessel hasn't updated for more than a week
GreyVessel is not using Navigator.
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Quotations to approve

\r\n
\r\n

\r\n Provides the possibility to approve and reject quotes sent to you by your chart agent.\r\n

\r\n
 
\r\n \"\"\r\n
The status circle in the header shows the total number of items and the status of the items.
\r\n
Colour key:
GreenItem has been approved.
RedItem has been rejected.
GreyStill to approve/reject.
Click on an item in the list for details and to zoom to the selected item on the map.\r\n
\r\n
Once all items have been approved/rejected, click the \"Order\" button.\r\n
You will be able to change your reference, if necessary, before confirming the order.\r\n
\r\n

Please note the order will be processed immediately after confirmation, this can't be undone!

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

Create new order

\r\n
\r\n

\r\n Provides the possibility to create new orders.\r\n

\r\n
 
\r\n \"\"\r\n
The status circle in the header shows the total number of items and the status of the items.
\r\n
Colour key:
GreenItem has been approved.
RedItem has been rejected.
GreyStill to approve/reject.
Click on an item in the list for details and to zoom to the selected item on the map.\r\n
\r\n
Once all items have been approved/rejected, click the \"Order\" button.\r\n
You will be able to change your reference, if necessary, before confirming the order.\r\n
\r\n

Please note the order will be processed immediately after confirmation, this can't be undone!

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

Vessels

\r\n
\r\n

\r\n Provides detailed information about the vessels in your fleet.\r\n

\r\n
 
\r\n \"\"\r\n
Provides inventory and status information for all your vessels.\r\n
The status circles indicate the total number of items in inventory (per vessel or per product) and their status.
\r\n
Colour key:
GreenItem/Update status are completely up to date.
YellowFor paper products: Item/Update status is out of date, but no more than 1 week.\r\n
For Digital licenses: License is renewable or update status is out of date, but no more than 1 week.
RedFor paper products: Item/Update status is out of date, for more than 1 week.\r\n
For Digital licenses: Licenses have expired but are still in their grace period, have been deprecated or update status is out of date, for more than 1 week.
Click a vessel in the list to get detailed information on the vessel.\r\n
Click a product type in the list to see the items in inventory and their status.
\r\n \"\"\r\n
Click on an item in the list for details and to zoom to the selected item on the map.
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Order History

\r\n
\r\n

\r\n Provides an overview of the full order history for each vessel.\r\n

\r\n
 
\r\n \"\"\r\n
Status circle indicates the total number of items in the order and order status for each item.
\r\n
Colour key:
GreyYour chart agent has received your order.
RedItem(s) on backorder.
YellowItem(s) shipped.
GreenItem(s) delivered.
Clicking any order in the list shows the order details and status per item.
\r\n \"\"\r\n
Click on an item in the list for details and to zoom to the selected item on the map.
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Account

\r\n
\r\n

\r\n Provides a way to manage user accounts.\r\n

\r\n
 
Profile: Allows you to change your e-mail and password.\r\n
Users: Admin users also have the possibility to add and remove other users for your account, and assign Shipmanger modules access.
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default UserManual","const FAQs = \r\n {\r\n Account: [\r\n { \r\n ID: 1,\r\n Active: true, // Bolean\r\n Question: \"Why Can't I log into my account on more than one device?\",\r\n Answer: \"The Ship manager system involves very sensitive data that needs to be accessed on a per need base. The system keeps logs of all activities and as such logs must be tagged to a user. and a user can only use one system at a time.\",\r\n },\r\n { \r\n ID: 2,\r\n Active: true, // Bolean\r\n Question: \"Can I add users?\",\r\n Answer: \"Yes! But you would need to be an administrator with 'Create User' Permissions from your company\",\r\n },\r\n { \r\n ID: 1,\r\n Active: true, // Bolean\r\n Question: \"I have approved an order but vessel has not received data\",\r\n Answer: \"This could be as a result of the vessel not having all installations completed.\",\r\n },\r\n ],\r\n }\r\n\r\nexport default FAQs\r\n\r\n","import React from 'react'\r\n\r\n// Maetrial UI support files\r\nimport { ExpansionPanel, ExpansionPanelSummary, ExpansionPanelDetails, Typography } from \"@material-ui/core\";\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nimport FAQFile from '../../../Global/Data/FAQs';\r\n\r\nconst FAQs = () => {\r\n return(\r\n \r\n \r\n
\r\n

Frequently Asked Questions

\r\n {FAQFile.Account.map(FAQ => (\r\n \r\n } aria-controls=\"panel1a-content\" id=\"panel1a-header\">\r\n {FAQ.Question}\r\n \r\n \r\n \r\n {FAQ.Answer}\r\n \r\n \r\n \r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default FAQs","import React from 'react'\r\n\r\n// Maetrial UI support files\r\nimport { ExpansionPanel, ExpansionPanelSummary, ExpansionPanelDetails, Typography } from \"@material-ui/core\";\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst ContactUs = () => {\r\n return(\r\n \r\n \r\n
\r\n

So you still want to contact us?

\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ContactUs","import React from 'react'\r\n\r\n// Maetrial UI support files\r\nimport { Typography, Divider, Button, ButtonGroup } from \"@material-ui/core\";\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nconst HelpStatement = () => {\r\n return(\r\n \r\n \r\n
\r\n
\r\n

We Love to Support!

\r\n \r\n \r\n We know how important support is to every business. So we have taken time to provide you with a lot of information on our systems and answers to Frequently Asked Questions.\r\n

Please do take your time to go through. Your answer might just there. If its not, feel free to contact us. We are always ready to help and improve on our support.

\r\n
\r\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 HelpStatement","import React from 'react'\r\nimport { BrowserRouter as Router, Switch, Route, Link, useHistory, Redirect } from \"react-router-dom\";\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from './Navigation/Breadcrumb';\r\n\r\n//Import Support Files\r\nimport UserManual from './Help/UserManual';\r\nimport FAQs from './Help/FAQs';\r\nimport ContactUs from './Help/ContactUs';\r\nimport HelpStatement from './Help/HelpStatement';\r\n\r\n\r\n\r\nconst Help = () => {\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\nexport default Help","import React, { useState } from 'react';\r\nimport { Paper, InputBase, IconButton, Divider, TextField } from '@material-ui/core';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n//import FilterIcon from '@material-ui/icons/FilterList';\r\nimport SwapVertIcon from '@material-ui/icons/SwapVert';\r\n// import _ from 'lodash';\r\n\r\nconst SearchFilter = ({ placeholder, onSearch, onSort }) => {\r\n\r\n const [, setState] = useState('');\r\n const [sort, setSort] = useState(1);\r\n\r\n const hasSorting = !!onSort;\r\n\r\n\r\n const handleOnSearch = (e) => {\r\n // console.log('e', e.target.value);\r\n const val = e.target.value;\r\n setState(() => setState(val));\r\n onSearch(val);\r\n }\r\n\r\n const handleOnSort = () => {\r\n // const val = e.target.value;\r\n setSort((prev) => {\r\n\r\n const val = prev * -1;\r\n // console.log('sort', val);\r\n if (!!onSort)\r\n onSort(val);\r\n\r\n return val;\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 hasSorting && (\r\n \r\n \r\n handleOnSort()}>\r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default SearchFilter;\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Divider, Link, makeStyles } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n// import _ from 'lodash';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n listItem: {\r\n // backgroundColor: '#e9edf7',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst ListItemVessel = ({ vessel, subText, number, numberSmall, open, subSelectedID, children, setOpen, onClick, statusComponent, linkTo, selected }) => {\r\n const classes = useStyles();\r\n\r\n return useMemo(() => {\r\n\r\n const handleClick = () => {\r\n\r\n if (onClick) {\r\n onClick(vessel.vesselID);\r\n }\r\n\r\n\r\n if (children) {\r\n setOpen(!open);\r\n }\r\n\r\n }\r\n // convert names to upper\r\n let vesselName = vessel.vesselName;\r\n vesselName = vesselName.toUpperCase();\r\n const listItem = (\r\n \r\n {/* */}\r\n \r\n\r\n {\r\n number ? : null\r\n }\r\n\r\n {\r\n numberSmall ? : null\r\n }\r\n\r\n {\r\n statusComponent ? statusComponent : null\r\n }\r\n\r\n {\r\n children ? (open === true ? : ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n {\r\n linkTo ? {listItem} : listItem\r\n }\r\n\r\n {\r\n children ? children : null\r\n }\r\n \r\n );\r\n }, [vessel, number, subText, numberSmall, subSelectedID, open, selected]);\r\n\r\n};\r\n\r\nexport default ListItemVessel;\r\n","import React, { useMemo } from 'react';\r\nimport './OrderStatus.scss';\r\n\r\nconst OrderStatus = ({ order }) => {\r\n\r\n // console.log('OrderStatus', order);\r\n\r\n const { openQuantity, backOrderQuantity, deliveredQuantity, shippedQuantity, totalQuantity } = order;\r\n\r\n\r\n // console.log('OrderStatus', order);\r\n\r\n return useMemo(() => {\r\n\r\n const total = totalQuantity;\r\n const percentageOpen = (openQuantity > 0 ? openQuantity / total : 0) * 100;\r\n const percentageBackorder = (backOrderQuantity > 0 ? backOrderQuantity / total : 0) * 100;\r\n const percentageShipped = (shippedQuantity > 0 ? shippedQuantity / total : 0) * 100;\r\n const percentageDelivered = (deliveredQuantity > 0 ? deliveredQuantity / total : 0) * 100;\r\n\r\n const degreesOpen = Math.ceil((percentageOpen * 360) / 100);\r\n const degreesBackorder = Math.ceil((percentageBackorder * 360) / 100);\r\n const degreesShipped = Math.ceil((percentageShipped * 360) / 100);\r\n const degreesDelivered = Math.ceil((percentageDelivered * 360) / 100);\r\n\r\n const tooltip = \"Open: \" + openQuantity + \"\\n\" +\r\n \"Backorder: \" + backOrderQuantity + \"\\n\" +\r\n \"Shipped: \" + shippedQuantity + \"\\n\" +\r\n \"Delivered: \" + deliveredQuantity + \"\\n\\n\" +\r\n \"Total: \" + totalQuantity;\r\n\r\n const val = [\r\n {\r\n id: 1,\r\n start: 0,\r\n length: degreesOpen\r\n },\r\n {\r\n id: 2,\r\n start: degreesOpen,\r\n length: degreesBackorder\r\n },\r\n {\r\n id: 3,\r\n start: degreesOpen + degreesBackorder,\r\n length: degreesShipped\r\n },\r\n {\r\n id: 4,\r\n start: degreesOpen + degreesShipped + degreesBackorder,\r\n length: degreesDelivered\r\n },\r\n ];\r\n\r\n // console.log('val', val);\r\n\r\n return (\r\n
\r\n {\r\n val.map(X => (
180 ? \"pie-order big\" : \"pie-order\"} data-start={X.start} data-value={X.length}>
))\r\n }\r\n

{totalQuantity}

\r\n
\r\n )\r\n\r\n }, [openQuantity, backOrderQuantity, deliveredQuantity, shippedQuantity, totalQuantity])\r\n\r\n\r\n}\r\n\r\nexport default OrderStatus\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport OrderStatus from '../../Widgets/OrderStatus';\r\n// import QuoteStatus from '../../Widgets/QuoteStatus';\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n // listItem: {\r\n // backgroundColor: '#e9edf7',\r\n // textDecoration: 'none',\r\n // },\r\n});\r\n\r\nconst ListItemSub = ({ mainText, subText, number, selected, linkTo, statusComponent }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n {/* */}\r\n {number ? : null}\r\n\r\n {statusComponent ? statusComponent : null}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport const ListItemSubQuote = ({ quote, selected }) => {\r\n // console.log('quote', quote);\r\n return useMemo(() => {\r\n // console.log('quote selected 2', selected);\r\n const mainText = `${quote.reference} [${quote.customerReference}]`;\r\n const subText = `${quote.quoteDate + \" - \"} Total: ${quote.currency} ${(quote.totalPrice || '').toFixed(2)}`;\r\n const to = `/sales/quotes/${quote.salesQuoteID}`;\r\n const number = quote.lineCount;\r\n return (} \r\n />);\r\n\r\n }, [quote, selected])\r\n}\r\n\r\nexport const ListItemSubOrder = ({ order, selected }) => {\r\n // console.log('order selected 1', selected);\r\n return useMemo(() => {\r\n // console.log('order selected 2', selected);\r\n const mainText = `${order.reference} [${order.customerReference}]`;\r\n const subText = `${order.orderDate + \" - \"} Total: ${order.currency} ${order.totalPrice.toFixed(2)}`;\r\n\r\n const to = `/sales/orders/${order.salesOrderID}`;\r\n const number = null;\r\n return (\r\n }\r\n />);\r\n\r\n }, [order, selected])\r\n}\r\n\r\n\r\nexport const ListItemSubShipment = ({ shipment, selected }) => {\r\n // console.log('shipment selected 1', selected);\r\n return useMemo(() => {\r\n // console.log('shipment selected 2', selected);\r\n const mainText = `${shipment.reference} [${shipment.customerReference}]`;\r\n const subText = `${shipment.salesShipmentStatus}`;\r\n\r\n const to = `/sales/shipments/${shipment.salesShipmentID}`;\r\n const number = shipment.lineCount;\r\n return ();\r\n\r\n }, [shipment, selected])\r\n}\r\n\r\n\r\nexport const ListItemSubFlatFeeContract = ({ flatFeeContract, selected }) => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const { vesselFlatFeePeriodID, startDate, endDate, description, price, currencyID } = flatFeeContract;\r\n const currency = globalActions.getCurrency(currencyID).code;\r\n\r\n // console.log('order selected 2', selected);\r\n const mainText = description;\r\n const subText = `${startDate.split('T')[0]} to ${endDate.split('T')[0]} [${currency} ${price}]`;\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}`;\r\n const number = null;\r\n\r\n return ();\r\n\r\n }, [flatFeeContract, selected])\r\n}\r\n\r\nexport default ListItemSub;\r\n","import React, { useEffect } from 'react';\r\nimport { Collapse, List } from '@material-ui/core';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubQuote } from '../../_StyledComponents/ListItemSub';\r\nimport _ from 'lodash';\r\n// import storage from 'store';\r\n\r\nconst VesselQuotes = ({ vesselQuotes, selectedID }) => {\r\n\r\n const key = `VQL${vesselQuotes.vesselID}`;\r\n const openLoad = JSON.parse(sessionStorage.getItem(key)) || false;\r\n\r\n // console.log('selectedID', selectedID);\r\n\r\n const [open, setOpen] = React.useState(openLoad);\r\n useEffect(() => { sessionStorage.setItem(key, open); }, [open]);\r\n\r\n const quotes = _.orderBy(vesselQuotes.approvals, ['reference'], ['desc']);\r\n return (\r\n // \r\n \r\n\r\n \r\n \r\n {\r\n // quotes.map(X => ())\r\n quotes.map(X => ())\r\n }\r\n \r\n \r\n\r\n \r\n // \r\n );\r\n};\r\n\r\n\r\n// const VesselQuote = ({ quote, selected }) => {\r\n\r\n// const to = `/sales/quotes/${quote.salesQuoteID}`;\r\n// // const price = _.sumBy(quote.lines, 'linePrice').toFixed(2);\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\nexport default VesselQuotes;\r\n","import React, { useEffect } from 'react';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport VesselQuotes from './VesselQuotes';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { List, Divider } from '@material-ui/core';\r\n\r\nconst Quotes = ({ match }) => {\r\n const [saleState, salesActions] = useSaleStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const selectedID = +match.params.id || 0;\r\n\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getVesselQuotes();\r\n }, []\r\n );\r\n\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n\r\n const loaded = Boolean(saleState.vesselQuotes);\r\n\r\n let vessels = loaded ?\r\n saleState.vesselQuotes.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())}\r\n onSort={(S) => setSort(() => S)}\r\n />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Quotes;\r\n","import React from 'react';\r\nimport { Link as RouterLink} from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, Link, Grid } from '@material-ui/core';\r\n\r\nconst VesselQuoteLineDetailHeader = ({ line, closePath, next, before }) => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n {line.item.itemTitle}\r\n \r\n */}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default VesselQuoteLineDetailHeader\r\n","import React, { useMemo } from 'react';\r\nimport { Button } from '@material-ui/core';\r\nimport { useSaleStore } from '../../Global/Stores/saleStore';\r\n\r\nconst QuoteLineStatusButton = ({ line, activeValue, text }) => {\r\n\r\n const [, salesActions] = useSaleStore();\r\n\r\n return useMemo(() => {\r\n\r\n const setValidation = () => {\r\n if (line.validationID !== activeValue) {\r\n // console.log('Setvalidation', line.salesQuoteLineID);\r\n salesActions.validateSalesQuoteLine(line.salesQuoteLineID, activeValue);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n\r\n }, [line, line.validationID])\r\n\r\n\r\n};\r\n\r\nexport default QuoteLineStatusButton;\r\n","import React from 'react';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport { Typography, TableFooter } from '@material-ui/core';\r\nimport QuoteLineStatusButton from '../../../../Widgets/QuoteLineStatusButton';\r\n\r\nconst VesselQuoteLineDetailList = ({ productGroup, line }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Number:\r\n {line.item.itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {line.item.itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {String(line.item.editionDate).split(' ')[0]}\r\n \r\n\r\n \r\n Quantity:\r\n {line.quantity}\r\n \r\n\r\n \r\n Duration:\r\n {`${line.duration || 'N/A'}`}\r\n \r\n\r\n \r\n Price:\r\n {`${line.currency} ${line.linePrice}`}\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n {/*
Group
\r\n
Number
\r\n
\r\n
Price
\r\n
\r\n
Total
\r\n
Duration
*/}\r\n
\r\n );\r\n};\r\n\r\nexport default VesselQuoteLineDetailList;\r\n","import React, { useMemo } from 'react';\r\nimport { Dialog } from '@material-ui/core';\r\nimport VesselQuoteLineDetailHeader from './VesselQuoteLineDetailHeader';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport VesselQuoteLineDetailList from './VesselQuoteLineDetailList';\r\nimport _ from 'lodash';\r\n// import LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport FloatingMenuButton from '../../../Navigation/FloatingMenuButton';\r\nimport MapControl from '../../../../MapControl/MapControl';\r\n\r\nconst VesselQuoteLineDetail = ({ match }) => {\r\n\r\n const [open, setOpen] = React.useState(true);\r\n \r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n \r\n\r\n const [saleState,] = useSaleStore();\r\n\r\n const salesQuoteID = +match.params.id;\r\n const salesQuoteLineID = +match.params.lineID;\r\n\r\n return useMemo(() => {\r\n\r\n // if (!saleState.quoteDetail || !saleState.quoteDetail.quote) return null;\r\n\r\n const loaded = Boolean(_.get(saleState, 'quoteDetail.quote', false));\r\n\r\n const currentLine = loaded ? saleState.quoteDetail.quote.lines.find(X => X.salesQuoteLineID === salesQuoteLineID) : null;\r\n\r\n // if (!currentLine) return null;\r\n\r\n\r\n const productGoup = loaded ? saleState.quoteDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n\r\n const quoteLines = _.get(saleState, 'quoteDetail.quote.lines', []);\r\n const lines = _.orderBy(quoteLines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n const lineCount = lines.length;\r\n const SQLID_Array = lines.map(X => X.salesQuoteLineID);\r\n const index = _.indexOf(SQLID_Array, salesQuoteLineID);\r\n\r\n const before = SQLID_Array[(lineCount + index - 1) % lineCount];\r\n const next = SQLID_Array[(index + 1) % lineCount];\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {/* */}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }, [saleState.quoteDetail, salesQuoteLineID])\r\n\r\n\r\n};\r\n\r\nexport default VesselQuoteLineDetail;\r\n","import React from 'react';\r\nimport { IconButton } from '@material-ui/core';\r\nimport MailIcon from '@material-ui/icons/MailOutline';\r\n\r\nfunction MailTo({ vessel }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport function MailOrderDetailTo({ orderDetail }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport function MailQuoteDetailTo({ quoteDetail }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport function MailHoldingDetailTo({ vessel }) {\r\n \r\n // console.log('MailHoldingDetailTo', vessel);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MailTo;\r\n","import React from 'react';\r\nimport { IconButton, SvgIcon } from '@material-ui/core';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport http, { getToken } from '../../../Global/Services/httpService'\r\n\r\nconst DownloadFile = ({ to, disabled }) => {\r\n\r\n const btn = (\r\n \r\n \r\n \r\n );\r\n\r\n return disabled ? btn : (\r\n \r\n {btn}\r\n \r\n );\r\n};\r\n\r\n\r\nexport const DownloadQuote = ({ salesQuoteID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const DownloadOrder = ({ salesOrderID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const DownloadHoldings = ({ vesselID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nexport const OpenShipment = ({ to, disabled }) => {\r\n\r\n // console.log('OpenShipment', to);\r\n\r\n const btn = (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n return disabled ? btn : (\r\n \r\n {btn}\r\n \r\n );\r\n};\r\n\r\nexport default DownloadFile;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport { IconButton, Divider, ListItemText, Grid } from '@material-ui/core';\r\nimport { MailQuoteDetailTo } from '../../../Misc/MailTo';\r\nimport { DownloadQuote } from '../../../Misc/DownloadFile';\r\n\r\nconst QuoteDetailHeader = ({ quoteDetail, history }) => {\r\n\r\n if (!quoteDetail || !quoteDetail.quote) return null;\r\n\r\n const { quote } = quoteDetail;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n    \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(QuoteDetailHeader);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport red from '@material-ui/core/colors/red';\r\nimport green from '@material-ui/core/colors/green';\r\nimport { Switch } from '@material-ui/core';\r\n\r\nconst PurpleSwitch = withStyles({\r\n switchBase: {\r\n color: red[300],\r\n '&$checked': {\r\n color: green[500],\r\n },\r\n '&$checked + $track': {\r\n backgroundColor: green[500],\r\n },\r\n },\r\n checked: {},\r\n track: {},\r\n})(Switch);\r\n\r\nconst ValidationWidget = ({ validationID, onChange }) => {\r\n\r\n const check = validationID === 1;\r\n\r\n const handleChange = (e) => {\r\n e.preventDefault();\r\n // console.log('handleChange', check);\r\n onChange(check === true ? 2 : 1);\r\n }\r\n\r\n return (\r\n //
\r\n \r\n //
\r\n );\r\n};\r\n\r\nexport default ValidationWidget;\r\n","import React, { useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, ListItemSecondaryAction, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ValidationWidget from '../../../Misc/ValidationWidget';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash'\r\n\r\nconst QuoteDetailList = ({ selectedLineID, quoteDetail, salesActions }) => {\r\n\r\n //console.log('quoteDetail', quoteDetail)\r\n\r\n const [OpenGroups, setOpenGroups] = useState((quoteDetail ? quoteDetail.productGroups.map(X => X.productGroupID) : []));\r\n\r\n if (!quoteDetail || !quoteDetail.quote) return null;\r\n\r\n\r\n // console.log('quoteDetail', quoteDetail);\r\n\r\n // const quote = quoteDetail.quote;\r\n // const productGroups = quote.productGroups;\r\n\r\n\r\n const toggleProductGroup = (productGroupID) => {\r\n setOpenGroups(prev => prev.includes(productGroupID) ? prev.filter(X => X !== productGroupID) : [...prev, productGroupID])\r\n }\r\n\r\n\r\n const { quote, productGroups } = quoteDetail;\r\n\r\n const lines = _.orderBy(quote.lines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n\r\n\r\n\r\n const headers = productGroups.map(X => {\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === X.productGroupID);\r\n const subTotal = _.sumBy(productgroupItems, 'linePrice').toFixed(2);\r\n const subTotalSelected = _.sumBy(productgroupItems.filter(X => X.validationID === 1), 'linePrice').toFixed(2);\r\n\r\n const open = OpenGroups.includes(X.productGroupID);\r\n return productgroupItems.length > 0 ? (\r\n \r\n\r\n toggleProductGroup(X.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n });\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\nconst QuoteLine = ({ line, onValidate, onSelect, selected }) => {\r\n\r\n // console.log('selected', selected);\r\n\r\n const handleValidation = (newValidation) => {\r\n // console.log('handleValidation', newValidation);\r\n onValidate(line.salesQuoteLineID, newValidation);\r\n };\r\n\r\n const handleSelection = () => {\r\n //console.log('onSelect', line.salesQuoteLineID);\r\n onSelect(line.salesQuoteLineID);\r\n };\r\n\r\n const to = `/sales/quotes/${line.salesQuoteID}/${line.salesQuoteLineID}`;\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 QuoteDetailList;\r\n","import React, { useEffect } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nexport default function FormDialog({ quote, active, salesActions }) {\r\n const [open, setOpen] = React.useState(false);\r\n const [reference, setReference] = React.useState(\"reference\");\r\n\r\n function handleClickOpen() {\r\n setOpen(true);\r\n }\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n }\r\n\r\n useEffect(() => {\r\n setReference(quote.customerReference);\r\n }, [quote.salesQuoteID])\r\n\r\n\r\n const handleReference = (e) => {\r\n // console.log('e.value', e.target.value);\r\n const val = e.target.value;\r\n setReference(() => val);\r\n }\r\n\r\n const handleConfirm = () => {\r\n\r\n const lines = quote.lines.map(X => (\r\n {\r\n accept: X.validationID === 1,\r\n salesQuoteLineID: X.salesQuoteLineID,\r\n }));\r\n\r\n const req = {\r\n vesselID: quote.vesselID,\r\n salesQuoteID: quote.salesQuoteID,\r\n reference: reference,\r\n lines: lines,\r\n }\r\n\r\n salesActions.confirmSalesQuote(req);\r\n \r\n handleClose();\r\n }\r\n\r\n return (\r\n \r\n \r\n Are you sure you want to confirm the quotation?\r\n \r\n If needed, you can change the reference before ordering below:\r\n \r\n Please note the order will be processed immediatly and can not be undone\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import React, { useMemo } from 'react';\r\nimport { Typography, Button} from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\r\nimport ConfirmButton from './QuoteConfirmation';\r\n\r\nconst QuoteDetailFooter = ({ quote, salesActions }) => {\r\n\r\n const subTotal = _.sumBy(quote.lines, 'linePrice').toFixed(2);\r\n\r\n const selectedLines = quote.lines.filter(X => X.validationID === 1);\r\n const subTotalSelected = _.sumBy(selectedLines, 'linePrice').toFixed(2);\r\n\r\n const complete = quote.lines.length === quote.lines.filter(X => (X.validationID || 0) > 0).length;\r\n\r\n // console.log('complete', complete);\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n    {`${quote.currency} ${subTotalSelected} / ${subTotal}`}\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }, [subTotalSelected, complete]);\r\n};\r\n\r\nexport default QuoteDetailFooter;\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport QuoteDetailHeader from './QuoteDetailHeader';\r\nimport QuoteDetailList from './QuoteDetailList';\r\nimport QuoteDetailFooter from './QuoteDetailFooter';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst VesselQuoteDetail = ({ match }) => {\r\n const salesQuoteID = +match.params.id;\r\n const selectedLineID = +match.params.lineID;\r\n // const [, mapActions] = useMapStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // console.log('props', props);\r\n // console.log(salesQuoteID); \r\n\r\n useEffect(\r\n () => {\r\n\r\n salesActions.getSalesQuote(salesQuoteID);\r\n\r\n return () => {\r\n salesActions.clearSalesQuote();\r\n }\r\n },\r\n [salesQuoteID]\r\n );\r\n\r\n const confirmed = _.get(saleState, 'saleState.quoteDetail.confirmed', false);\r\n if (confirmed === true)\r\n return ;\r\n\r\n const loaded = _.get(saleState, 'quoteDetail.quote.salesQuoteID', -1) === salesQuoteID;\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n


\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default VesselQuoteDetail;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\n////// Import Sales Quotes Support Files\r\nimport Quotes from './Quotes/Quotes';\r\nimport VesselQuoteLineDetail from './Quotes/VesselQuoteLineDetail/VesselQuoteLineDetail';\r\nimport VesselQuoteDetail from './Quotes/VesselQuoteDetail/VesselQuoteDetail';\r\n\r\n////// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\n\r\nconst QuotationsApprove = () => {\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\nexport default QuotationsApprove;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Typography, ListItem, ListItemIcon, List, ListItemText, Collapse, Chip, Link, ListItemSecondaryAction, IconButton, FormControl, Select, Input, MenuItem, Button } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nconst CatalogueBasketReview = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n const selectedItemID = +match.params.itemID || 0;\r\n\r\n useEffect(() => {\r\n basketActions.getBasketPrices();\r\n }, []);\r\n\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n\r\n const productGroups = _.get(globalState, 'catalogue.productGroups', []);\r\n const { basketLines, closedProductGroups, vesselID } = basketState;\r\n const listItems = basketLines || [];\r\n\r\n // console.log(itemsLoaded)\r\n\r\n if (listItems.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {/*
\r\n Basket Review\r\n
*/}\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n productGroups.map(PG => (\r\n Boolean(I.item) && I.item.productGroupID === PG.productGroupID)}\r\n selectedItemID={selectedItemID}\r\n open={!closedProductGroups.includes(PG.productGroupID)}\r\n toggleOpen={basketActions.toggleClosedProductGroups}\r\n />))\r\n }\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nconst BasketDurationSelector = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const allMonths = [3, 6, 9, 12];\r\n const { months } = basketState;\r\n\r\n return useMemo(() => {\r\n\r\n const durationChange = (e) => {\r\n const newMonths = +e.target.value;\r\n basketActions.setBasketDuration(newMonths);\r\n }\r\n\r\n return (\r\n    \r\n Set Duration(s):  \r\n \r\n
{`${X} Months`}
}\r\n onChange={durationChange}\r\n input={}\r\n >\r\n {\r\n allMonths.map(M => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n }, [months])\r\n}\r\n\r\n\r\nconst BasketProductGroupListHeader = ({ productGroup, vesselID, lines, selectedItemID, open, toggleOpen }) => {\r\n // console.log(productGroup)\r\n\r\n const { productGroupID, caption, isDigitalPoductGroup } = productGroup;\r\n if (lines.length === 0)\r\n return null;\r\n \r\n // console.log(productGroupID)\r\n \r\n return (\r\n \r\n toggleOpen(productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n \r\n \r\n {/* {console.log(lines)} */}\r\n {\r\n lines.map(X => )\r\n }\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BasketProductGroupListItem = ({ line, selected, isDigital, productID }) => {\r\n const [, basketActions] = useBasketStore();\r\n const { item, itemPrice, quantity, month } = line;\r\n const allMonths = [3, 6, 9, 12];\r\n \r\n const durationChange = (e) => {\r\n const newMonths = +e.target.value;\r\n basketActions.setBasketDuration(newMonths, item.itemID);\r\n // console.log('durationChange', months);\r\n }\r\n \r\n \r\n const months = itemPrice ? itemPrice.months : false;\r\n \r\n return useMemo(() => {\r\n const to = `${item.itemID}`;\r\n const label = isDigital ? (Boolean(months) ? `${months} Months` : null) : `x ${quantity}`\r\n console.log(productID)\r\n\r\n return (\r\n \r\n \r\n \r\n {productID === 1 ||\r\n productID === 2 ||\r\n productID === 5 ||\r\n productID === 6 ||\r\n productID === 7 ||\r\n productID === 8 ||\r\n productID === 9 ||\r\n productID === 10 ||\r\n productID === 11 ||\r\n productID === 12\r\n ?(Boolean(label) ? : null):\r\n \r\n
{`${X} Months`}
}\r\n onChange={durationChange}\r\n input={}\r\n >\r\n {\r\n allMonths.map(M => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
}\r\n\r\n \r\n {\r\n e.preventDefault();\r\n basketActions.removeBasketItems([item.itemID]);\r\n }}>\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n\r\n }, [item.itemID, selected, months, quantity])\r\n}\r\n\r\nconst BasketFooter = () => {\r\n\r\n const [globalState,] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const vesselID = basketState.vesselID;\r\n\r\n const months = basketState.months;\r\n const lineCount = basketState.basketLines.length;\r\n const validLines = basketState.basketLines.filter(X => Boolean(X.itemPrice));\r\n\r\n const validPrices = lineCount === validLines.length;\r\n\r\n const P = _.sumBy(basketState.basketLines, 'itemPrice.price');\r\n const QTY = _.sumBy(basketState.basketLines, 'quantity');\r\n\r\n return useMemo(() => {\r\n\r\n const totalValue = validPrices ? [] : [\"Calculating...\"];\r\n\r\n if (validPrices === true) {\r\n globalState.currencies.forEach(C => {\r\n\r\n const currencyLines = validLines\r\n .filter(P => P.itemPrice.currencyID === C.currencyID)\r\n .map(L => +((L.quantity * L.itemPrice.price).toFixed(2)));\r\n\r\n if (currencyLines.length > 0) {\r\n const currencyPrice = _.sum(currencyLines).toFixed(2);\r\n totalValue.push(`${currencyPrice} ${C.code}`);\r\n }\r\n });\r\n }\r\n\r\n const priceString = totalValue.join(\" + \");\r\n\r\n return (\r\n \r\n \r\n {`Total Price: ${priceString}`}\r\n \r\n\r\n \r\n \r\n );\r\n }, [vesselID, validPrices, months, validLines.length, P, QTY, basketActions]);\r\n};\r\n\r\n\r\nexport default CatalogueBasketReview;\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Divider, Link, makeStyles } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n// import _ from 'lodash';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n listItem: {\r\n // backgroundColor: '#e9edf7',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst ListItemVessel = ({ vessel, subText, number, numberSmall, open, subSelectedID, children, setOpen, onClick, statusComponent, linkTo, selected }) => {\r\n const classes = useStyles();\r\n\r\n return useMemo(() => {\r\n\r\n const handleClick = () => {\r\n\r\n if (onClick) {\r\n onClick(vessel.vesselID);\r\n }\r\n\r\n\r\n if (children) {\r\n setOpen(!open);\r\n }\r\n\r\n }\r\n //Convert to upper case\r\n const vesselName = vessel.vesselName.toUpperCase();\r\n\r\n const listItem = (\r\n \r\n {/* */}\r\n \r\n\r\n {\r\n number ? : null\r\n }\r\n\r\n {\r\n numberSmall ? : null\r\n }\r\n\r\n {\r\n statusComponent ? statusComponent : null\r\n }\r\n\r\n {\r\n children ? (open === true ? : ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n {\r\n linkTo ? {listItem} : listItem\r\n }\r\n\r\n {\r\n children ? children : null\r\n }\r\n \r\n );\r\n }, [vessel, number, subText, numberSmall, subSelectedID, open, selected]);\r\n\r\n};\r\n\r\nexport default ListItemVessel;\r\n","import React, { useMemo } from 'react';\r\nimport ListItemVessel from '../../../Desktop/_StyledComponents/ListItemVessel';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { List, Typography, Divider } from '@material-ui/core';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport _ from 'lodash';\r\n\r\nconst CatalogueSelectVessel = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const [globalState] = useGlobalStore();\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], ['asc']);\r\n\r\n //console.table(\"Vessels\", vessels);\r\n // console.log('vesselID', basketState.vesselID);\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n const vesselsLoaded = Boolean(vessels.length);\r\n const loaded = itemsLoaded && vesselsLoaded;\r\n\r\n const { vesselID } = basketState;\r\n\r\n return (\r\n\r\n \r\n {/*
\r\n Select a Vessel\r\n
*/}\r\n \r\n
\r\n \r\n {\r\n vessels.map(V => )\r\n }\r\n \r\n



\r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst CatalogueVesselListItem = ({ Vessel, BasketActions, Selected }) => {\r\n\r\n let history = useHistory();\r\n //console.log('basket VesselID', Selected);\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('basket VesselID', Selected);\r\n\r\n const handleVesselClick = (vesselID) => {\r\n // console.log('Vessel Click', Vessel, vesselID);\r\n BasketActions.setVessel(vesselID);\r\n history.push(`/sales/catalogue/${vesselID}`);\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n );\r\n\r\n }, [Vessel, Selected]);\r\n\r\n}\r\n\r\n\r\n\r\n\r\nexport default CatalogueSelectVessel;\r\n","import React from 'react'\r\nimport { Button, IconButton } from '@material-ui/core';\r\nimport PublishIcon from '@material-ui/icons/Publish';\r\n// const UploadButton = () => {\r\n// return (\r\n//
\r\n\r\n//
\r\n// )\r\n// }\r\n\r\n\r\nconst UploadButton = ({ text, FileSelected, accept }) => {\r\n // return (\r\n // \r\n // \r\n // {\r\n // const val = e.target.files;\r\n // FileSelected(val);\r\n // }} />\r\n // \r\n // );\r\n\r\n\r\n return (\r\n \r\n\r\n\r\n {\r\n const val = e.target.files;\r\n FileSelected(val);\r\n }} />\r\n \r\n );\r\n\r\n\r\n // return (\r\n // \r\n\r\n\r\n // {text} {\r\n // const val = e.target.files;\r\n // FileSelected(val);\r\n // }} />\r\n // \r\n // );\r\n\r\n}\r\n\r\nexport default UploadButton\r\n","import React, { useMemo } from 'react'\r\nimport httpService from '../../../Global/Services/httpService';\r\nimport UploadButton from './UploadButton';\r\n\r\nconst UploadBasketButton = ({ vesselID }) => {\r\n\r\n // const [, globalsActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const handleFileSelected = (file) => {\r\n const files = Array.from(file);\r\n\r\n //console.log('files', files);\r\n\r\n const formData = new FormData();\r\n formData.append(\"File\", files[0]);\r\n\r\n httpService.post(\"/api/catalogue/baskets/upload\", formData, { headers: { 'Content-Type': 'multipart/form-data' } })\r\n .then((result) => {\r\n\r\n const data = result.data;\r\n //console.log('Upload Basket Result', data);\r\n\r\n //const basketID = +result.data;\r\n //globalsActions.getBaskets();\r\n // history.push(`/sales/catalogue/${vesselID}/baskets/${basketID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [vesselID])\r\n}\r\n\r\nexport default UploadBasketButton\r\n","import React, { useMemo } from 'react';\r\nimport httpService from '../../../Global/Services/httpService';\r\nimport UploadButton from './UploadButton';\r\n\r\nconst UploadRouteButton = ({ vesselID }) => {\r\n\r\n // const [, globalsActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const handleFileSelected = (file) => {\r\n const files = Array.from(file);\r\n\r\n let formData = new FormData();\r\n formData.append(\"File\", files[0]);\r\n\r\n httpService.post(\"/api/catalogue/routes/upload\", formData, { headers: { 'Content-Type': 'multipart/form-data' } })\r\n .then((result) => {\r\n\r\n const data = result.data;\r\n //console.log('Upload Route Result', data);\r\n // const routeID = +result.data;\r\n // globalsActions.getRoutes();\r\n // history.push(`/sales/catalogue/${vesselID}/routes/${routeID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [vesselID])\r\n};\r\n\r\nexport default UploadRouteButton\r\n","import React from 'react';\r\nimport { CircularProgress } from '@material-ui/core';\r\n\r\n//Modified here in order to be able to use the loading for several other parts. \r\n// turns out it always comes in a pack of three. \r\n// Inasmuch as am a fan of free things... not this one! :D\r\nconst Loading = () => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst LoadingOne = () => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport Loading from '../Desktop/Misc/Loading';\r\nimport { useColumnStore } from '../../Global/Stores/columnStore';\r\nimport { useUserStore } from '../../Global/Stores/userStore';\r\n\r\nconst ContentColumn = ({ children, loaded, selectedID = null, access = false, disablePadding = false }) => {\r\n\r\n const [, columnActions] = useColumnStore();\r\n const [, userActions] = useUserStore();\r\n\r\n const [featureAccess, setFeatureAccess] = useState(false);\r\n\r\n const location = window.location.pathname;\r\n\r\n const id = selectedID === null ? new Date() : selectedID;\r\n\r\n useEffect(() => {\r\n const hasAccess = access || userActions.canAccessPath(window.location.pathname);\r\n setFeatureAccess(() => hasAccess);\r\n }, [])\r\n\r\n useEffect(() => {\r\n columnActions.addColumn(1);\r\n return () => {\r\n columnActions.addColumn(-1);\r\n };\r\n }, []);\r\n\r\n\r\n // console.log('location', window.location.pathname);\r\n\r\n const paddingClass = disablePadding === true ? 'disablePadding' : '';\r\n\r\n return useMemo(() => {\r\n // console.log('location', location);\r\n\r\n return featureAccess === true ? (\r\n \r\n {/* */}\r\n {loaded === true ? children : }\r\n \r\n ) : null;\r\n\r\n }, [loaded, featureAccess, location, id]);\r\n\r\n};\r\n\r\nexport default ContentColumn;\r\n","import React, { useState, useMemo } from 'react';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport { Box, Typography, List, Button, ListItemText, ListItem, ListItemSecondaryAction, IconButton, ListItemIcon, Checkbox, TextField } from '@material-ui/core';\r\nimport Select from 'react-select';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport _ from 'lodash';\r\nimport http from '../../../../../Global/Services/httpService';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\n\r\nconst RouteCreate = ({ match, history }) => {\r\n\r\n const [selectedPorts, setSelectedPorts] = useState([]);\r\n const [routingPoints, setRoutingPoints] = useState([]);\r\n const [routeName, setRouteName] = useState(\"\");\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n\r\n const vesselID = +match.params.vesselID;\r\n\r\n const { ports } = globalState.portInfo;\r\n\r\n const hasPorts = Boolean(ports);\r\n // if (!ports) return null;\r\n\r\n\r\n if (hasPorts && routingPoints.length === 0) {\r\n setRoutingPoints([...globalState.portInfo.routingPoints])\r\n }\r\n\r\n const AddPort = (port) => {\r\n setSelectedPorts(prev => [...prev, { ...port, id: Math.random() }]);\r\n }\r\n\r\n const DeletePort = (port) => {\r\n setSelectedPorts(prev => prev.filter(X => X.id !== port.id))\r\n }\r\n\r\n const ToggleRoutingPoint = (point) => {\r\n\r\n const rps = [...routingPoints];\r\n const p1 = rps.find(P => P.name === point.name);\r\n // console.log(p1.open);\r\n p1.open = !(Boolean(point.open));\r\n setRoutingPoints(() => rps)\r\n }\r\n\r\n\r\n\r\n const CreateRoute = () => {\r\n\r\n // console.log(\"Create Route\");\r\n const ports = selectedPorts.map(P => P.code);\r\n const routes = routingPoints\r\n .filter(P => P.open !== P.openByDefault)\r\n .map(P => P.shortCode);\r\n\r\n const result = {\r\n PortCodes: ports,\r\n RoutingCodes: routes,\r\n RouteName: routeName\r\n };\r\n\r\n http.post(`api/catalogue/routes/create`, result)\r\n .then(result => {\r\n const newRouteID = result.data;\r\n // console.log(\"Result.DATA\", newRouteID);\r\n globalActions.getRoutes();\r\n // history.push('/sales/catalogue/5994/routes/0');\r\n history.push(`/sales/catalogue/${vesselID}/routes/${newRouteID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n }\r\n\r\n const createDisabled = (selectedPorts.length < 2) || (routeName.length < 3)\r\n\r\n return (\r\n \r\n
\r\n Create new Route\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n \r\n\r\n
\r\n Route Name:\r\n {\r\n const val = X.target.value;\r\n setRouteName(() => val)\r\n }}\r\n margin=\"normal\"\r\n variant=\"outlined\"\r\n />\r\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 const PortList = ({ ports, AddPort, DeletePort, selectedPorts }) => {\r\n\r\n const [portFilterText, setPortFilterText] = useState(\"\");\r\n const portCount = selectedPorts.length;\r\n\r\n return useMemo(() => {\r\n\r\n if (!Boolean(ports))\r\n return null;\r\n\r\n const displayPorts = ports.filter(X => (X.name.toLowerCase().indexOf(portFilterText) !== -1));\r\n const canShowMenu = displayPorts.length > 50 ? false : undefined;\r\n\r\n const OnPortFilterChange = (filter) => {\r\n setPortFilterText(() => filter.toLowerCase());\r\n }\r\n\r\n return (\r\n
\r\n Add ports:\r\n X.name}\r\n getOptionValue={(X) => X}\r\n styles={{ width: '100%' }}\r\n className=\"basic-single\"\r\n classNamePrefix=\"select\"\r\n isSearchable={true}\r\n onInputChange={(X) => {\r\n OnPortFilterChange(X);\r\n }}\r\n menuIsOpen={canShowMenu}\r\n name=\"color\"\r\n value={\"\"}\r\n onChange={(X) => { AddPort(X) }}\r\n options={displayPorts}\r\n />\r\n\r\n \r\n {\r\n selectedPorts.map(P => (\r\n \r\n {P.name} - {P.locode}\r\n \r\n DeletePort(P)}>\r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n\r\n
\r\n );\r\n\r\n }, [portFilterText, portCount])\r\n\r\n}\r\n\r\n\r\nexport const RoutingList = ({ RoutingPoints, ToggleRoutingPoint }) => {\r\n\r\n const openPoints = RoutingPoints.filter(X => X.open === true).length;\r\n\r\n return useMemo(() => {\r\n // console.log(\"RoutingList\", RoutingPoints);\r\n return (\r\n
\r\n Avoid places:\r\n \r\n {\r\n RoutingPoints.map(P => (\r\n \r\n \r\n ToggleRoutingPoint(P)}\r\n />\r\n \r\n {P.name} - {P.shortCode}\r\n \r\n ))\r\n }\r\n\r\n \r\n
\r\n );\r\n\r\n }, [RoutingPoints, openPoints])\r\n\r\n}\r\n\r\nexport default RouteCreate;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Button, Dialog, DialogTitle, DialogContent, Typography, DialogActions, Box, TextField } from '@material-ui/core';\r\nimport AddSharpIcon from '@material-ui/icons/AddSharp';\r\nimport { PortList, RoutingList } from '../../Desktop/Sales/Catalogue/RouteCreate/RouteCreate';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport { useParams } from \"react-router\";\r\nimport httpService from '../../../Global/Services/httpService';\r\n\r\nconst CreateRouteButton = () => {\r\n\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst CreateRouteDialog = ({ open, handleClose }) => {\r\n\r\n return (\r\n \r\n Create new route\r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n )\r\n}\r\n\r\n\r\nconst CreateRoute = ({ handleClose }) => {\r\n\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n const [selectedPorts, setSelectedPorts] = useState([]);\r\n const [routingPoints, setRoutingPoints] = useState([]);\r\n const [routeName, setRouteName] = useState(\"\");\r\n\r\n const params = useParams();\r\n const vesselID = +params.vesselID;\r\n\r\n const ports = globalState.portInfo.ports;\r\n // const routingPointCount = routingPoints.length;\r\n\r\n const hasPorts = Boolean(ports);\r\n // if (!ports) return null;\r\n\r\n // console.log('globalState.portInfo.routingPoints', globalState.portInfo.routingPoints);\r\n const allRoutingPoints = globalState.portInfo.routingPoints;\r\n\r\n useEffect(() => {\r\n if (hasPorts) {\r\n setRoutingPoints([...allRoutingPoints])\r\n }\r\n }, [hasPorts, allRoutingPoints])\r\n\r\n\r\n const createDisabled = (selectedPorts.length < 2) || (routeName.length < 3);\r\n\r\n const AddPort = (port) => {\r\n setSelectedPorts(prev => [...prev, { ...port, id: Math.random() }]);\r\n }\r\n\r\n const DeletePort = (port) => {\r\n setSelectedPorts(prev => prev.filter(X => X.id !== port.id))\r\n }\r\n\r\n const ToggleRoutingPoint = (point) => {\r\n\r\n const rps = [...routingPoints];\r\n const p1 = rps.find(P => P.name === point.name);\r\n // console.log(p1.open);\r\n p1.open = !(Boolean(point.open));\r\n setRoutingPoints(() => rps)\r\n }\r\n\r\n const handleCreateRoute = () => {\r\n\r\n const ports = selectedPorts.map(P => P.code);\r\n const routes = routingPoints\r\n .filter(P => P.open !== P.openByDefault)\r\n .map(P => P.shortCode);\r\n\r\n const result = {\r\n PortCodes: ports,\r\n RoutingCodes: routes,\r\n RouteName: routeName\r\n };\r\n\r\n httpService.post(`api/catalogue/routes/create`, result)\r\n .then(result => {\r\n // const newRouteID = result.data;\r\n // console.log(\"Result.DATA\", newRouteID);\r\n globalActions.getRoutes();\r\n handleClose();\r\n // history.push('/sales/catalogue/5994/routes/0');\r\n // history.push(`/sales/catalogue/${vesselID}/routes/${newRouteID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n
\r\n Route Name:\r\n {\r\n const val = X.target.value;\r\n setRouteName(() => val)\r\n }}\r\n margin=\"dense\"\r\n variant=\"outlined\"\r\n />\r\n
\r\n\r\n\r\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 CreateRouteButton;\r\n","import React, { useMemo, useEffect, useRef } from 'react';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { Link as Link1 } from 'react-router-dom';\r\nimport { Typography, Box, ListItemText, Checkbox, List, ListItem, ListItemIcon, Button, Badge, Link, Divider, Grid } from '@material-ui/core';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport { useParams } from \"react-router\";\r\nimport { useCatalogueStore } from '../../../../Global/Stores/catalogueStore';\r\nimport { FixedSizeList } from 'react-window';\r\nimport _ from 'lodash';\r\nimport AutoSizer from \"react-virtualized-auto-sizer\";\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport UploadBasketButton from '../../../Widgets/Buttons/UploadBasketButton';\r\nimport UploadRouteButton from '../../../Widgets/Buttons/UploadRouteButton';\r\nimport CreateRouteButton from '../../../Widgets/Buttons/CreateRouteButton';\r\nimport MapControl from '../../../MapControl/MapControl';\r\n\r\n\r\nconst CatalogueSelectItems = () => {\r\n const [globalState] = useGlobalStore();\r\n const [, catalogueActions] = useCatalogueStore();\r\n const [, fleetActions] = useFleetStore();\r\n const pars = useParams();\r\n const vesselID = +pars.vesselID || 0;\r\n\r\n const { productGroups, productItemGroups, catalogue } = globalState;\r\n const loaded = Boolean(productGroups) && Boolean(productItemGroups) && Boolean(catalogue);\r\n\r\n useEffect (\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID)\r\n return () => {\r\n fleetActions.clearVesselHoldings();\r\n }\r\n }, [vesselID])\r\n\r\n useEffect(() => {\r\n catalogueActions.reset();\r\n catalogueActions.loadVesselItemIDs(vesselID);\r\n }, [vesselID]);\r\n\r\n\r\n return (\r\n \r\n {/*
\r\n Add Items to basket\r\n
*/}\r\n {/*
\r\n \r\n
*/}\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketItemsAddFrom = () => {\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\nconst SourceItems = () => {\r\n\r\n const ref = useRef(null);\r\n const [catalogueState,] = useCatalogueStore();\r\n const [fleetState,] = useFleetStore();\r\n const { itemSource, sourceLines, selectedItemIDs, vesselItemIDs, productGroup, productItemGroups } = catalogueState;\r\n\r\n const loadedHoldings = Boolean(fleetState.holdingDetailItems);\r\n\r\n const holdingItems = loadedHoldings ? fleetState.holdingDetailItems : []\r\n\r\n const pars = useParams();\r\n const focusedItemID = +pars.itemID || 0;\r\n\r\n const listItems = sourceLines.filter(X => productItemGroups.includes(X.productItemGroupID || 0));\r\n\r\n useEffect(() => {\r\n\r\n if (ref && ref.current && focusedItemID > 0) {\r\n const focusedIndex = _.findIndex(listItems, (I) => I.itemID === focusedItemID);\r\n ref.current.scrollToItem(focusedIndex);\r\n }\r\n }, [focusedItemID, listItems]);\r\n\r\n\r\n if (!itemSource || !productGroup)\r\n return null;\r\n\r\n const itemCount = listItems.length;\r\n\r\n return (\r\n
\r\n \r\n {\r\n ({ width, height }) => (\r\n\r\n \r\n \r\n {Row}\r\n \r\n \r\n\r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nconst Row = ({ data, index, style }) => {\r\n const [, catalogueActions] = useCatalogueStore();\r\n\r\n const { listItems, selectedItemIDs, vesselItemIDs, focusedItemID } = data;\r\n\r\n const I = listItems[index];\r\n const itemID = Boolean(I) ? I.itemID : 0;\r\n\r\n const focused = itemID === focusedItemID;\r\n const selected = selectedItemIDs.includes(itemID);\r\n const inInventory = vesselItemIDs.some(Y => Y.itemID === itemID);\r\n\r\n return React.useMemo(() => {\r\n\r\n\r\n const handleItemChecked = (id) => {\r\n catalogueActions.toggleSelectedItem(id);\r\n }\r\n\r\n return (\r\n \r\n { handleItemChecked(I.itemID, !selected) }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [itemID, selected, inInventory, focused]);\r\n};\r\n\r\n\r\nconst SourceSelector = () => {\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { itemSourceOptions, itemSource } = catalogueState;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n return useMemo(() => {\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n catalogueActions.setItemSource(id);\r\n };\r\n\r\n const value = itemSource ? itemSource.id : \"\";\r\n\r\n return (\r\n \r\n Add items from\r\n \r\n {\r\n itemSourceOptions.map(X => {X.caption})\r\n }\r\n \r\n \r\n );\r\n\r\n }, [itemSource, catalogueActions, labelWidth]);\r\n}\r\n\r\n\r\nconst SourceRecordSelector = () => {\r\n\r\n const pars = useParams();\r\n const vesselID = +pars.vesselID || 0;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { itemSource, sourceRecord } = catalogueState;\r\n\r\n return useMemo(() => {\r\n\r\n const sourceID = itemSource ? itemSource.id : 0;\r\n\r\n switch (sourceID) {\r\n case 1:\r\n return ();\r\n break;\r\n case 2:\r\n return ();\r\n break;\r\n case 3:\r\n return ();\r\n break;\r\n case 4:\r\n return ();\r\n break;\r\n default:\r\n return null;\r\n break;\r\n }\r\n }, [vesselID, itemSource, sourceRecord]);\r\n}\r\n\r\n\r\nconst BasketSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n const baskets = _.orderBy(globalState.baskets, [B => B.name.toLowerCase()]);\r\n const { sourceRecord } = CatalogueState;\r\n\r\n const selectedBasket = sourceRecord;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n const basketID = selectedBasket ? selectedBasket.sourceBasketID : 0;\r\n\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const basket = baskets.find(X => X.sourceBasketID === id);\r\n\r\n CatalogueActions.setSourceRecord(basket);\r\n\r\n // Set Items\r\n const itemIDs = basket.lines.map(X => X.itemID);\r\n const basketItems = items.filter(X => itemIDs.includes(X.itemID));\r\n CatalogueActions.setSourceLines(basketItems);\r\n };\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n\r\n \r\n Select a basket\r\n \r\n {\r\n basketID !== 0 ? null : Select a basket\r\n }\r\n {\r\n baskets.map(X => {X.name})\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n\r\n }, [labelWidth, baskets, selectedBasket, items, CatalogueActions, VesselID]);\r\n}\r\n\r\nconst QuoteSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n\r\n // Label\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n\r\n const selectedquote = CatalogueState.sourceRecord;\r\n const [vesselQuotes, setVesselQuotes] = React.useState([]);\r\n React.useEffect(() => {\r\n\r\n\r\n http.get(`/api/sales/vesselquotes/${VesselID}`)\r\n .then(result => {\r\n const quotes = result.data;\r\n setVesselQuotes(() => quotes);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n return setVesselQuotes(() => []);\r\n\r\n }, [VesselID, setVesselQuotes]);\r\n\r\n\r\n return useMemo(() => {\r\n const quoteID = selectedquote ? selectedquote.salesQuoteID : 0;\r\n\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const quote = vesselQuotes.find(X => X.salesQuoteID === id);\r\n\r\n CatalogueActions.setSourceRecord(quote);\r\n\r\n CatalogueActions.loadSalesQuoteItems(id);\r\n };\r\n\r\n return (\r\n \r\n Select a quote\r\n \r\n {\r\n quoteID !== 0 ? null : Select a quote\r\n }\r\n {\r\n vesselQuotes.map(X => {X.reference})\r\n }\r\n \r\n \r\n );\r\n\r\n }, [labelWidth, vesselQuotes, selectedquote, items, CatalogueActions]);\r\n\r\n}\r\n\r\nconst RouteSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n const routes = _.orderBy(globalState.routes, [B => B.name.toLowerCase()]);\r\n const { sourceRecord } = CatalogueState;\r\n\r\n const selectedroute = sourceRecord;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n const routeID = selectedroute ? selectedroute.sourceRouteID : 0;\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const route = routes.find(X => X.sourceRouteID === id);\r\n\r\n\r\n CatalogueActions.setSourceRecord(route);\r\n\r\n // const routeID = route.sourceRouteID;\r\n http.post(`/api/catalogue/${VesselID}/routes/${id}/items`, {\r\n vesselID: VesselID,\r\n routeID: id,\r\n productGroupIDs: []\r\n })\r\n .then(result => {\r\n // console.log(\"addVesselRouteItems\", result.data);\r\n const response = result.data;\r\n // const newVesselItemIDs = response.vesselItemIDs;\r\n const selectedItemIDs = response.selectedItemIDs;\r\n const bufferItemIDs = response.bufferItemIDs;\r\n\r\n // console.log('response', response);\r\n\r\n\r\n // Set Items\r\n const itemIDs = [...selectedItemIDs, ...bufferItemIDs];\r\n const routeItems = items.filter(X => itemIDs.includes(X.itemID));\r\n // console.log('routeItems', routeItems);\r\n CatalogueActions.setSourceLines(routeItems, selectedItemIDs);\r\n // CatalogueActions.setSelectedItems(selectedItemIDs);\r\n\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n // CatalogueActions.loadRouteItems(VesselID, id, []);\r\n\r\n };\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n Select a route\r\n \r\n {\r\n routeID !== 0 ? null : Select a route\r\n }\r\n {\r\n routes.map(X => {X.name})\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n\r\n }, [labelWidth, VesselID, routes, selectedroute, items, CatalogueActions]);\r\n}\r\n\r\nconst CatalogueSelector = ({ VesselID, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n useEffect(() => {\r\n\r\n // console.log('CatalogueSelector', items);\r\n\r\n CatalogueActions.setSourceLines(items);\r\n\r\n }, [items, CatalogueActions])\r\n\r\n return (null);\r\n}\r\n\r\nconst ProductGroupSelectorContainer = () => {\r\n const [catalogueState,] = useCatalogueStore();\r\n const { sourceLines } = catalogueState;\r\n \r\n // console.log(catalogueState.sourceRecord);\r\n // NOTE: in order to not display this component when order is from a basket or quote,\r\n // sourceRecord is checked. for all existing orders, sourceRecord returns true\r\n \r\n const visible = sourceLines.length > 0;\r\n \r\n if (!visible)\r\n return null;\r\n//console.log(catalogueState.sourceRecord)\r\n return (\r\n \r\n {/* */}\r\n
\r\n {!catalogueState.sourceRecord || catalogueState.sourceRecord.sourceRouteID? : null}\r\n {!catalogueState.sourceRecord || catalogueState.sourceRecord.sourceRouteID? : null}\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n// const ProductGroupSelector = ({ ProductGroup, CatalogueActions, catalogue, productGroups, productItemGroups }) => {\r\nconst ProductGroupSelector = () => {\r\n\r\n const [globalState] = useGlobalStore();\r\n const { productGroups, catalogue } = globalState;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { sourceLines, productGroup } = catalogueState;\r\n\r\n\r\n const selectableProductGroupIDs = _.uniqBy(sourceLines, X => X.productGroupID).map(X => X.productGroupID);\r\n const selectableProductGroups = productGroups.filter(X => selectableProductGroupIDs.includes(X.productGroupID));\r\n\r\n // console.log('selectableProductGroups', selectableProductGroups)\r\n // console.log('catalogue.items', catalogue.items)\r\n\r\n // console.log('ProductGroupSelector', selectableProductGroups);\r\n\r\n const PG = productGroup ? productGroups.find(X => X.productGroupID === productGroup) : null;\r\n const PGID = PG ? PG.productGroupID : \"\";\r\n\r\n const valid = catalogue && productGroups;\r\n\r\n // console.log('ProductGroupSelector', productGroups, catalogue, valid);\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [PGID, valid]);\r\n\r\n\r\n const handleProductChange = (e) => {\r\n const id = e.target.value;\r\n\r\n // console.log('handleProductChange', id);\r\n catalogueActions.setProductGroup(id);\r\n }\r\n\r\n\r\n if (!valid)\r\n return null;\r\n\r\n return (\r\n
\r\n \r\n Select Product\r\n (PG ?
{PG.code}
: Product)}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n selectableProductGroups ? null : \r\n }\r\n\r\n {\r\n selectableProductGroups && selectableProductGroups.map(PG => {\r\n const valid = catalogue.items.findIndex(X => X.productGroupID === PG.productGroupID) > -1;\r\n\r\n // console.log('ProductGroup', PG.productGroupID, valid, catalogue.items);\r\n\r\n return valid ? (\r\n \r\n \r\n \r\n ) : null;\r\n })\r\n }\r\n\r\n \r\n
\r\n {/* */}\r\n
\r\n );\r\n}\r\n\r\n// const ProductScaleSelector = ({ ProductGroup, CatalogueActions, catalogue, productItemGroups, selectedIDs }) => {\r\n\r\nconst ProductScaleSelector = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n // const { productGroups, productItemGroups: allItemGroups, catalogue } = globalState;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { productGroup: PGID, productItemGroups: PGIDS } = catalogueState;\r\n\r\n const productScales = globalActions.getProductItemGroupsLocal(PGID);\r\n\r\n // console.log('productScales', productScales);\r\n\r\n // const selectedScales = selectedIDs;\r\n const disabled = productScales.length === 0;\r\n\r\n // const PGID = productGroup;\r\n const valid = PGID > 0 && productScales.length > 0;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [PGIDS, valid]);\r\n\r\n\r\n const handleScaleChange = (e) => {\r\n const newScales = e.target.value;\r\n catalogueActions.setProductItemGroups(newScales);\r\n }\r\n\r\n if (!valid)\r\n return null;\r\n\r\n\r\n return (\r\n \r\n Select Scales\r\n
Scale [{PGIDS.length}/{productScales.length}]
}\r\n onChange={handleScaleChange}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n productScales && productScales.map(PIG => {\r\n\r\n const count = catalogueActions.getSelectedProductGroupItemCount(PIG.productItemGroupID);\r\n const checked = PGIDS.includes(PIG.productItemGroupID);\r\n\r\n const countText = count > 0 ? ` [${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\nconst CatalogSelectFooter = () => {\r\n const [, basketActions] = useBasketStore();\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { sourceRecord, sourceLines, productItemGroups } = catalogueState;\r\n\r\n // const sourceLineItemIDs = sourceLines.map(X => X.itemID);\r\n\r\n const selectedProductGroupItems = catalogueActions.getSelectedProductItems();\r\n const selectedItemIDs = selectedProductGroupItems.map(X => X.itemID);\r\n\r\n const hasLines = sourceLines.length > 0;\r\n const selectedCount = selectedProductGroupItems.length\r\n const hasSelected = selectedCount > 0;\r\n\r\n\r\n const listItems = sourceLines.filter(X => productItemGroups.includes(X.productItemGroupID)).map(X => X.itemID);\r\n\r\n const handleAddToBasket = () => {\r\n // console.log('handleAddToBasket', selectedItemIDs);\r\n basketActions.addBasketItems(selectedItemIDs);\r\n basketActions.addSourceRecord(sourceRecord);\r\n }\r\n\r\n return (\r\n \r\n
\r\n { catalogueActions.addSelectedItems(listItems); }}>All\r\n\r\n { catalogueActions.removeSelectedItems(listItems); }}>None\r\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 CatalogueSelectItems\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, TextField, Button } from '@material-ui/core';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport _ from 'lodash';\r\n\r\nconst CatalogueBasketConfirm = () => {\r\n const [basketState,] = useBasketStore();\r\n const { basketLines } = basketState;\r\n\r\n\r\n if (basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {/*
\r\n Basket Confirmation\r\n
*/}\r\n
\r\n \r\n \r\n \r\n Please Note: once confirmed, the order will be processed immediately and can not be undone\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nexport const BasketSummary = ({ basketLines }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n const { productGroups } = globalState;\r\n\r\n\r\n if (!Boolean(productGroups))\r\n return null;\r\n\r\n\r\n const processLines = basketLines\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Product\r\n Qty\r\n Price\r\n \r\n \r\n \r\n\r\n {\r\n productGroups.map(PG => {\r\n\r\n const PGID = PG.productGroupID;\r\n const caption = PG.caption;\r\n const lines = basketLines.filter(X => (X.productGroupID || X.item.productGroupID) === PGID);\r\n\r\n if (lines.length === 0)\r\n return null;\r\n\r\n\r\n const QTY = _.sumBy(lines, L => (L.quantity || 1));\r\n const P = _.sumBy(lines, 'itemPrice.price').toFixed(2);\r\n\r\n const currencyID = lines[0].itemPrice.currencyID;\r\n const currency = globalActions.getCurrency(currencyID);\r\n\r\n return (\r\n \r\n {caption}\r\n {QTY}\r\n {`${currency.code} ${P}`}\r\n \r\n )\r\n\r\n })\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketReference = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const reference = basketState.reference || \"\";\r\n\r\n\r\n return React.useMemo(() => {\r\n\r\n const handleReferenceChange = (e) => {\r\n const newValue = e.target.value;\r\n basketActions.setReference(newValue);\r\n }\r\n\r\n return ();\r\n\r\n }, [reference, basketActions]);\r\n}\r\n\r\n\r\nconst BasketOrderButton = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const { vesselID, reference, basketLines, ordered } = basketState;\r\n const pricesLoaded = basketActions.hasBasketPrices();\r\n\r\n const canOrder = pricesLoaded && basketLines.length > 0 && reference.length > 0 && vesselID > 0;\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n basketActions.clearData();\r\n }\r\n\r\n\r\n }, [ordered, basketActions])\r\n\r\n return React.useMemo(() => {\r\n\r\n const handleBasketOrder = () => {\r\n basketActions.orderBasket();\r\n }\r\n\r\n return (\r\n Confirm Order(s)\r\n );\r\n }, [canOrder, basketActions])\r\n}\r\n\r\n\r\n\r\nexport default CatalogueBasketConfirm\r\n","import React, { useEffect, useMemo } from 'react'\r\nimport { Route, Link } from \"react-router-dom\";\r\nimport _ from 'lodash';\r\n\r\n// Material UI\r\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, List, Button, IconButton, ButtonGroup } from '@material-ui/core';\r\nimport DoneOutlineIcon from '@material-ui/icons/DoneOutline';\r\n\r\n// Global Support Files\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\n\r\nimport CatalogueBasketReview from './CatalogueBasketReview';\r\nimport CatalogueSelectVessel from './CatalogueSelectVessel';\r\nimport CatalogueSelectItems from './CatalogueSelectItems';\r\nimport CatalogueBasketConfirm from './CatalogueBasketConfirm';\r\n\r\n\r\n// CSS Files\r\nimport salesStyling from '../../CSS/sales.module.css';\r\n\r\nconst Catalogue = ({ match, history }) => {\r\n const [globalState] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const vesselID = +match.params.vesselID || 0;\r\n\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], ['asc']);\r\n const vessel = vessels.find(X => X.vesselID === vesselID) || null;\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n\r\n const ordered = _.get(basketState, 'ordered', false);\r\n\r\n useEffect(() => {\r\n basketActions.setVessel(vesselID);\r\n return () => basketActions.setVessel(0);\r\n }, [vesselID]);\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n history.push(`/sales/catalogue/`);\r\n }\r\n }, [ordered]);\r\n\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n {/* */}\r\n {/*
\r\n
\r\n
*/}\r\n {/*
*/}

\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketButtonList = ({ Vessel }) => {\r\n\r\n const showVesselName = Vessel ? `Selected Vessel: ${Vessel.vesselName}` : null;\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

{showVesselName}

\r\n \r\n );\r\n}\r\n\r\nconst BasketSelectVesselButton = ({ Vessel }) => {\r\n const [basketState,] = useBasketStore();\r\n const vesselID = basketState.vesselID;\r\n const selected = vesselID > 0;\r\n const text = \"Vessels\"; //Vessel ? ` ${Vessel.vesselName}` : `Vessel`;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BasketAddItemsButton = () => {\r\n const [basketState,] = useBasketStore();\r\n const vesselID = basketState.vesselID;\r\n const selected = basketState.basketLines.length > 0;\r\n const disabled = (vesselID === 0);\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n }, [vesselID, disabled, selected]);\r\n}\r\n\r\n\r\nconst BasketReviewButton = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n const hasLines = Boolean(basketState.basketLines);\r\n\r\n const vesselID = basketState.vesselID;\r\n const basketItemCount = hasLines ? basketState.basketLines.length : 0;\r\n const selected = basketActions.hasBasketPrices();\r\n\r\n const disabled = (vesselID === 0) || (basketItemCount === 0);\r\n\r\n return useMemo(() => {\r\n\r\n if (!hasLines)\r\n return null;\r\n \r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n }, [hasLines, basketItemCount, vesselID, disabled, selected]);\r\n}\r\n\r\nconst BasketConfirmButton = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n const hasLines = Boolean(basketState.basketLines);\r\n\r\n const vesselID = basketState.vesselID;\r\n const basketItemCount = hasLines ? basketState.basketLines.length : 0;\r\n\r\n const pricesLoaded = basketActions.hasBasketPrices();\r\n const disabled = (vesselID === 0) || (basketItemCount === 0) || (!pricesLoaded);\r\n\r\n const done = !disabled && basketState.reference.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n if (!hasLines)\r\n return null;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n }, [hasLines, vesselID, disabled, done]);\r\n}\r\n\r\n\r\nexport const BasketButton = ({ Text, To, Location, Count, Selected, Disabled, Done }) => {\r\n\r\n const icon = Done === true ? (\r\n \r\n \r\n ) : null;\r\n\r\n return (\r\n
\r\n \r\n {Text} \r\n \r\n
\r\n );\r\n}\r\n\r\n\r\n\r\nconst SaveManagerBasket = () => {\r\n return ();\r\n}\r\n\r\n\r\nconst SaveManagerBasketConfirmation = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [reference, setReference] = React.useState(\"\");\r\n\r\n const disabled = basketState.basketLines.length <= 0;\r\n\r\n const handleReference = (e) => {\r\n const val = e.target.value;\r\n setReference(() => val);\r\n }\r\n\r\n const SaveManagerBasket = () => {\r\n\r\n basketActions.saveManagerBasket(reference);\r\n setOpen(false);\r\n }\r\n\r\n return (\r\n \r\n { setOpen(false); }}\r\n aria-labelledby=\"Save Basket\">\r\n Do you want to save the basket?\r\n \r\n Please enter the reference for the basket you want to save:\r\n \r\n After saving the basket will become available from the existing baskets\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 Catalogue;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\n// Import Sales catalogue/order support files\r\nimport Catalogue from './Basket/Catalogue';\r\n// import CatalogueBasketReview from './Basket/CatalogueBasketReview';\r\n// import CatalogueSelectVessel from './Basket/CatalogueSelectVessel';\r\n// import CatalogueSelectItems from './Basket/CatalogueSelectItems';\r\n// import CatalogueBasketConfirm from './Basket/CatalogueBasketConfirm';\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n// Component Description: Holds the whole Sales/Order Management Module\r\nconst Sales = () => {\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 Sales;\r\n","import React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, Link } from '@material-ui/core';\r\n\r\nconst VesselOrderLineDetailHeader = ({ line, closePath, next, before }) => {\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 {line.item.itemTitle}\r\n */}\r\n\r\n \r\n \r\n \r\n \r\n \r\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 VesselOrderLineDetailHeader\r\n","import React, { useState, useMemo } from 'react';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport { Typography, Checkbox, Dialog, DialogTitle, DialogActions, DialogContent, DialogContentText, Button, CircularProgress } from '@material-ui/core';\r\n\r\nconst LineDetailTable = ({ productGroup, item, line, showOrder = false, showLicense = false, showBasket = false }) => {\r\n\r\n const hasLine = Boolean(line);\r\n const showItem = Boolean(item) ? item : line.item;\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {productGroup ? productGroup.caption : \"\"}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Number:\r\n {showItem.itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {showItem.itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {String(showItem.editionDate).split(' ')[0]}\r\n \r\n {\r\n (hasLine && !showBasket) && (\r\n \r\n Quantity:\r\n {line.quantity}\r\n \r\n )\r\n }\r\n\r\n {\r\n Boolean(showItem.itemStatus) ? (\r\n \r\n Item Status:\r\n {showItem.itemStatus}\r\n \r\n ) : null\r\n }\r\n\r\n {\r\n (hasLine && showOrder) && (\r\n \r\n \r\n Duration:\r\n {`${line.duration || 'N/A'}`}\r\n \r\n \r\n Price:\r\n {`${line.currency} ${line.linePrice}`}\r\n \r\n \r\n )\r\n }\r\n\r\n {\r\n (hasLine && showLicense) && (\r\n \r\n \r\n Active:\r\n \r\n \r\n {\r\n line.endDate && (\r\n \r\n License Expires:\r\n {String(line.endDate).slice(0, 10)}\r\n )\r\n }\r\n \r\n )\r\n }\r\n\r\n\r\n {\r\n (showBasket && hasLine) && (\r\n \r\n \r\n Quantity:\r\n {`${line.quantity.toFixed(2)}`}\r\n \r\n\r\n \r\n Duration:\r\n {`${line.itemPrice.months}`}\r\n \r\n \r\n )\r\n }\r\n\r\n\r\n\r\n \r\n
\r\n );\r\n\r\n }, [line, hasLine, showItem, showLicense, showOrder, showBasket, productGroup]);\r\n};\r\n\r\nconst ActiveLicenceConfirmation = ({ line }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [, fleetActions] = useFleetStore();\r\n const [disabledButton, setDisabledButton] = useState(false);\r\n\r\n const history = useHistory();\r\n\r\n const Confirm = () => {\r\n \r\n setDisabledButton(true);\r\n\r\n fleetActions.setLicenseAvailability(line.vesselID, line.itemID, !line.active,\r\n (success) => {\r\n if(!success) {\r\n setOpen(false);\r\n setDisabledButton(false);\r\n }\r\n\r\n if(success) {\r\n history.push(`/fleet/holdings/${line.vesselID}`);\r\n }; \r\n }\r\n );\r\n };\r\n\r\n const actionText = line.active ? 'deactivate' : 'activate';\r\n console.log(line); \r\n \r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n {actionText} license?\r\n \r\n \r\n Do you want to {actionText} {line.item.itemTitle}?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { setOpen(true); }} />\r\n \r\n )\r\n }, [line, disabledButton, open, actionText]);\r\n}\r\n\r\nexport default LineDetailTable;\r\n","import React, { useMemo } from 'react';\r\nimport { Dialog } from '@material-ui/core';\r\nimport VesselOrderLineDetailHeader from './VesselOrderLineDetailHeader';\r\nimport LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport FloatingMenuButton from '../../../Navigation/FloatingMenuButton';\r\n\r\n\r\nconst VesselOrderLineDetail = ({ match }) => {\r\n const [open, setOpen] = React.useState(true);\r\n \r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const [saleState] = useSaleStore();\r\n\r\n const salesOrderID = +match.params.id;\r\n const salesOrderLineID = +match.params.lineID;\r\n\r\n return useMemo(() => {\r\n\r\n const loaded = Boolean(_.get(saleState, 'orderDetail.order', false));\r\n\r\n // console.log('loaded', loaded);\r\n\r\n // if (!saleState.orderDetail || !saleState.orderDetail.order) \r\n // return null;\r\n\r\n const currentLine = loaded ? saleState.orderDetail.order.lines.find(X => X.salesOrderLineID === salesOrderLineID) : null;\r\n\r\n // if (!currentLine) \r\n // return null;\r\n\r\n const productGoup = loaded ? saleState.orderDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n\r\n const orderLines = _.get(saleState, 'orderDetail.order.lines', []);\r\n\r\n const lines = _.orderBy(orderLines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n // const lines = _.orderBy(saleState.orderDetail.order.lines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n const lineCount = lines.length;\r\n const SQLID_Array = lines.map(X => X.salesOrderLineID);\r\n const index = _.indexOf(SQLID_Array, salesOrderLineID);\r\n\r\n const before = SQLID_Array[(lineCount + index - 1) % lineCount];\r\n const next = SQLID_Array[(index + 1) % lineCount];\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 }, [saleState.orderDetail, salesOrderLineID])\r\n\r\n\r\n};\r\n\r\nexport default VesselOrderLineDetail;\r\n","import React, { useMemo } from 'react';\r\nimport _ from 'lodash';\r\n\r\nconst OrderStatusVessel = ({ orders }) => {\r\n\r\n // if (orders.length !== 25) return null;\r\n\r\n return useMemo(() => {\r\n\r\n const total = orders.length;\r\n\r\n const countData = _.countBy(orders, X => X.salesOrderStatusID);\r\n\r\n // console.log('countData', countData);\r\n\r\n const tooltip = \"Open: \" + (countData[1] || 0) + \"\\n\" +\r\n \"Backorder: \" + (countData[5] || 0) + \"\\n\" +\r\n \"Shipped: \" + (countData[3] || 0) + \"\\n\" +\r\n \"Delivered: \" + (countData[4] || 0);\r\n\r\n const percentageOpen = countData[1] / total * 100;\r\n const percentageBackorder = countData[5] / total * 100;\r\n const percentageShipped = countData[3] / total * 100;\r\n const percentageDelivered = countData[4] / total * 100;\r\n\r\n const degreesOpen = Math.ceil((percentageOpen * 360) / 100) || 0;\r\n const degreesBackorder = Math.ceil((percentageBackorder * 360) / 100) || 0;\r\n const degreesShipped = Math.ceil((percentageShipped * 360) / 100) || 0;\r\n const degreesDelivered = Math.ceil((percentageDelivered * 360) / 100) || 0;\r\n\r\n // if (!degreesOpen) degreesOpen = 0;\r\n // if (!degreesBackorder) degreesBackorder = 0;\r\n // if (!degreesShipped) degreesShipped = 0;\r\n // if (!degreesDelivered) degreesDelivered = 0;\r\n\r\n\r\n if ((degreesOpen === 0) && (degreesBackorder === 0) && (degreesShipped === 0) && (degreesDelivered === 0)) {\r\n degreesDelivered = 360;\r\n }\r\n\r\n const chartData = {\r\n tooltip: tooltip,\r\n open: {\r\n start: 0,\r\n length: degreesOpen\r\n },\r\n backorder: {\r\n start: degreesOpen,\r\n length: degreesBackorder\r\n },\r\n shipped: {\r\n start: degreesOpen + degreesBackorder,\r\n length: degreesShipped\r\n },\r\n delivered: {\r\n start: degreesOpen + degreesShipped + degreesBackorder,\r\n length: degreesDelivered\r\n }\r\n };\r\n\r\n return (\r\n
\r\n 180 ? \"pie-order big\" : \"pie-order\"}\r\n data-start={chartData.open.start}\r\n data-value={chartData.open.length}>
\r\n 180 ? \"pie-order big\" : \"pie-order\"}\r\n data-start={chartData.backorder.start}\r\n data-value={chartData.backorder.length}>\r\n 180 ? \"pie-order big\" : \"pie-order\"}\r\n data-start={chartData.shipped.start}\r\n data-value={chartData.shipped.length}>\r\n 180 ? \"pie-order big\" : \"pie-order\"}\r\n data-start={chartData.delivered.start}\r\n data-value={chartData.delivered.length}>\r\n

{orders.length}

\r\n \r\n );\r\n }, [orders.length]);\r\n};\r\n\r\nexport default OrderStatusVessel;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Collapse, List } from '@material-ui/core';\r\nimport _ from 'lodash';\r\n// import storage from 'store';\r\nimport OrderStatusVessel from '../../../Widgets/OrderStatusVessel';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubOrder } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst VesselOrders = ({ vesselOrders, selectedSalesOrderID }) => {\r\n\r\n const key = `VOL${vesselOrders.vesselID}`;\r\n const openLoad = JSON.parse(sessionStorage.getItem(key)) || false;\r\n\r\n // console.log('openLoad', openLoad)\r\n\r\n const [open, setOpen] = React.useState(openLoad);\r\n useEffect(() => { sessionStorage.setItem(key, open); }, [open]);\r\n\r\n const orders = _.orderBy(vesselOrders.orders, ['reference'], ['desc']);\r\n\r\n\r\n return (\r\n }\r\n >\r\n\r\n \r\n \r\n {\r\n orders.map(X => ())\r\n }\r\n \r\n \r\n\r\n \r\n )\r\n\r\n\r\n // return (\r\n //
\r\n // setOpen(!open)} selected={open}>\r\n // \r\n // \r\n // \r\n // \r\n\r\n // \r\n // {/* */}\r\n\r\n // {open ? : }\r\n // \r\n // \r\n // \r\n // {\r\n // orders.map(X => ())\r\n // }\r\n // \r\n // \r\n //
\r\n // );\r\n};\r\n\r\n\r\n// const VesselOrder = ({ order, selected }) => {\r\n\r\n\r\n// return useMemo(() => {\r\n// // console.log('Selected', selected);\r\n// const to = `/sales/orders/${order.salesOrderID}`;\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// }, [selected])\r\n\r\n// };\r\n\r\nexport default VesselOrders;\r\n","import React, { useEffect } from 'react';\r\nimport { List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport VesselOrders from './VesselOrders';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nconst Orders = ({ match }) => {\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const salesOrderID = +match.params.id || 0;\r\n\r\n // console.log('orders', salesOrderID);\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getVesselOrders();\r\n },\r\n []\r\n );\r\n\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n\r\n const loaded = Boolean(saleState.vesselOrders);\r\n let vessels = loaded ?\r\n saleState.vesselOrders.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n // const sum = _.sumBy(vessels, (V) => V.orders.length);\r\n // console.log('sum', sum);\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n


\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Orders;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport { IconButton, Divider, ListItemText, Grid } from '@material-ui/core';\r\nimport { MailOrderDetailTo } from '../../../Misc/MailTo';\r\nimport { DownloadOrder } from '../../../Misc/DownloadFile';\r\nimport OrderStatus from '../../../../Widgets/OrderStatus';\r\n\r\nconst OrderDetailHeader = ({ orderDetail, history }) => {\r\n\r\n if (!orderDetail || !orderDetail.order) return null;\r\n\r\n const { order } = orderDetail;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n );\r\n};\r\n\r\nexport default withRouter(OrderDetailHeader);\r\n","import React, { useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport OrderLineStatus from '../../../../Widgets/OrderLineStatus';\r\n\r\nconst OrderDetailList = ({ selectedLineID, orderDetail }) => {\r\n\r\n const [OpenGroups, setOpenGroups] = useState(orderDetail ? orderDetail.productGroups.map(X => X.productGroupID) : []);\r\n\r\n if (!orderDetail || !orderDetail.order) return null;\r\n\r\n // const productGroups = order.productGroups;\r\n\r\n\r\n const { order, productGroups } = orderDetail;\r\n // console.log('OrderDetailList', orderDetail);\r\n\r\n let lines = order.lines;\r\n if (orderDetail.statusFilter) {\r\n //console.log('statusFilter', orderDetail.statusFilter);\r\n lines = lines.filter(X => orderDetail.statusFilter.includes(X.salesOrderLineStatusID));\r\n }\r\n // console.log('lines', lines.length);\r\n\r\n lines = _.orderBy(lines, ['item.itemNumber'], ['asc']);\r\n\r\n // console.log('lines', lines.length);\r\n\r\n const toggleProductGroup = (productGroupID) => {\r\n setOpenGroups(prev => prev.includes(productGroupID) ? prev.filter(X => X !== productGroupID) : [...prev, productGroupID])\r\n }\r\n\r\n\r\n const headers = productGroups.map(X => {\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === X.productGroupID);\r\n const subTotal = _.sumBy(productgroupItems, 'linePrice').toFixed(2);\r\n const open = OpenGroups.includes(X.productGroupID);\r\n // const open = true;\r\n return productgroupItems.length > 0 ? (\r\n \r\n toggleProductGroup(X.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n\r\n\r\n \r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n });\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\nconst OrderLine = ({ line, selected }) => {\r\n\r\n const to = `/sales/orders/${line.salesOrderID}/${line.salesOrderLineID}`;\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 OrderDetailList;\r\n","import React, { useMemo } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst OrderDetailFooter = ({ order }) => {\r\n\r\n const totalPrice = { order };\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n {`Total Price: ${order.currency} ${order.totalPrice.toFixed(2)}`}   \r\n \r\n );\r\n }, totalPrice);\r\n};\r\n\r\nexport default OrderDetailFooter;\r\n","import React, { useState } from 'react';\r\nimport { Checkbox } from '@material-ui/core';\r\n\r\nconst OrderStatusFilter = ({ filterChanged }) => {\r\n\r\n const [filter, setFilter] = useState([1, 3, 4, 5]);\r\n\r\n const handleChange = (e) => {\r\n const val = +e.target.value;\r\n\r\n setFilter(prev => {\r\n const newValues = prev.includes(val) ? prev.filter(X => X !== val) : [...prev, val];\r\n filterChanged(newValues);\r\n return newValues;\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default OrderStatusFilter;\r\n","import React, { useEffect } from 'react';\r\nimport OrderDetailHeader from './OrderDetailHeader';\r\nimport OrderDetailList from './OrderDetailList';\r\nimport OrderDetailFooter from './OrderDetailFooter';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport OrderStatusFilter from '../../../../Widgets/Filters/OrderStatusFilter';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst VesselOrderDetail = ({ match }) => {\r\n const salesOrderID = +match.params.id;\r\n const selectedLineID = +match.params.lineID;\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // console.log('VesselOrderDetail', salesOrderID); \r\n\r\n const filterChanged = (statusIDs) => {\r\n salesActions.filterSalesOrder(statusIDs);\r\n }\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getSalesOrder(salesOrderID);\r\n return () => {\r\n salesActions.clearSalesOrder();\r\n }\r\n },\r\n [salesOrderID]\r\n );\r\n\r\n const loaded = _.get(saleState, 'orderDetail.order.salesOrderID', -1) === salesOrderID;\r\n const order = _.get(saleState, 'orderDetail.order');\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n



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




\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default VesselOrderDetail;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport VesselOrderLineDetail from './Orders/VesselOrderLineDetail/VesselOrderLineDetail';\r\nimport Orders from './Orders/Orders';\r\nimport VesselOrderDetail from './Orders/VesselOrderDetail/VesselOrderDetail';\r\n\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nconst OrderHistory = () => {\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\nexport default OrderHistory;\r\n","import React, { useMemo } from 'react';\r\nimport { Collapse, List, Divider } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubShipment } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst VesselShipments = ({ vessel, selectedsalesShipmentID }) => {\r\n const [saleState,] = useSaleStore();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const vesselShipments = saleState.vesselShipments.filter(X => X.vesselID === vessel.vesselID);\r\n\r\n return useMemo(() => {\r\n\r\n return vesselShipments.length > 0 ? (\r\n \r\n \r\n \r\n {\r\n vesselShipments.map(X => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n }, [vesselShipments, selectedsalesShipmentID]);\r\n};\r\n\r\nexport default VesselShipments;\r\n","import React, { useEffect } from 'react';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport Loading from '../../Misc/Loading';\r\nimport VesselShipments from './VesselShipments';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { List, Divider } from '@material-ui/core';\r\n\r\nconst Shipments = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const salesShipmentID = +match.params.id || 0;\r\n\r\n useEffect(() => {\r\n salesActions.getVesselShipments();\r\n }, []);\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n const shipments = saleState.vesselShipments;\r\n\r\n const loaded = (vessels !== null) && (shipments !== null);\r\n if (loaded === true) {\r\n vessels = vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1);\r\n }\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n loaded ? (\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\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 Shipments;","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Box, IconButton, Divider, Collapse, Link, Grid } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport { OpenShipment } from '../../../Misc/DownloadFile';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst VesselShipmentDetail = ({ history, match }) => {\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n const salesShipmentID = +match.params.id || 0;\r\n const selectedID = +match.params.lineID || 0;\r\n\r\n // const shipment = (saleState.vesselShipments || []).find(X => X.salesShipmentID === salesShipmentID);\r\n\r\n\r\n // const loaded = Boolean(saleState.shipmentDetail) && saleState.shipmentDetail;\r\n\r\n const loaded = +_.get(saleState, 'shipmentDetail.header.salesShipmentID', -1) === salesShipmentID;\r\n\r\n const detail = loaded ? saleState.shipmentDetail : null;\r\n\r\n // console.log('shipment', detail, loaded);\r\n\r\n useEffect(() => {\r\n if (salesShipmentID > 0) {\r\n saleActions.getVesselShipment(salesShipmentID);\r\n }\r\n }, [salesShipmentID]);\r\n\r\n // const content = saleState.orderDetail ? : ;\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n contentColumnFilter\r\n
*/}\r\n\r\n
\r\n


\r\n \r\n


\r\n
\r\n\r\n {/*
contentColumnFooter
*/}\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\n// Header\r\nconst ShipmentDetailHeader = ({ shipmentHeader, history }) => {\r\n\r\n\r\n return useMemo(() => {\r\n\r\n if (!shipmentHeader) return null;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n const { reference, customerReference, trackingLink, shippingDate } = shipmentHeader;\r\n const hasTracking = Boolean(trackingLink);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n {/* \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n );\r\n }, [shipmentHeader]);\r\n};\r\n\r\n// Lines\r\nconst ShipmentLineList = ({ shipmentDetail, selectedID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [closedGroups, setClosedGroups] = useState([]);\r\n\r\n if (!globalState.productGroups)\r\n return null;\r\n\r\n\r\n\r\n const toggleProductGroup = (pgid) => {\r\n setClosedGroups(prev => {\r\n const newGroups = prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid];\r\n return newGroups;\r\n })\r\n }\r\n\r\n // console.log('shipmentDetail.lines', shipmentDetail.lines);\r\n const sortedLines = _.orderBy(shipmentDetail.lines, [I => +(I.item.itemNumber || \"\").toLowerCase()]);\r\n return (\r\n \r\n {\r\n globalState.productGroups.map(PG => (\r\n X.item.productGroupID === PG.productGroupID)}\r\n selectedID={selectedID}\r\n toggleProductGroup={toggleProductGroup}\r\n open={!closedGroups.includes(PG.productGroupID)}\r\n />\r\n ))\r\n }\r\n \r\n );\r\n}\r\n\r\n// ListHeader\r\nconst ShipmentProductGroupHeader = ({ productGroup, salesShipmentID, lines, selectedID, toggleProductGroup, open }) => {\r\n // const open = true;\r\n const hasLines = lines.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('ShipmentProductGroupHeader', lines);\r\n return (\r\n \r\n {\r\n hasLines ? (\r\n \r\n toggleProductGroup(productGroup.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n lines.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n }, [salesShipmentID, open, selectedID]);\r\n}\r\n\r\nconst ShipmentLine = ({ salesShipmentID, line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('ShipmentLine');\r\n\r\n const to = `/sales/shipments/${salesShipmentID}/${line.salesShipmentLineID}`;\r\n return (\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n );\r\n\r\n }, [salesShipmentID, line.itemID, selected]);\r\n}\r\n\r\nexport default VesselShipmentDetail;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport Shipments from './Shipments/Shipments';\r\nimport VesselShipmentDetail from './Shipments/VesselShipmentDetail/VesselShipmentDetail';\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nconst ShipmentTracking = () => {\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n );\r\n};\r\n\r\nexport default ShipmentTracking;\r\n","import React, { useMemo, useEffect } from 'react'\r\nimport { Collapse, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubFlatFeeContract } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst FlatFee = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // const [filter] = React.useState(\"\");\r\n\r\n const flatFeeID = +match.params.id || 0;\r\n\r\n useEffect(() => {\r\n salesActions.getVesselFlatFees();\r\n }, []);\r\n\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()]);\r\n const flatFees = saleState.vesselFlatFees;\r\n const loaded = (vessels !== null) && (flatFees !== null);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst FlatFeeContent = ({ flatFeeID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()]);\r\n const flatFees = saleState.vesselFlatFees;\r\n\r\n const loaded = (vessels !== null) && (flatFees !== null);\r\n if (loaded === true) {\r\n vessels = vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1);\r\n\r\n vessels = _.orderBy(\r\n vessels,\r\n ['vesselName'],\r\n [sort > 0 ? 'asc' : 'desc']);\r\n }\r\n\r\n // console.log('loaded', loaded, saleState.vesselFlatFees)\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n


\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst VesselFlatFees = ({ vessel, selectedID }) => {\r\n const [saleState,] = useSaleStore();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const vesselFlatFees = _.get(saleState, 'vesselFlatFees', []).filter(X => X.vesselID === vessel.vesselID);\r\n // console.log('vesselFlatFees 1', vesselFlatFees);\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('vesselFlatFees', vesselFlatFees); \r\n\r\n return vesselFlatFees.length > 0 ? (\r\n \r\n\r\n \r\n \r\n {\r\n vesselFlatFees.map(X => (\r\n ))\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n\r\n }, [vesselFlatFees, selectedID, open]);\r\n};\r\n\r\nexport default FlatFee;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport { Box, IconButton, ListItemText, Divider, List, ListItem, ListItemIcon, Link, Grid } from '@material-ui/core';\r\nimport Loading from '../../Misc/Loading';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nconst FlatFeeOrders = ({ match, history }) => {\r\n const flatFeeID = +match.params.id || 0;\r\n const orderID = +match.params.orderID || 0;\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(0);\r\n\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n\r\n useEffect(() => {\r\n if (flatFeeID > 0) {\r\n saleActions.getVesselFlatFeeOrders(flatFeeID);\r\n }\r\n }, [flatFeeID]);\r\n\r\n\r\n const detailID = _.get(saleState, 'flatFeeDetail.flatFee.vesselFlatFeePeriodID', -1);\r\n const loaded = (detailID === flatFeeID);\r\n\r\n // console.log('loaded', loaded, flatFeeID, loaded, detailID);\r\n\r\n //Filter included should there be a need for including a filtering feature in the future\r\n let flatFeeOrderSort = loaded ?\r\n saleState.flatFeeDetail.orders.filter(X => X.orderDate.toLowerCase().indexOf(filter) !== -1) : [];\r\n console.log(saleState.flatFeeDetail);\r\n\r\n flatFeeOrderSort = _.orderBy(flatFeeOrderSort, ['orderDate'], ['desc']);\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n


\r\n \r\n {\r\n flatFeeOrderSort.map(X => \r\n )\r\n }\r\n \r\n


\r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\n// Header\r\nconst FlatFeeHeader = ({ flatFee, history }) => {\r\n\r\n return useMemo(() => {\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n if (!flatFee)\r\n return null;\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 }, [flatFee]);\r\n}\r\n\r\n\r\nconst FlatFeeOrder = ({ vesselFlatFeePeriodID, order, selected }) => {\r\n\r\n\r\n return useMemo(() => {\r\n\r\n const { purchaseOrderID, reference, totalQuantity } = order;\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}/${purchaseOrderID}`;\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 }, [vesselFlatFeePeriodID, selected]);\r\n}\r\n\r\n\r\nexport default FlatFeeOrders;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Box, IconButton, Divider, Collapse, Link, SvgIcon, Grid } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport Loading from '../../Misc/Loading';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nconst FlatFeeOrderDetail = ({ match, history }) => {\r\n\r\n const flatFeeID = +match.params.id || 0;\r\n const orderID = +match.params.orderID || 0;\r\n const lineID = +match.params.lineID || 0;\r\n\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n\r\n // console.log('object', flatFeeID, orderID, lineID)\r\n\r\n useEffect(() => {\r\n if (flatFeeID > 0 && orderID > 0) {\r\n saleActions.getVesselFlatFeeOrderDetails(flatFeeID, orderID);\r\n }\r\n }, [flatFeeID, orderID]);\r\n\r\n\r\n const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n const loaded = (purchaseOrderID === orderID);\r\n\r\n return (\r\n (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n contentColumnFilter\r\n
*/}\r\n\r\n



\r\n \r\n


\r\n
\r\n\r\n {/*
contentColumnFooter
*/}\r\n
\r\n ) : \r\n }\r\n
\r\n )\r\n );\r\n};\r\n\r\n// Header\r\nconst FlatFeeOrderDetailHeader = ({ header, history }) => {\r\n\r\n // console.log('history', history);\r\n\r\n return useMemo(() => {\r\n const handleBack = () => {\r\n\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n if (!header)\r\n return null;\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 }, [header]);\r\n}\r\n\r\n\r\n// Lines\r\nconst FlatFeeOrderDetailLineList = ({ detail, selectedID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [closedGroups, setClosedGroups] = useState([]);\r\n\r\n if (!globalState.productGroups)\r\n return null;\r\n\r\n\r\n\r\n const toggleProductGroup = (pgid) => {\r\n setClosedGroups(prev => {\r\n const newGroups = prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid];\r\n return newGroups;\r\n })\r\n }\r\n\r\n\r\n const sortedLines = _.orderBy(detail.lines, [I => I.item.itemNumber.toLowerCase()]);\r\n // console.log('object', detail)\r\n\r\n return (\r\n \r\n {\r\n // globalState.productGroups.map(PG =>
{PG.caption}
)\r\n globalState.productGroups.map(PG => (\r\n X.item.productGroupID === PG.productGroupID)}\r\n selectedID={selectedID}\r\n toggleProductGroup={toggleProductGroup}\r\n open={!closedGroups.includes(PG.productGroupID)}\r\n />\r\n ))\r\n }\r\n
\r\n );\r\n}\r\n\r\n\r\n// ListHeader\r\nconst OrderProductGroupHeader = ({ vesselFlatFeePeriodID, productGroup, purchaseOrderID, lines, selectedID, toggleProductGroup, open }) => {\r\n // const open = true;\r\n const hasLines = lines.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n {\r\n hasLines ? (\r\n \r\n toggleProductGroup(productGroup.productGroupID)} >\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n //lines.map(L =>
{L.item.itemNumber}
)\r\n lines.map(X => )\r\n }\r\n
\r\n
\r\n
\r\n ) : null\r\n }\r\n\r\n
\r\n );\r\n\r\n }, [purchaseOrderID, open, selectedID]);\r\n}\r\n\r\n\r\nconst PurchaseOrderLine = ({ vesselFlatFeePeriodID, purchaseOrderID, line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('purchaseOrderLine', line);\r\n\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}/${purchaseOrderID}/${line.purchaseOrderLineID}`;\r\n // const to = `${line.purchaseOrderLineID}`;\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 }, [purchaseOrderID, line.itemID, selected]);\r\n}\r\n\r\n\r\n\r\nexport default FlatFeeOrderDetail;\r\n","import React, { useMemo } from 'react';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport { Table, TableHead, TableRow, TableCell, Typography, TableBody, Checkbox } from '@material-ui/core';\r\n\r\nconst LineDetailTable2 = ({ line }) => {\r\n\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n if (!line || !globalState.productGroups)\r\n return null;\r\n\r\n // console.log('line', line);\r\n\r\n const productGroup = globalActions.getProductGroup(line.item.productGroupID);\r\n\r\n const { quantity, months, price, totalPrice, active, endDate, currencyID, customerCurrencyID } = line;\r\n const { itemNumber, itemTitle, editionDate, itemStatus } = line.item;\r\n\r\n const showEditionDate = editionDate ? editionDate.split(' ')[0] : 'N/A';\r\n const showEndDate = endDate ? endDate.split(' ')[0] : 'N/A';\r\n\r\n const showPrice = price || totalPrice;\r\n const showPriceCurrencyID = currencyID || customerCurrencyID;\r\n const hasPrice = Boolean(showPrice);\r\n const showCurrencyCode = hasPrice ? globalActions.getCurrency(showPriceCurrencyID).code : null;\r\n\r\n // console.log('showPrice', showPrice);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n Number:\r\n {itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {showEditionDate}\r\n \r\n\r\n \r\n Item Status:\r\n {itemStatus}\r\n \r\n\r\n {/* \r\n \r\n Order Details\r\n \r\n */}\r\n\r\n \r\n Quantity:\r\n {quantity}\r\n \r\n\r\n \r\n Months:\r\n {months}\r\n \r\n\r\n {\r\n hasPrice ? (\r\n \r\n Price:\r\n {`${showCurrencyCode} ${showPrice}`}\r\n \r\n ) : null\r\n }\r\n\r\n \r\n Active:\r\n \r\n \r\n\r\n \r\n License Expires:\r\n {showEndDate}\r\n \r\n\r\n \r\n\r\n
\r\n );\r\n }, [line, globalState.productGroups]);\r\n};\r\n\r\n\r\n// const ItemPartRow = (Caption, Value) => {\r\n\r\n// // return useMemo(() => {\r\n// return (\r\n// \r\n// {Caption}\r\n// {Value}\r\n// \r\n// );\r\n// // }, [Caption, Value]);\r\n// }\r\n\r\nexport default LineDetailTable2;\r\n","import React from 'react'\r\nimport LineDetailTable2 from '../../Misc/LineDetailTable2';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, Typography, Link, Box, Dialog } from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\n\r\nimport FloatingMenuButton from '../../Navigation/FloatingMenuButton';\r\n\r\nconst FlatFeeOrderLineDetail = ({ match }) => {\r\n\r\n const [open, setOpen] = React.useState(true);\r\n \r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n // const flatFeeID = +match.params.id;\r\n const orderID = +match.params.orderID;\r\n const selectedLineID = +match.params.lineID;\r\n\r\n const [saleState] = useSaleStore();\r\n\r\n const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n\r\n const loaded = (purchaseOrderID === orderID);\r\n const line = loaded ? saleState.flatFeeOrderDetail.lines.find(X => X.purchaseOrderLineID === selectedLineID) : null;\r\n const popLink = match.url.substring(0, match.url.lastIndexOf(\"/\"));\r\n\r\n return (\r\n \r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n ) : \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst FlatFeeOrderLineDetailHeader = ({ line, closePath }) => {\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 {line.item.itemTitle}\r\n */}\r\n\r\n {/* \r\n \r\n \r\n \r\n \r\n\r\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 FlatFeeOrderLineDetail\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport FlatFee from './FlatFee/FlatFee';\r\nimport FlatFeeOrders from './FlatFee/FlatFeeOrders';\r\nimport FlatFeeOrderDetail from './FlatFee/FlatFeeOrderDetail';\r\nimport FlatFeeOrderLineDetail from './FlatFee/FlatFeeOrderLineDetail';\r\n\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst FlatFeeContract = () => {\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 FlatFeeContract;\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { Link as Link1 } from 'react-router-dom';\r\nimport { Typography, ListItemText, Checkbox, List, ListItem, ListItemIcon, Link, FormControl, InputLabel, Select, MenuItem, Badge, Button, Divider } from '@material-ui/core';\r\n// import { useCatalogueStore } from '../../../../../Global/Stores/catalogueStore';\r\nimport { FixedSizeList } from 'react-window';\r\nimport _ from 'lodash';\r\nimport AutoSizer from \"react-virtualized-auto-sizer\";\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useParams } from \"react-router\";\r\n\r\nconst AVCSO_SelectItems = () => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n const loaded = globalActions.isLoaded();\r\n\r\n return (\r\n \r\n {/*
\r\n Add Licenses\r\n
*/}\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\nconst ProductScaleSelector = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n const PGID = avcsoState.productGroup;\r\n const selectedScaleIDs = avcsoState.productItemGroups;\r\n\r\n const productScales = globalActions.getProductItemGroupsLocal(PGID);\r\n\r\n // const selectedScales = selectedIDs;\r\n const disabled = productScales.length === 0;\r\n\r\n // const PGID = productGroup;\r\n const valid = PGID > 0 && productScales.length > 0;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [valid]);\r\n\r\n\r\n const handleScaleChange = (e) => {\r\n const newScales = e.target.value;\r\n avcsoActions.setProductItemGroups(newScales);\r\n }\r\n\r\n if (!valid)\r\n return null;\r\n\r\n\r\n return (\r\n \r\n Select Scales\r\n
Scale [{selectedScaleIDs.length}/{productScales.length}]
}\r\n onChange={handleScaleChange}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n productScales && productScales.map(PIG => {\r\n\r\n // const count = catalogueActions.getSelectedProductGroupItemCount(PIG.productItemGroupID);\r\n // const count = 1;\r\n const checked = selectedScaleIDs.includes(PIG.productItemGroupID);\r\n\r\n // const countText = count > 0 ? ` [${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\nconst AvcsoItemList = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { selectedItemIDs, avcsoItemIDs, avcsoLines, licenseLines, productItemGroups } = avcsoState;\r\n\r\n const pars = useParams();\r\n const focusedItemID = +pars.itemID || 0;\r\n //const focusedItemID = 0;\r\n\r\n\r\n useEffect(() => {\r\n // console.log('setAvcsoLines 1');\r\n if (avcsoLines.length === 0) {\r\n\r\n const items = globalActions.getCatalogueItems(avcsoItemIDs);\r\n //console.log('setAvcsoLines 2', items);\r\n avcsoActions.setAvcsoLines(items);\r\n }\r\n\r\n }, [avcsoLines, avcsoActions, globalActions, avcsoItemIDs])\r\n\r\n // const items = globalActions.getCatalogueItems(avcsoItemIDs).filter(X => productItemGroups.includes(X.productItemGroupID));\r\n const items = avcsoLines.filter(X => productItemGroups.includes(X.productItemGroupID));\r\n\r\n // console.log('items', items);\r\n\r\n const ref = useRef(null);\r\n useEffect(() => {\r\n if (ref && ref.current && focusedItemID > 0) {\r\n const focusedIndex = _.findIndex(items, (I) => I.itemID === focusedItemID);\r\n // console.log('focusedItemID', focusedItemID, ref.current)\r\n ref.current.scrollToItem(focusedIndex);\r\n }\r\n }, [focusedItemID, items]);\r\n\r\n\r\n const itemCount = items.length;\r\n const vesselItemIDs = licenseLines.map(X => X.itemID);\r\n\r\n // console.log('licenseLines', licenseLines);\r\n\r\n return (\r\n // \r\n
\r\n \r\n {\r\n ({ width, height }) => (\r\n\r\n \r\n \r\n {AvcsoItemListRow}\r\n \r\n \r\n\r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst AvcsoItemListRow = ({ data, index, style }) => {\r\n // const history = useHistory();\r\n const [, globalActions] = useGlobalStore();\r\n const [, avcsoActions] = useAvcsoStore();\r\n\r\n const { listItems, selectedItemIDs, vesselItemIDs, focusedItemID } = data;\r\n\r\n const item = listItems[index];\r\n const itemID = item.itemID;\r\n //const item = Boolean(I) ? I.itemID : 0;\r\n\r\n\r\n //console.log('I', item, itemID);\r\n // console.log('I', itemID, focusedItemID);\r\n\r\n // const vesselItemIDs = licenseLines.map(X => X.itemID);\r\n\r\n const focused = itemID === focusedItemID;\r\n const selected = selectedItemIDs.includes(itemID);\r\n const inInventory = vesselItemIDs.includes(itemID);\r\n\r\n return React.useMemo(() => {\r\n\r\n // const item = globalActions.getCatalogueItem(itemID);\r\n //console.log('Row', itemID, item, focused);\r\n\r\n if (itemID <= 0 || !Boolean(item)) {\r\n return null;\r\n }\r\n\r\n const handleItemChecked = (id) => {\r\n avcsoActions.toggleSelectedItem(id);\r\n }\r\n\r\n return (\r\n \r\n { handleItemChecked(itemID) }}\r\n >\r\n \r\n { handleItemChecked(itemID) }}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [itemID, selected, inInventory, focused, globalActions, avcsoActions, item, style]);\r\n};\r\n\r\nconst AvcsoItemFooter = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { selectedItemIDs } = avcsoState;\r\n\r\n const selectedCount = selectedItemIDs.length;\r\n const hasSelected = selectedCount > 0;\r\n\r\n const handleAddToBasket = () => {\r\n // console.log('handleAddToBasket', selectedItemIDs);\r\n avcsoActions.addselectedToBasket();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
)\r\n\r\n}\r\n\r\nexport default AVCSO_SelectItems;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { Typography, Select, FormControl, Input, MenuItem, ListItemText, ListItem, ListItemIcon, Chip, List, Link, ListItemSecondaryAction, IconButton, Button, Divider } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport { useParams } from \"react-router\";\r\nimport _ from 'lodash';\r\n\r\nconst AVCSO_BasketReview = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n // const selectedItemID = +match.params.itemID || 0;\r\n\r\n // console.log('selectedItemID', selectedItemID);\r\n\r\n useEffect(() => {\r\n // const { selectedItems, vesselID } = saleState.catalogue;\r\n // if (vesselID > 0)\r\n avcsoActions.getBasketPrices();\r\n }, []);\r\n\r\n\r\n const itemsLoaded = globalActions.isLoaded();\r\n\r\n // const productGroups = _.get(globalState, 'catalogue.productGroups', []);\r\n // const { basketLines, productItemGroups } = avcsoState;\r\n // const listItems = basketLines || [];\r\n \r\n\r\n if (avcsoState.basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {/*
\r\n Basket Review
\r\n
*/}\r\n\r\n
\r\n {/* contentColumnFilter */}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst BasketDurationSelector = () => {\r\n\r\n const allMonths = [3, 6, 9, 12];\r\n // const [months, setMonths] = useState(12);\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { months } = avcsoState;\r\n\r\n\r\n return useMemo(() => {\r\n console.log('BasketDurationSelector')\r\n\r\n const durationChange = (e) => {\r\n const newMonths = +e.target.value;\r\n avcsoActions.setBasketDuration(newMonths);\r\n // console.log('durationChange', months);\r\n // setMonths(P => newMonths);\r\n }\r\n\r\n return (\r\n \r\n Set Durations:  \r\n \r\n
{`${X} Months`}
}\r\n onChange={durationChange}\r\n input={}\r\n >\r\n {\r\n allMonths.map(M => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n }, [months, avcsoActions])\r\n}\r\n\r\n\r\nconst AVCSO_BasketList = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { basketLines, months } = avcsoState;\r\n\r\n\r\n const pars = useParams();\r\n const selectedItemID = +pars.itemID || 0;\r\n\r\n // const lines = [];\r\n const caption = \"AVCS Online\";\r\n // const { productGroupID, caption, isDigitalPoductGroup } = productGroup;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {/* {open ? : } */}\r\n \r\n\r\n \r\n {\r\n basketLines.map(X => )\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nconst AVCSO_BasketListLine = ({ line, selected }) => {\r\n\r\n const [, avcsoActions] = useAvcsoStore();\r\n const { itemPrice, quantity } = line;\r\n\r\n const item = line;\r\n\r\n const months = itemPrice ? itemPrice.months : false;\r\n\r\n return useMemo(() => {\r\n const to = `${item.itemID}`;\r\n const label = `${months} Months`;\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n Boolean(months) ? : null\r\n }\r\n\r\n \r\n {\r\n e.preventDefault();\r\n avcsoActions.removeBasketItems([item.itemID]);\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [item.itemID, selected, months, quantity])\r\n}\r\n\r\n\r\nconst BasketFooter = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [, avcsoActions] = useAvcsoStore();\r\n\r\n const priceInfo = avcsoActions.getTotalPriceLocal();\r\n const currency = globalActions.getCurrency(priceInfo.currencyID);\r\n\r\n const priceString = priceInfo.valid ? `${currency.code} ${priceInfo.totalPrice}` : 'Calculating...';\r\n return (\r\n \r\n \r\n {`Total Price: ${priceString}`}\r\n \r\n\r\n {/* */}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default AVCSO_BasketReview;\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, TextField, Button, TableFooter } from '@material-ui/core';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { BasketSummary } from '../Basket/CatalogueBasketConfirm';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport _ from 'lodash';\r\n\r\nconst AVCSO_BasketConfirm = ({ history }) => {\r\n const [avcsoState] = useAvcsoStore();\r\n const { basketLines, ordered } = avcsoState;\r\n\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n history.push(`/sales/avcso/add/`);\r\n }\r\n }, [ordered]);\r\n\r\n\r\n if (basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {/*
\r\n AVCSO Confirmation\r\n
*/}\r\n\r\n
\r\n \r\n \r\n Please Note: once confirmed, the order will be processed immediately and can not be undone\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nconst BasketReference = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { reference } = avcsoState;\r\n\r\n return React.useMemo(() => {\r\n\r\n // console.log('BasketReference', reference);\r\n\r\n const handleReferenceChange = (e) => {\r\n const newValue = e.target.value;\r\n // console.log('handleReferenceChange', newValue);\r\n avcsoActions.setReference(newValue);\r\n }\r\n\r\n return (\r\n );\r\n\r\n }, [reference, avcsoActions]);\r\n}\r\n\r\n\r\n\r\nconst BasketOrderButton = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n const { reference, basketLines, ordered } = avcsoState;\r\n const pricesLoaded = avcsoActions.hasBasketPrices();\r\n\r\n const canOrder = pricesLoaded && basketLines.length > 0 && reference.length > 0;\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n console.log('clearData');\r\n avcsoActions.clearData();\r\n }\r\n\r\n\r\n }, [ordered, avcsoActions])\r\n\r\n return React.useMemo(() => {\r\n\r\n const handleBasketOrder = () => {\r\n // console.log('handleBasketOrder');\r\n avcsoActions.orderBasket();\r\n }\r\n\r\n return (\r\n Confirm Order\r\n );\r\n }, [canOrder, avcsoActions])\r\n}\r\n\r\nexport default AVCSO_BasketConfirm;\r\n","import React, { useEffect, useState, useMemo } from 'react'\r\nimport { Route } from \"react-router-dom\";\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { Typography, Button, List, Divider, ButtonGroup } from '@material-ui/core';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport { BasketButton } from '../Basket/Catalogue';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\n\r\nimport AVCSO_SelectItems from './AVCSO_SelectItems';\r\nimport AVCSO_BasketReview from './AVCSO_BasketReview';\r\nimport AVCSO_BasketConfirm from './AVCSO_BasketConfirm';\r\n\r\n// CSS Files\r\nimport salesStyling from '../../CSS/sales.module.css';\r\n\r\nconst AVCSO = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n // const [state, setState] = useState(null);\r\n\r\n const loaded = avcsoActions.isLoaded();\r\n const hasLicense = avcsoActions.hasAvcsoLicense();\r\n // console.log('AVCSO', state, hasLicense);\r\n\r\n useEffect(() => {\r\n avcsoActions.loadData();\r\n\r\n }, []);\r\n\r\n\r\n //console.log(hasLicense);\r\n return (\r\n
\r\n {\r\n hasLicense ? : \r\n }\r\n
\r\n {/* */}\r\n {hasLicense ?\r\n \r\n \r\n \r\n \r\n \r\n : null}\r\n\r\n
\r\n );\r\n}\r\n\r\n\r\nconst AvcsoLicenses = () => {\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\nconst AvcsoButtonList = ({ Vessel }) => {\r\n return (\r\n \r\n\r\n {/* */}\r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nconst AvcsoAddItemsButton = () => {\r\n const [avcsoState] = useAvcsoStore();\r\n const { basketLines } = avcsoState;\r\n\r\n const selected = basketLines.length > 0;\r\n const disabled = false;\r\n\r\n // return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n // }, []);\r\n}\r\n\r\n\r\nconst AvcsoReviewButton = () => {\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { basketLines } = avcsoState;\r\n\r\n\r\n // const hasLines = Boolean(basketLines.length);\r\n\r\n // const vesselID = basketState.vesselID;\r\n const basketItemCount = basketLines.length;\r\n const selected = avcsoActions.hasBasketPrices();\r\n //const selected = null;\r\n const disabled = basketLines.length === 0;\r\n\r\n\r\n useEffect(() => {\r\n\r\n avcsoActions.getBasketPrices();\r\n\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // if (!hasLines) \r\n // return null;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n }, [basketItemCount, disabled, selected]);\r\n}\r\n\r\nconst AvcsoConfirmButton = () => {\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n // const hasLines = Boolean(basketState.basketLines);\r\n\r\n // const vesselID = basketState.vesselID;\r\n const lineCount = avcsoState.basketLines.length;\r\n const pricesLoaded = avcsoActions.hasBasketPrices();\r\n const disabled = (lineCount === 0) || (!pricesLoaded);\r\n const done = !disabled && avcsoState.reference.length > 0;\r\n\r\n // return useMemo(() => {\r\n\r\n // if (!hasLines)\r\n // return null;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n // }, [hasLines, vesselID, disabled, done]);\r\n}\r\n\r\nconst AvcsoInformation = () => {\r\n\r\n return (\r\n \r\n {/*
\r\n AVCS Online\r\n
*/}\r\n\r\n
\r\n \r\n With AVCS online you can now view official UKHO ENC’s directly in your web browser.\r\n This allows you to verify the safety of intended routes for your vessels, while looking at the same charts as on board.\r\n

\r\n A standard AVCS Online license grants access to all ENC’s in band 1.\r\n

\r\n Additional ENC coverage can be purchased and added to your AVCS Online license, should this be required.\r\n

\r\n AVCS Online is the easiest way to have updated ENC’s available to you at any time, anywhere you are.\r\n
\r\n
\r\n\r\n \r\n -\tIn depth insight for maritime professionals -\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\n\r\n\r\n\r\nconst RequestAvcsoInformationButton = () => {\r\n\r\n\r\n const handleRequestInformation = () => {\r\n\r\n // const vesselID = 0;\r\n\r\n httpService.get(`/api/sales/avcso/information`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('handleRequestInformation', data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n\r\n return (\r\n
\r\n Request more information\r\n
\r\n );\r\n}\r\n\r\nexport default AVCSO\r\n","import React from 'react'\r\nimport { Route } from \"react-router-dom\";\r\n\r\n// Breadcrumb\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n// Support Files\r\nimport AVCSO from './AVCSO/AVCSO';\r\n// import AVCSO_SelectItems from './AVCSO/AVCSO_SelectItems';\r\n// import AVCSO_BasketReview from './AVCSO/AVCSO_BasketReview';\r\n// import AVCSO_BasketConfirm from './AVCSO/AVCSO_BasketConfirm';\r\n\r\nconst AVCSOnline = () => {\r\n\r\n return(\r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n )\r\n}\r\n\r\nexport default AVCSOnline","import React, { useMemo } from 'react';\r\nimport _ from 'lodash'\r\nimport './ProductGroupStatus.scss';\r\n\r\nconst ProductGroupStatus = ({ productGroupStatus }) => {\r\n\r\n return useMemo(() => {\r\n\r\n const { itemCount, itemIssueCount, updateIssueCount, itemWarningCount, updateWarningCount } = productGroupStatus;\r\n const total = itemCount;\r\n const issues = Math.ceil(((itemIssueCount + updateIssueCount) * (1 / total) * 360));\r\n const warnings = Math.ceil(((itemWarningCount + updateWarningCount) * (1 / total) * 360));\r\n const open = Math.max(360 - (issues + warnings), 0);\r\n\r\n const tooltip = `Warnings: ${itemWarningCount + updateWarningCount}\\nIssues: ${itemIssueCount + updateIssueCount}`;\r\n\r\n return (\r\n
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={0} data-value={open}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open} data-value={warnings}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings} data-value={issues}>
\r\n

{total}

\r\n
\r\n );\r\n }, [productGroupStatus]);\r\n};\r\n\r\n\r\nexport const HoldingStatus = ({ vesselProductGroupStatus }) => {\r\n\r\n // console.log('HoldingStatus', vesselProductGroupStatus);\r\n\r\n const itemCount = _.sumBy(vesselProductGroupStatus, \"itemCount\") || 0;\r\n\r\n return useMemo(() => {\r\n const itemIssueCount = _.sumBy(vesselProductGroupStatus, \"itemIssueCount\") || 0;\r\n const updateIssueCount = _.sumBy(vesselProductGroupStatus, \"updateIssueCount\") || 0;\r\n const itemWarningCount = _.sumBy(vesselProductGroupStatus, \"itemWarningCount\") || 0;\r\n const updateWarningCount = _.sumBy(vesselProductGroupStatus, \"updateWarningCount\") || 0;\r\n\r\n\r\n // console.log('Counts', itemIssueCount, updateIssueCount, itemWarningCount, updateWarningCount);\r\n\r\n // const { itemCount, itemIssueCount, updateIssueCount, itemWarningCount, updateWarningCount } = vesselProductGroupStatus;\r\n const total = itemCount;\r\n const issues = total > 0 ? Math.ceil(((itemIssueCount + updateIssueCount) * (1 / total) * 360)) : 0;\r\n const warnings = total > 0 ? Math.ceil(((itemWarningCount + updateWarningCount) * (1 / total) * 360)) : 0;\r\n const open = Math.max(360 - (issues + warnings), 0);\r\n\r\n const tooltip = `Warnings: ${itemWarningCount + updateWarningCount}\\nIssues: ${itemIssueCount + updateIssueCount}`;\r\n\r\n return (\r\n
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={0} data-value={open}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open} data-value={warnings}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings} data-value={issues}>
\r\n

{total}

\r\n
\r\n );\r\n }, [itemCount]);\r\n};\r\n\r\n\r\nexport const HoldingLinesStatus = ({ lines }) => {\r\n // console.log('HoldingStatus', lines);\r\n const itemCount = lines.length;\r\n\r\n return useMemo(() => {\r\n\r\n const inactiveCount = lines.filter(X => !X.active).length;\r\n\r\n const itemIssueCount = lines.filter(X => X.active && X.itemIssue).length;\r\n const updateIssueCount = lines.filter(X => X.active && X.updateIssue).length;\r\n\r\n const itemWarningCount = lines.filter(X => X.active && X.itemWarning).length;\r\n const updateWarningCount = lines.filter(X => X.active && X.updateWarning).length;\r\n\r\n\r\n //console.log('Counts Lines', lines);\r\n // console.log('Counts', { itemCount, inactiveCount, Issues: (itemIssueCount + updateIssueCount), Warnings: (itemWarningCount + updateWarningCount)});\r\n\r\n // const { itemCount, itemIssueCount, updateIssueCount, itemWarningCount, updateWarningCount } = lines;\r\n const total = itemCount;\r\n const issues = Math.ceil(((itemIssueCount + updateIssueCount) * (1 / total) * 360));\r\n const warnings = Math.ceil(((itemWarningCount + updateWarningCount) * (1 / total) * 360));\r\n const inactive = Math.ceil((inactiveCount * (1 / total) * 360));\r\n const open = Math.max(360 - (issues + warnings + inactive), 0);\r\n\r\n \r\n //console.log('Counts', { total, inactiveCount, issues, warnings, inactive, open});\r\n\r\n const tooltip = `Warnings: ${itemWarningCount + updateWarningCount}\\nIssues: ${itemIssueCount + updateIssueCount}\\nInactive: ${inactiveCount}`;\r\n\r\n return (\r\n
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={0} data-value={open}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open} data-value={warnings}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings} data-value={issues}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings + issues} data-value={inactive}>
\r\n

{total}

\r\n
\r\n );\r\n}, [itemCount]);\r\n};\r\n\r\nexport default ProductGroupStatus;\r\n","import React, { useEffect } from 'react';\r\nimport { Box, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport _ from 'lodash';\r\nimport VesselProductGroups from './VesselProductGroups';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { HoldingStatus } from '../../../Widgets/ProductGroupStatus';\r\n\r\nconst Holdings = ({ match }) => {\r\n\r\n const [fleetState] = useFleetStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n // console.log('match', selectedVesselID);\r\n\r\n // const salesOrderID = 0;\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n\r\n const loaded = Boolean(fleetState.vessels);\r\n let vessels = loaded ? fleetState.vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels.map(X => (\r\n }\r\n linkTo={`/fleet/holdings/${X.vesselID}`}\r\n />))\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Holdings;\r\n","import React, { } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { IconButton, Link } from '@material-ui/core';\r\n\r\nconst CloseButtonLink = ({ to }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default CloseButtonLink\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { Divider, Typography, ListItem, TableBody, TableCell, Table, TableHead, TableRow, Dialog } from '@material-ui/core';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\nimport LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport StatusCircle from '../../../../Widgets/StatusCircle';\r\nimport { getHoldingStatusClass } from '../../../../MapControl/Helpers/GlobalHelper';\r\n\r\nimport http from '../../../../../Global/Services/httpService';\r\nimport CloseButtonLink from '../../../../Widgets/Buttons/CloseButtonLink';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nimport FloatingMenuButton from '../../../Navigation/FloatingMenuButton';\r\n\r\nconst VesselHoldingsLineDetail = ({ match }) => {\r\n\r\n const [fleetState] = useFleetStore();\r\n\r\n const vesselID = +match.params.vesselID;\r\n const itemID = +match.params.itemID;\r\n const hasData = Boolean(fleetState.holdingDetail);\r\n\r\n const [openDialog, setOpenDialog] = React.useState(true);\r\n \r\n const closeDialog = () => {\r\n setOpenDialog(false);\r\n };\r\n\r\n\r\n // console.log('VesselHoldingsLineDetail 00');\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('VesselHoldingsLineDetail 01');\r\n\r\n const loaded = Boolean(_.get(fleetState, 'holdingDetail.vessel', false));\r\n\r\n // if (!fleetState.holdingDetail || !fleetState.holdingDetail.vessel) return null;\r\n const currentLine = loaded ? fleetState.holdingDetail.vessel.vesselItems.find(X => X.itemID === itemID) : null;\r\n\r\n // console.log('VesselHoldingsLineDetail 02');\r\n\r\n // if (!currentLine)\r\n // return null;\r\n\r\n\r\n // console.log('VesselHoldingsLineDetail 03', currentLine);\r\n\r\n const productGroup = loaded ? fleetState.holdingDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n // console.log('productGroup', productGroup);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n\r\n\r\n }, [hasData, vesselID, itemID]);\r\n};\r\n\r\nconst VesselHoldingsLineDetailHeader = ({ line }) => {\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n\r\n \r\n\r\n {/* \r\n {line.item.itemTitle}\r\n */}\r\n \r\n \r\n );\r\n }, [line.item.itemID])\r\n\r\n}\r\n\r\nconst VesselHoldingsLineDetailList = ({ line, productGroup }) => {\r\n\r\n const itemClass = getHoldingStatusClass(line.itemIssue, line.itemWarning);\r\n const updateClass = getHoldingStatusClass(line.updateIssue, line.updateWarning);\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n {\r\n !line.item.polygonPoints && (\r\n \r\n Map outline not available\r\n \r\n )\r\n }\r\n\r\n \r\n {line.item.isDigital ? 'License' : 'Edition'}\r\n \r\n \r\n {line.item.isDigital ? 'Updates' : 'Corrections'}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nconst VesselHoldingsLineDetailCorrections = ({ line }) => {\r\n\r\n const [detailState, setDetailState] = useState({\r\n vesselID: 0,\r\n itemID: 0,\r\n itemCorrections: [],\r\n itemHistoryItems: [],\r\n });\r\n\r\n const { vesselID, item } = line;\r\n\r\n useEffect(() => {\r\n if (vesselID > 0) {\r\n http.get(`/api/fleet/holdings/${vesselID}/${item.itemID}/details`)\r\n .then(result => {\r\n\r\n if (result.data && result.data.vesselID === vesselID) {\r\n setDetailState(() => {\r\n return { ...result.data }\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n }, [vesselID, item.itemID])\r\n\r\n\r\n return useMemo(() => {\r\n\r\n if (vesselID !== detailState.vesselID)\r\n return null;\r\n\r\n if (detailState.itemCorrections.length === 0)\r\n return null;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n NM Number\r\n \r\n \r\n {/* Published */}\r\n Published\r\n \r\n \r\n\r\n Status\r\n \r\n \r\n \r\n\r\n \r\n {\r\n detailState.itemCorrections.map((X, i) => (\r\n \r\n {X.name}\r\n {X.year}/{(\"0\" + X.week).slice(-2)}\r\n \r\n \r\n {/* {X.issue ? 'Y' : 'No'} */}\r\n \r\n \r\n ))\r\n }\r\n\r\n \r\n
\r\n
\r\n );\r\n }, [detailState, vesselID, item]);\r\n}\r\n\r\nconst CorrectionItemStatus = ({ correctionItem }) => {\r\n\r\n const updateClass = getHoldingStatusClass(correctionItem.issue, correctionItem.warning);\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default VesselHoldingsLineDetail;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport { IconButton, Divider, ListItemText, Grid } from '@material-ui/core';\r\nimport MailTo, { MailHoldingDetailTo } from '../../../Misc/MailTo';\r\n// import OrderStatus from '../../../Widgets/OrderStatus';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport { DownloadHoldings } from '../../../Misc/DownloadFile';\r\n\r\nconst HoldingDetailHeader = ({ holdingDetail, history }) => {\r\n\r\n if (!holdingDetail) return null;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(HoldingDetailHeader);\r\n","import React, { useState, useMemo } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport _ from 'lodash';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport HoldingLineStatus from '../../../../Widgets/HoldingLineStatus';\r\n\r\nconst HoldingDetailList = ({ holdingDetail, selectedItemID, selectedGroups, toggleSelectedGroup }) => {\r\n\r\n\r\n const { vessel, productGroups } = holdingDetail;\r\n\r\n // console.log('HoldingDetailList', holdingDetail);\r\n\r\n if (!holdingDetail || !vessel.vesselItems) return null;\r\n\r\n\r\n let lines = vessel.vesselItems;\r\n if (holdingDetail.filter) {\r\n // console.log('holdingFilter 1', holdingDetail.filter);\r\n const statusFilter = holdingDetail.filter.status;\r\n lines = lines\r\n // .filter(X => (holdingDetail.filter.productGroupID === -1 || holdingDetail.filter.productGroupID === X.item.productGroupID) &&\r\n // holdingDetail.filter.scale.includes(X.item.productItemGroupID || 0))\r\n .filter(X => (\r\n (\r\n (statusFilter.issue && (X.issue)) ||\r\n (statusFilter.warning && (X.warning)) ||\r\n (statusFilter.valid && (X.valid))\r\n )));\r\n }\r\n\r\n lines = _.orderBy(lines, ['item.itemNumber'], ['asc']);\r\n\r\n const headers = productGroups.map(X => );\r\n\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\n\r\n\r\nconst HoldingProductGroup = ({ productGroup, vessel, lines, open, toggleSelectedGroup, selectedItemID }) => {\r\n\r\n const productgroupItemsAll = vessel.vesselItems.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n\r\n const itemLength = productgroupItems.length;\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('productgroupItemsAll.length', productgroupItemsAll.length);\r\n // console.log('productgroupItems.length', open, productgroupItems.length);\r\n\r\n if (productgroupItemsAll.length === 0)\r\n return null;\r\n\r\n return (\r\n \r\n toggleSelectedGroup(productGroup.productGroupID)} button divider selected={open}>\r\n \r\n \r\n \r\n\r\n \r\n I.item.productGroupID === productGroup.productGroupID)} />\r\n {/* */}\r\n {\r\n open ? : \r\n }\r\n \r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n );\r\n\r\n }, [open, selectedItemID, itemLength]);\r\n}\r\n\r\n\r\nconst HoldingLine = ({ line, selected }) => {\r\n const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default HoldingDetailList;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Checkbox, MenuItem, Select, Input, ListItemText, FormControl } from '@material-ui/core';\r\n\r\nconst status = {\r\n valid: true,\r\n warning: true,\r\n issue: true,\r\n inactive: false,\r\n};\r\n\r\n\r\n\r\nconst HoldingsFilter = ({ fleetActions, productItemGroups, selectedGroups }) => {\r\n\r\n const [statusFilter, setStatusFilter] = useState(status);\r\n const [scaleFilter, setScaleFilter] = useState(productItemGroups.map(X => X.productItemGroupID));\r\n\r\n const productGroupID = selectedGroups[0] || 0;\r\n // console.log('productItemGroups', productItemGroups);\r\n // console.log('selectedGroups', );\r\n // console.log('scaleFilter', scaleFilter);\r\n // const [personName, setPersonName] = React.useState([]);\r\n\r\n useEffect(() => {\r\n setScaleFilter(_ => productItemGroups.map(X => X.productItemGroupID));\r\n setStatusFilter(_ => status);\r\n }, [productItemGroups]);\r\n\r\n\r\n useEffect(() => {\r\n fleetActions.filterHoldingDetail({ productGroupID: productGroupID, scale: scaleFilter, status: statusFilter });\r\n }, [productGroupID])\r\n\r\n const statusChange = (e) => {\r\n const name = e.target.name;\r\n\r\n setStatusFilter(prev => {\r\n\r\n const newFilter = { ...prev };\r\n newFilter[name] = !newFilter[name];\r\n //console.log('newFilter', name, newFilter);\r\n fleetActions.filterHoldingDetail({ productGroupID: productGroupID, scale: scaleFilter, status: newFilter })\r\n return newFilter;\r\n });\r\n };\r\n\r\n const scaleChange = (e) => {\r\n const val = e.target.value;\r\n setScaleFilter(() => {\r\n const newScales = [...val];\r\n fleetActions.filterHoldingDetail({ productGroupID: productGroupID, scale: newScales, status: statusFilter });\r\n return newScales;\r\n });\r\n };\r\n\r\n const selectableProductItemGroups = selectedGroups.length > 0 ? productItemGroups.filter(X => X.productGroupID === selectedGroups[0]) : productItemGroups;\r\n const selectedPIGs = selectableProductItemGroups.filter(X => scaleFilter.includes(X.productItemGroupID)).length;\r\n\r\n return (\r\n \r\n
\r\n {/* OK, Warning, Error */}\r\n \r\n \r\n \r\n \r\n
\r\n {/* */}\r\n {/* */}\r\n\r\n \r\n
Scale [{selectedPIGs}/{selectableProductItemGroups.length}]
}\r\n // rowsMax={10}\r\n onChange={scaleChange}\r\n input={}\r\n >\r\n {\r\n selectableProductItemGroups.map(PG => (\r\n \r\n \r\n \r\n \r\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 HoldingsFilter;\r\n","import React, { useEffect, useState } from 'react';\r\nimport HoldingDetailHeader from '../VesselHoldingsDetail/HoldingDetailHeader';\r\nimport HoldingDetailList from '../VesselHoldingsDetail/HoldingDetailList';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\nimport HoldingsFilter from '../../../../Widgets/Filters/HoldingsFilter';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { Divider } from '@material-ui/core';\r\n\r\nconst VesselHoldingsDetail = ({ match }) => {\r\n const vesselID = +match.params.vesselID;\r\n const itemID = +match.params.itemID;\r\n const [fleetState, fleetActions] = useFleetStore();\r\n\r\n\r\n const [selectedGroups, setSelectedGroups] = useState([]);\r\n\r\n // console.log('fleetState', fleetState);\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID);\r\n\r\n return () => {\r\n fleetActions.clearVesselHoldings();\r\n }\r\n },\r\n [vesselID]\r\n );\r\n\r\n const toggleSelectedGroup = (pgid) => {\r\n\r\n //console.log(\"toggleSelectedGroup\", pgid);\r\n // const newState = selectedGroups.includes(pgid) ? selectedGroups.filter(X => X !== pgid) : [...selectedGroups, pgid];\r\n // setSelectedGroups(prev => prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid]);\r\n setSelectedGroups(prev => prev.includes(pgid) ? [] : [pgid]);\r\n }\r\n\r\n\r\n const loaded = _.get(fleetState, 'holdingDetail.vessel.vesselID', -1) === vesselID;\r\n const filterID = +_.get(fleetState, 'holdingDetail.filter.id', 0);\r\n\r\n // console.log('filterID', { filterID, ...selectedGroups });\r\n\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n


\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
) : null\r\n\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default VesselHoldingsDetail;\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport Holdings from './Holdings/Holdings';\r\nimport VesselHoldingsLineDetail from './Holdings/VesselHoldingsLineDetail/VesselHoldingsLineDetail';\r\nimport VesselHoldingsDetail from './Holdings/VesselHoldingsDetail/VesselHoldingsDetail';\r\n\r\nimport BreadCrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst FleetHoldings = () => {\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getHoldingsOverview();\r\n fleetActions.getFleetPositions();\r\n }, []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n


\r\n
\r\n );\r\n};\r\n\r\nexport default FleetHoldings;\r\n","import React from 'react';\r\nimport { Chip } from '@material-ui/core';\r\n// import _ from 'lodash';\r\n\r\nconst ChipStatus = ({ number, statusColor }) => {\r\n return ((number || 0) ? : null)\r\n}\r\n\r\nexport const ChipStatusValid = ({ number }) => {\r\n return ((number || 0) ? : null)\r\n}\r\n\r\nexport const ChipStatusWarning = ({ number }) => {\r\n return ((number || 0) ? : null)\r\n}\r\n\r\nexport const ChipStatusIssue = ({ number }) => {\r\n\r\n // console.log('number', number)\r\n return ((number || 0) ? : null)\r\n}\r\n\r\nexport default ChipStatus;\r\n","import React, { useMemo } from 'react';\r\nimport { Box, List, ListItem, ListItemIcon, ListItemText, Link, Chip, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport ChipStatus from '../../../Widgets/Status/ChipStatus';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport _ from 'lodash';\r\n\r\nconst FleetStatus = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const selectedID = +match.params.vesselID;\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n const loaded = Boolean(fleetState.vessels);\r\n\r\n const vessels = _.orderBy(fleetState.vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n return (\r\n \r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n loaded ? (\r\n \r\n {\r\n\r\n vessels\r\n .filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1))\r\n .map(X => (\r\n }\r\n linkTo={`/fleet/status/${X.vesselID}`}\r\n />))\r\n }\r\n \r\n \r\n ) : \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst VesselFleetStatusChips = ({ vesselItemProductGroups }) => {\r\n\r\n const totalQuantity = _.sumBy(vesselItemProductGroups, \"totalQuantity\");\r\n const totalWarning = _.sumBy(vesselItemProductGroups, \"itemWarningCount\") + _.sumBy(vesselItemProductGroups, \"updateWarningCount\");\r\n const totalIssue = _.sumBy(vesselItemProductGroups, \"itemIssueCount\") + _.sumBy(vesselItemProductGroups, \"updateIssueCount\");\r\n const totalValid = totalQuantity - totalWarning - totalIssue;\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }, []);\r\n}\r\n\r\nexport default FleetStatus;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Typography, Table, TableHead, TableRow, TableCell, TableBody, Dialog, Grid } from '@material-ui/core';\r\nimport Loading from '../../Misc/Loading';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport CloseButtonLink from '../../../Widgets/Buttons/CloseButtonLink';\r\nimport _ from 'lodash';\r\nimport ChipStatus, { ChipStatusValid, ChipStatusWarning, ChipStatusIssue } from '../../../Widgets/Status/ChipStatus';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport FloatingMenuButton from '../../Navigation/FloatingMenuButton';\r\n\r\nconst FleetStatusDetail = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const vesselID = +match.params.vesselID;\r\n\r\n const [openDialog, setOpenDialog] = React.useState(true);\r\n \r\n const closeDialog = () => {\r\n setOpenDialog(false);\r\n };\r\n\r\n\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID);\r\n\r\n // return () => {\r\n // fleetActions.clearVesselHoldings();\r\n // }\r\n },\r\n [vesselID]\r\n );\r\n\r\n const detail = fleetState.holdingDetail;\r\n const loaded = _.get(fleetState, 'holdingDetail.vessel.vesselID', -1) === vesselID;\r\n\r\n // console.log('detail.vessel', detail.vessel);\r\n return (\r\n \r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {detail.vessel.vesselName}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n Product\r\n OK\r\n Item Issues\r\n Update Issues\r\n \r\n \r\n \r\n {\r\n _.sortBy(detail.productGroups, 'sortIndex')\r\n .map((P) => {\r\n return (\r\n P.productGroupID === V.item.productGroupID)} />\r\n );\r\n })\r\n }\r\n \r\n
\r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\n\r\nconst VesselProductGroupStatus = ({ productGroup, vesselItems }) => {\r\n\r\n //console.log('vesselItems', vesselItems)\r\n\r\n return useMemo(() => {\r\n if (vesselItems.length === 0)\r\n return null;\r\n\r\n const totalQuantity = +_.sumBy(vesselItems, \"quantity\");\r\n const itemWarning = +_.sumBy(vesselItems, \"itemWarning\");\r\n const itemIssue = +_.sumBy(vesselItems, \"itemIssue\");\r\n const updateWarning = +_.sumBy(vesselItems, \"updateWarning\");\r\n const updateIssue = +_.sumBy(vesselItems, \"updateIssue\");\r\n\r\n const totalValid = totalQuantity - itemWarning - itemIssue - updateWarning - updateIssue;\r\n\r\n // console.log('Status', {\r\n // totalQuantity,\r\n // itemWarning,\r\n // itemIssue,\r\n // updateWarning,\r\n // updateIssue,\r\n // })\r\n\r\n return (\r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [vesselItems.length])\r\n\r\n\r\n}\r\n\r\nexport default FleetStatusDetail;\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport Status from './FleetStatus/FleetStatus';\r\nimport FleetStatusDetail from './FleetStatus/FleetStatusDetail';\r\n\r\nimport BreadCrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst FleetStatus = () => {\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getHoldingsOverview();\r\n fleetActions.getFleetPositions();\r\n }, []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n


\r\n
\r\n );\r\n};\r\n\r\nexport default FleetStatus;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport { List, Divider } from '@material-ui/core';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport _ from 'lodash';\r\nimport ChipStatus from '../../../Widgets/Status/ChipStatus';\r\nimport BlockIcon from '@material-ui/icons/Block';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\n\r\nconst NavigatorUpdates = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const [globalState] = useGlobalStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n\r\n const hasUpdateInfo = Boolean(fleetState.vesselUpdates);\r\n const loaded = Boolean(globalState.vessels) && hasUpdateInfo;\r\n\r\n // const vessels = fleetState.vessels || []; \r\n // const vessels = _.orderBy(globalState.vessels, ['vesselName']);\r\n\r\n useEffect(() => {\r\n fleetActions.getVesselUpdating();\r\n }, []);\r\n\r\n\r\n const onSearch = (text) => {\r\n // console.log('onSearch', text);\r\n setFilter(() => { return text.toLowerCase(); });\r\n };\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels\r\n .filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1))\r\n .map(X => (\r\n X.vesselID === U.vesselID) : null}\r\n Selected={X.vesselID === selectedVesselID}\r\n />))\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst NavigatorVesselListItem = ({ Vessel, UpdateInfo, Selected }) => {\r\n\r\n //let history = useHistory();\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('basket VesselID', Selected);\r\n\r\n const { vesselID } = Vessel;\r\n\r\n\r\n\r\n // const patchLevel = _.get(UpdateInfo, 'patchLevel', null);\r\n const days = _.get(UpdateInfo, 'days', null);\r\n const updateIssue = _.get(UpdateInfo, 'updateIssue', false);\r\n const updateWarning = _.get(UpdateInfo, 'updateWarning', null);\r\n const blocked = _.get(UpdateInfo, 'blocked', false);\r\n // console.log('UpdateInfo.patchLevel', patchLevel);\r\n\r\n let statusColor = \"Green\";\r\n if (updateIssue) { statusColor = \"Red\" }\r\n else if (updateWarning) { statusColor = \"Orange\" }\r\n\r\n\r\n const handleVesselClick = (vesselID) => {\r\n //// console.log('Vessel Click', Vessel, vesselID);\r\n //BasketActions.setVessel(vesselID);\r\n //history.push(`/sales/catalogue/${vesselID}`);\r\n }\r\n\r\n return (\r\n \r\n \r\n {blocked === true && ()}\r\n\r\n \r\n }\r\n >\r\n\r\n \r\n );\r\n\r\n }, [Vessel, UpdateInfo, Selected]);\r\n\r\n}\r\n\r\nexport default NavigatorUpdates\r\n","import React, { useEffect, useState } from 'react';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, Dialog, Grid } from '@material-ui/core';\r\n// import { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport Moment from 'react-moment';\r\nimport DoneIcon from '@material-ui/icons/Done';\r\nimport CloseButtonLink from '../../../Widgets/Buttons/CloseButtonLink';\r\n\r\n\r\nconst NavigatorUpdateList = ({ match }) => {\r\n const [openDialog, setOpenDialog] = React.useState(true);\r\n \r\n const closeDialog = () => {\r\n setOpenDialog(false);\r\n };\r\n\r\n\r\n const loaded = true;\r\n const vesselID = +match.params.vesselID || 0;\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n Update History\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst VesselUpdateHistory = ({ VesselID }) => {\r\n const [updates, setUpdates] = useState([]);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/navigator/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('VesselUpdateHistory', data);\r\n setUpdates(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n\r\n }, [VesselID]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n #\r\n Date\r\n Size\r\n Loaded\r\n \r\n \r\n \r\n {\r\n updates.map(row => (\r\n \r\n {row.edbRequestID}\r\n\r\n \r\n \r\n \r\n\r\n {readableBytes(row.updateSize)}\r\n\r\n {row.loaded ? : ''}\r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst readableBytes = (bytes) => {\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']\r\n\r\n\r\n if (!bytes) return 'N/A'\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\r\n\r\n return (bytes / Math.pow(1024, i)).toFixed(2) + ' ' + sizes[i];\r\n}\r\n\r\nexport default NavigatorUpdateList;\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport NavigatorUpdates from './Navigator/Navigator';\r\nimport NavigatorUpdateList from './Navigator/NavigatorUpdateList';\r\n\r\nimport BreadCrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst FleetNavigatorStatus = () => {\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getHoldingsOverview();\r\n fleetActions.getFleetPositions();\r\n }, []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n


\r\n
\r\n );\r\n};\r\n\r\nexport default FleetNavigatorStatus;\r\n","import React from 'react';\r\nimport { Typography, List, Divider } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport _ from 'lodash';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\n\r\nconst FleetDetails = ({ match }) => {\r\n\r\n const [globalState] = useGlobalStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n\r\n const loaded = Boolean(globalState.vessels);\r\n\r\n const vessels = _.orderBy(\r\n (globalState.vessels || []).filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1)),\r\n ['vesselName'],\r\n [sort > 0 ? 'asc' : 'desc']);\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n\r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n


\r\n {\r\n \r\n {\r\n vessels\r\n .map(X => (\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 FleetDetails\r\n","import React from 'react'\r\n\r\n// \r\nimport httpService from '../../../Global/Services/httpService';\r\n\r\n// Maetrial UI support files\r\nimport { makeStyles, Button, CardMedia, CardContent, CardActions, CardActionArea, Card, Typography } from \"@material-ui/core\";\r\n\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\n// Images\r\n\r\n\r\n/* Custom CSS Files */\r\n//import loginStyles from '../CSS/LoginStyles.module.css'\r\n// theme.palette.secondary.main\r\n\r\n// FIXES:\r\n\r\n\r\n/*All view imports*/\r\n\r\n\r\n// Unneccessary required styling \r\nconst useStyles = makeStyles({\r\n card: {\r\n maxWidth: \"100%\",\r\n },\r\n media: {\r\n height: 140,\r\n },\r\n });\r\n\r\n// Request Information\r\nconst handleRequestInformation = () => {\r\n\r\n // const vesselID = 0;\r\n httpService.get(`/api/fleet/tracking/information`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('Tracking Information', data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n}\r\n\r\n\r\n\r\nconst FleetTracking = () => {\r\n const classes = useStyles();\r\n return(\r\n \r\n \r\n \r\n

\r\n \r\n \r\n \r\n \r\n Track Your Vessels\r\n \r\n \r\n Do you need to know where your assets are at any time of the day?\r\n \r\n Contact us right now to get more information on the various fleet tracking options Ship Manager has to offer!\r\n \r\n \r\n \r\n \r\n Request more information\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default FleetTracking","import React, { useState, useEffect, useMemo } from 'react';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport { IconButton, Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, Checkbox, Link, Chip, Grid, Divider } from '@material-ui/core';\r\nimport Moment from 'react-moment';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport { ChipStatusValid, ChipStatusWarning, ChipStatusIssue } from '../../../Widgets/Status/ChipStatus';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport ArrowBack from '@material-ui/icons/ArrowBack';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport _ from 'lodash'\r\n// import CloseButtonLink from '../../../Widgets/Buttons/CloseButtonLink';\r\n\r\n// import FloatingMenuButton from '../../Navigation/FloatingMenuButton';\r\n\r\nconst FleetDetailsVessel = ({ match }) => {\r\n\r\n const [openDialog, setOpenDialog] = React.useState(true);\r\n \r\n const closeDialog = () => {\r\n setOpenDialog(false);\r\n };\r\n\r\n const vesselID = +match.params.vesselID || 0;\r\n // const vesselName = \r\n if (vesselID <= 0)\r\n return null;\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n */}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n {/* */}\r\n
\r\n );\r\n}\r\n\r\nconst VesselDetailsHeader = ({ VesselID }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n const { vessels } = globalState;\r\n return useMemo(() => {\r\n const vessel = globalActions.findVessel(VesselID) || {};\r\n return ({vessel.vesselName});\r\n }, [VesselID, vessels]);\r\n}\r\n\r\nconst VesselDetails = ({ VesselID }) => {\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\nconst VesselGeneralInfoTable = ({ VesselID }) => {\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/general/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"GENERAL INFORMATION\";\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title}\r\n \r\n \r\n \r\n {\r\n open && details && (\r\n \r\n \r\n e-mail:\r\n \r\n \r\n \r\n \r\n \r\n IMO:\r\n {details.imo || 'N/A'}\r\n \r\n \r\n Manager:\r\n {details.manager}\r\n \r\n \r\n Responsible:\r\n \r\n \r\n \r\n \r\n \r\n Chart Agent:\r\n {details.chartagent}\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselDocumentsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/documents/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"LICENSES/CERTIFICATES\";\r\n //const titleFull = details ? `${Title} [${1 + +details.avcsPermit + +details.navigator}]` : `${Title}`;\r\n const count = details && ;\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n \r\n {Title} {count}\r\n \r\n \r\n \r\n \r\n {\r\n open && details && (\r\n \r\n {\r\n details.avcsPermit && (\r\n \r\n AVCS permit:\r\n \r\n } href={httpService.getVesselAvcsPermitLink(VesselID)} />\r\n \r\n \r\n )}\r\n\r\n \r\n Certificate of Enrollment:\r\n \r\n } href={httpService.getVesselCertificateLink(VesselID)} />\r\n  \r\n \r\n \r\n \r\n\r\n {\r\n details.navigator && (\r\n \r\n Navigator License:\r\n \r\n } href={httpService.getVesselNavigatorLicenseLink(VesselID)} />\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst SendVesselCertificateIcon = ({ VesselID }) => {\r\n\r\n const handleMailCertificate = () => {\r\n // console.log('handleMailCertificate', VesselID);\r\n\r\n httpService.get(`/api/file/enrollment/${VesselID}/mail`)\r\n .then(response => { })\r\n .catch(error => { });\r\n }\r\n\r\n return ();\r\n}\r\n\r\n\r\nconst VesselSubscriptionsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/subscriptions/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('general', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n\r\n const Title = \"SUBSCRIPTIONS\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n \r\n {Title} {count}\r\n \r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Subscription\r\n Until\r\n Paused\r\n \r\n )}\r\n \r\n \r\n\r\n {\r\n open && details && details.map(X => (\r\n \r\n {X.subscriptionService}\r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Subscriptions -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselShipmentHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/shipments/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesShipmentID);\r\n // console.table(data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"SHIPMENT HISTORY\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Delivery\r\n Shipment\r\n Status\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.salesShipmentStatus}\r\n {/* {X.totalPrice} {X.currency} */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Shipments -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselApprovelsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState([]);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/approvals/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('general', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"QUOTATIONS TO APPROVE\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n {\r\n open && details && details.length > 0 && (\r\n \r\n Expires\r\n Quote\r\n Qty\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.totalQuantity}\r\n {X.totalPrice} {X.currency}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Approvals -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
);\r\n\r\n}\r\n\r\nconst VesselFlatFeeHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/flatfees/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesShipmentID);\r\n // console.table(data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"FLAT FEE CONTRACTS\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Products\r\n End Date\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n {X.productGroups}\r\n \r\n {X.price} {X.currency}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Flat Fee contracts -\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselOrderHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/orders/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesOrderID);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n\r\n const Title = \"ORDER HISTORY\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Ordered\r\n Order\r\n Qty\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.totalQuantity}\r\n {X.totalPrice} {X.currency}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Orders -\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselHoldingStatusTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/holdings/${VesselID}/status`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('holdings status', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"INVENTORY STATUS\";\r\n //const titleFull = details ? `${Title} [${details.productGroupStatus.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.productGroupStatus.length > 0 && (\r\n \r\n Product\r\n OK\r\n Edition\r\n Correction\r\n \r\n\r\n )}\r\n \r\n \r\n\r\n {\r\n open && details && details.productGroupStatus.map((X, index) => (\r\n \r\n {details.productGroups.find(P => P.productGroupID === X.productGroupID).caption}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.productGroupStatus.length === 0 && (\r\n \r\n - There are no Holdings -\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n\r\n}\r\n\r\n\r\nconst CountChip = ({ object, objectLink, Count = -1 }) => {\r\n\r\n\r\n const count = _.get(object, objectLink, Count);\r\n\r\n if (count < 0) return null;\r\n\r\n return ();\r\n}\r\n\r\nconst LinkTo = ({ text, icon, href }) => {\r\n\r\n return (\r\n \r\n {text}\r\n {icon}\r\n );\r\n}\r\n\r\n\r\nexport default FleetDetailsVessel\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\n\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport FleetDetails from './Details/FleetDetails';\r\nimport FleetDetailsVessel from './Details/FleetDetailsVessel';\r\n\r\nimport BreadCrumb from '../Navigation/Breadcrumb';\r\n\r\n\r\nconst FleetOverview = () => {\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getHoldingsOverview();\r\n fleetActions.getFleetPositions();\r\n }, []\r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n


\r\n
\r\n );\r\n};\r\n\r\nexport default FleetOverview;\r\n","import React, { useEffect } from 'react';\r\nimport _ from 'lodash';\r\nimport {InputLabel, MenuItem, FormControl, Select } from '@material-ui/core';\r\nimport { useHistory, Link, Redirect } from 'react-router-dom';\r\n//import { useFleetStore } from '../../../Global/Stores/fleetStore';\r\n\r\nconst SelectList = ({ managerID, dataList, inputLabel, inputType, selected }) => {\r\n let history = useHistory();\r\n const [company, setCompany] = React.useState('');\r\n\r\n // Set this so if there is no selecttion, we can \r\n if(selected === 0 || selected === null){selected = null};\r\n //const [companyID, setCompanyID] = React.useState('');\r\n\r\n //lets count the results so if it's empty we show something nice. \r\n // Am a nice person... no?\r\n let countDataResults = dataList.length;\r\n\r\n //lets define what to show when there is no data in the select box \r\n let noDataMessage = inputType === \"managers\" ? \"No Managers Found\" : \"No Folios Found\";\r\n\r\n\r\n // We are going to count the results and only use it if its a folio. \r\n // When result is one we preselect.\r\n let countData = dataList.length;\r\n let loaded = Boolean(dataList);\r\n\r\n useEffect (\r\n () => {\r\n if(inputType === \"folios\"){\r\n if(dataList.length === 1)\r\n {\r\n //console.log(dataList)\r\n selected = loaded ? dataList[0].folioID : selected;\r\n history.push(`/folios/status/${managerID}/${selected}`)\r\n }\r\n }\r\n }, [dataList]\r\n );\r\n\r\n // const [, fleetActions] = useFleetStore();\r\n // const [fleetState] = useFleetStore();\r\n // const [filter, setFilter] = React.useState('');\r\n // const [sort, setSort] = React.useState(1);\r\n\r\n // useEffect(\r\n // () => {\r\n // //fleetActions.getHoldingsOverview();\r\n // fleetActions.getFolioOverview();\r\n // fleetActions.getFleetPositions();\r\n // }, []\r\n // );\r\n\r\n // const loaded = Boolean(fleetState.folios);\r\n // let companyList = loaded ? fleetState.folios.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n //console.log(`Company ID is now: ${companyID}`);\r\n\r\n const handleChange = (event) => {\r\n setCompany(event.target.value);\r\n //setCompanyID(event.target.key);\r\n if(countDataResults >= 1){\r\n if(managerID != null)\r\n {\r\n history.push(`/folios/status/${managerID || 0}/${event.target.value}`);\r\n //console.log(\"Triger folio change\");\r\n }\r\n else\r\n {\r\n history.push(`/folios/status/${event.target.value}`);\r\n //console.log(\"Trigger company\");\r\n }\r\n }\r\n };\r\n\r\n //if(companyID != 0)\r\n //{\r\n return (\r\n
\r\n \r\n {inputLabel}\r\n \r\n {\r\n countDataResults <= 0 ?\r\n {noDataMessage}\r\n :\r\n dataList.map(X => (\r\n inputType === \"managers\"?\r\n {X.name}\r\n :\r\n {X.title}\r\n ))\r\n }\r\n \r\n \r\n
\r\n );\r\n // }\r\n // else\r\n // {\r\n // return (null);\r\n // }\r\n};\r\n\r\nexport default SelectList;\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Divider, Link, makeStyles } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n// import _ from 'lodash';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n listItem: {\r\n // backgroundColor: '#e9edf7',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst ListFoilioItems = ({ vessel, subText, number, numberSmall, open, subSelectedID, children, setOpen, onClick, statusComponent, linkTo, selected }) => {\r\n const classes = useStyles();\r\n\r\n // return useMemo(() => {\r\n\r\n const handleClick = () => {\r\n\r\n if (onClick) {\r\n onClick(vessel.vesselID);\r\n }\r\n\r\n\r\n if (children) {\r\n setOpen(!open);\r\n }\r\n\r\n }\r\n //Convert to upper case\r\n const vesselName = vessel.vesselName.toUpperCase();\r\n\r\n const listItem = (\r\n \r\n {/* */}\r\n \r\n\r\n {\r\n number ? : null\r\n }\r\n\r\n {\r\n numberSmall ? : null\r\n }\r\n\r\n {\r\n statusComponent ? statusComponent : null\r\n }\r\n\r\n {\r\n children ? (open === true ? : ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n {\r\n linkTo ? {listItem} : listItem\r\n }\r\n\r\n {\r\n children ? children : null\r\n }\r\n \r\n );\r\n // }, [vessel, number, subText, numberSmall, subSelectedID, open, selected]);\r\n\r\n};\r\n\r\nexport default ListFoilioItems;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport Loading from '../Desktop/Misc/Loading';\r\nimport { useColumnStore } from '../../Global/Stores/columnStore';\r\nimport { useUserStore } from '../../Global/Stores/userStore';\r\n\r\nconst ContentColumnNoMemo = ({ children, loaded, selectedID = null, access = false, disablePadding = false }) => {\r\n\r\n const [, columnActions] = useColumnStore();\r\n const [, userActions] = useUserStore();\r\n\r\n const [featureAccess, setFeatureAccess] = useState(false);\r\n\r\n const location = window.location.pathname;\r\n\r\n const id = selectedID === null ? new Date() : selectedID;\r\n\r\n useEffect(() => {\r\n const hasAccess = access || userActions.canAccessPath(window.location.pathname);\r\n setFeatureAccess(() => hasAccess);\r\n }, [])\r\n\r\n useEffect(() => {\r\n columnActions.addColumn(1);\r\n return () => {\r\n columnActions.addColumn(-1);\r\n };\r\n }, []);\r\n\r\n\r\n // console.log('location', window.location.pathname);\r\n\r\n const paddingClass = disablePadding === true ? 'disablePadding' : '';\r\n\r\n // return useMemo(() => {\r\n //console.log('location', location);\r\n\r\n return featureAccess === true ? (\r\n \r\n {/* */}\r\n {loaded === true ? children : }\r\n \r\n ) : null;\r\n\r\n // }, [loaded, featureAccess, location, id]);\r\n\r\n};\r\n\r\nexport default ContentColumnNoMemo;\r\n","import React, { useEffect } from 'react';\r\nimport { Box, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport SelectList from '../../Misc/SelectList';\r\n//import { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport { useFolioStore } from '../../../../Global/Stores/folioStore';\r\n//import Loading from '../../Misc/Loading';\r\nimport _ from 'lodash';\r\n//import VesselProductGroups from './VesselProductGroups';\r\n//import ContentColumn from '../../../Custom/ContentColumn';\r\n//import ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport ListFoilioItems from '../../_StyledComponents/ListFoilioItems';\r\n//import { HoldingStatus } from '../../../Widgets/ProductGroupStatus';\r\nimport ContentColumnNoMemo from '../../../Custom/ContentColumnNoMemo';\r\nimport { useHistory, Link, Redirect } from 'react-router-dom';\r\n//import http from '../../../../Global/Services/httpService';\r\n\r\n\r\nconst Folio = ({ match }) => {\r\n\r\n const [folioState ,folioAction] = useFolioStore();\r\n //const [fleetState] = useFleetStore();\r\n //const [folioState] = useFolioStore();\r\n \r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n let history = useHistory();\r\n\r\n\r\n const selectedManagerID = +match.params.managerID || 0;\r\n const selectedFolioID = +match.params.folioID || 0;\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n // console.log('match', selectedVesselID);\r\n //console.log(selectedManagerID);\r\n // const salesOrderID = 0;\r\n\r\n useEffect(\r\n () => {\r\n folioAction.getManagers();\r\n }, []\r\n );\r\n\r\n useEffect(\r\n () => {\r\n if(selectedManagerID > 0){\r\n folioAction.getFolios(selectedManagerID);\r\n }\r\n \r\n if(selectedManagerID > 0 && selectedFolioID > 0){\r\n folioAction.getFolioVessels(selectedManagerID, selectedFolioID);\r\n folioAction.getFolioItems(selectedManagerID, selectedFolioID);\r\n }\r\n }, [selectedManagerID, selectedFolioID]\r\n );\r\n\r\n useEffect (\r\n () => {\r\n if(Boolean(folioState.managers)){\r\n //console.log(folioState.managers.length)\r\n if(folioState.managers.length <= 1){\r\n history.push(`/folios/status/${folioState.managers[0].managerID}`)\r\n }\r\n }\r\n }, [folioState.managers]\r\n );\r\n // useEffect (\r\n // () => {\r\n // if(companyList.length < 3){\r\n\r\n // let mid = companyList.find(X => X.managerID);\r\n\r\n // history.push(`/folios/status/${mid.managerID}`)\r\n // }\r\n // }, []\r\n // );\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n //const loadedFleet = Boolean(fleetState.vessels);\r\n const loadedVessels = Boolean(folioState.folioVessels);\r\n const loadedFolio = Boolean(folioState.folios);\r\n const loadedManagers = Boolean(folioState.managers);\r\n\r\n\r\n //let vessels = loadedFleet ? fleetState.vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1 && X.managerID == selectedManagerID) : [];\r\n let vessels = loadedVessels ? folioState.folioVessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1 && X.managerID == selectedManagerID) : [];\r\n\r\n let companyList = loadedManagers ? folioState.managers : [];\r\n //let reload = loadedManagers ? folioAction.getFolios(selectedManagerID) : [];\r\n let FolioList = loadedFolio ? folioState.folios : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n //console.log(vessels)\r\n const counter = selectedManagerID + filter.length + sort;\r\n // const [getFirstManagerID] = companyList;\r\n\r\n return (\r\n \r\n {/* Select Company/Manager \r\n We count the number of company results and if less than 2 we do not show this drop down.\r\n */}\r\n
\r\n {companyList.length > 1 ?\r\n
\r\n \r\n
\r\n :null\r\n }\r\n \r\n {/* Select Folios */}\r\n {selectedManagerID != 0 ?\r\n
\r\n \r\n
\r\n :null}\r\n\r\n {selectedFolioID != 0 ?\r\n
\r\n setSort(() => S)} />\r\n
\r\n :null}\r\n
\r\n\r\n










\r\n {\r\n \r\n {\r\n selectedFolioID != 0 ?\r\n vessels.map(X => (\r\n \r\n /**/ }\r\n linkTo={`/folios/status/${selectedManagerID}/${selectedFolioID}/details/${X.vesselID}`}\r\n />))\r\n :null\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst FolioStatus =({ folioStatus })=>{\r\n\r\n \r\n const loaded = Boolean(folioStatus);\r\n //console.log(folioStatus)\r\n\r\n const itemsPresent = loaded ? folioStatus.vesselItemsActive : 0;\r\n const itemsMissing = loaded ? folioStatus.vesselItemsMissing : 0;\r\n const itemsSleeping = loaded ? folioStatus.vesselItemsSleeping : 0; //Buffles me too. why would we have items that sleep? someone already wake them up!!!\r\n\r\n const total = itemsPresent + itemsMissing + itemsSleeping;\r\n const issues = Math.ceil(((itemsMissing) * (1 / total) * 360));\r\n const warnings = Math.ceil(((itemsSleeping) * (1 / total) * 360));\r\n const open = Math.max(360 - (issues + warnings), 0);\r\n \r\n // console.log(\"VesselID: \", vesselID, \"Present: \", itemsPresent, \"\\nMissing: \", itemsMissing)\r\n return(\r\n
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={0} data-value={open}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open} data-value={warnings}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings} data-value={issues}>
\r\n

{itemsMissing}

\r\n
\r\n )\r\n}\r\n\r\nexport default Folio;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ArrowBack from '@material-ui/icons/ArrowBack';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport { IconButton, Divider, ListItemText, FormControlLabel } from '@material-ui/core';\r\nimport MailTo, { MailHoldingDetailTo } from '../../../Misc/MailTo';\r\n// import OrderStatus from '../../../Widgets/OrderStatus';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport { DownloadHoldings } from '../../../Misc/DownloadFile';\r\n\r\nconst FolioItemDetailHeader = ({ managerID, folioID, holdingDetail, history }) => {\r\n\r\n if (!holdingDetail) return null;\r\n\r\n \r\n const handleBack = () => {\r\n //const url = history.location.pathname;\r\n //const uurl = url.substring(-1, url.lastIndexOf(\"/\")); // remove Vessel ID\r\n //const popLink = uurl.substring(-1, uurl.lastIndexOf(\"/\")); // remove /details\r\n history.push(`/folios/status/${managerID}/${folioID}`);\r\n }\r\n\r\n return (\r\n \r\n {/*
*/}\r\n \r\n \r\n \r\n \r\n\r\n {/* */}\r\n\r\n {/* */}\r\n {/*
{holdingDetail.vessel.vesselItems.length}
*/}\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 withRouter(FolioItemDetailHeader);\r\n","import React, { useState, useMemo } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport _ from 'lodash';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n// import { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\n// import HoldingLineStatus from '../../../../Widgets/HoldingLineStatus';\r\nimport StatusCircle from '../../../../Widgets/StatusCircle';\r\n\r\n/*What will happen here;\r\n * Categorize result under status (1)Active (2)Inactive (3)Missing\r\n *\r\n *\r\n */\r\n\r\nconst HoldingDetailList = ({ holdingDetail, selectedItemID, selectedGroups, toggleSelectedGroup, managerID, folioID, vesselID }) => {\r\n\r\n // const companyID = this.props.match.params.companyID || 0;\r\n // const folioID = +match.params.folioID || 0;\r\n // const vesselID = +match.params.vesselID || 0;\r\n // const itemID = +match.params.itemID || 0;\r\n // console.log(companyID, folioID, vesselID, itemID);\r\n \r\n // const [outOpen, setInOpen] = React.useState(true);\r\n // const [inOpen, setOutOpen] = React.useState(true);\r\n\r\n // //handle items in inventory open close click\r\n // const handleOutClick = () => {\r\n // setOutOpen(!outOpen);\r\n // };\r\n\r\n // //handle items not in inventory open and close click\r\n // const handleInClick = () => {\r\n // setInOpen(!inOpen);\r\n // };\r\n\r\n\r\n //console.log(holdingDetail)\r\n\r\n // console.log(\"Out: \", outOpen, \"\\nIn: \", inOpen);\r\n\r\n if (!holdingDetail) return null;\r\n //Get all items in inventory\r\n const itemsInInventory = holdingDetail.filter(X => X.inInventory === true);\r\n\r\n //Get all items not in inventory\r\n const itemsNotInInventory = holdingDetail.filter(X => X.inInventory === false);\r\n\r\n //Get total of folio items, items present and items not present\r\n let totalFolioItems = holdingDetail.length;\r\n let totalPresentITems = itemsInInventory.length;\r\n let totalMissingItems = itemsNotInInventory.length;\r\n\r\n // console.log(\"Folio Total: \", totalFolioItems, \"\\nPresent: \", totalPresentITems, \"\\nMissing: \", totalMissingItems)\r\n\r\n\r\n //console.log(\"Items in Inventory\", itemsInInventory);\r\n //console.log(\"Items Not in Inventory\", itemsNotInInventory);\r\n\r\n return (\r\n \r\n \r\n {\r\n holdingDetail.map(X => \r\n \r\n )\r\n }\r\n \r\n \r\n );\r\n};\r\n\r\n// This will display everything along with the statuses\r\nconst FolioItemsList = ({ itemID, itemNumber, itemTitle, inInventory, active, selectedItemID, managerID, folioID, vesselID }) => {\r\n\r\n let itemStatus;\r\n // Lets now decide the status of each item;\r\n // red(not in inventory and not active) \r\n // OR orange(in inventory but not active)\r\n // OR green(in inventory and active)\r\n if(!inInventory && !active)\r\n {\r\n itemStatus = \"statusRed\";\r\n }\r\n else if(inInventory && !active)\r\n {\r\n itemStatus = \"statusOrange\";\r\n }\r\n else if(inInventory && active)\r\n {\r\n itemStatus = \"statusGreen\";\r\n }\r\n\r\n const to = `/folios/status/${managerID}/${folioID}/details/${vesselID}/${itemID}`;\r\n //console.log(\"this ID: \", itemID, \"matches: \", selectedItemID )\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\n// const HoldingProductGroup = ({ productGroup, vessel, lines, open, toggleSelectedGroup, selectedItemID }) => {\r\n\r\n// // const productgroupItemsAll = vessel.vesselItems.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n// // const productgroupItems = lines.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n\r\n// // const itemLength = productgroupItems.length;\r\n\r\n\r\n// return useMemo(() => {\r\n\r\n// // console.log('productgroupItemsAll.length', productgroupItemsAll.length);\r\n// // console.log('productgroupItems.length', open, productgroupItems.length);\r\n\r\n// if (lines.length === 0)\r\n// return null;\r\n\r\n// return (\r\n// \r\n// toggleSelectedGroup(lines.itemID)} button divider selected={open}>\r\n// \r\n// \r\n// \r\n\r\n// {/* Display name */}\r\n// {/* I.item.productGroupID === productGroup.productGroupID)} /> */}\r\n// {/* */}\r\n// {\r\n// open ? : \r\n// }\r\n// \r\n// \r\n// \r\n// {\r\n// lines.map(X => )\r\n// }\r\n// \r\n// \r\n// );\r\n\r\n// }, [open, selectedItemID]);\r\n// }\r\n\r\n\r\n// const HoldingLine = ({ line, selected }) => {\r\n// //const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n// return (\r\n// // \r\n// \r\n// \r\n// \r\n// \r\n// // \r\n// );\r\n// }\r\n\r\n//Keeping this. Just in case the need arises. \r\n// const FolioItemSection = ({ dataArray, groupHeader }) => {\r\n \r\n// const [open, setOpen] = React.useState(false);\r\n \r\n// //handle items not in inventory open and close click\r\n// const handleClick = () => {\r\n// setOpen(!open);\r\n// };\r\n\r\n// return(\r\n// //const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// {/* Display name */}\r\n// {/* I.item.productGroupID === productGroup.productGroupID)} /> */}\r\n// {/* */}\r\n// {\r\n// open ? : \r\n// }\r\n// \r\n// \r\n// \r\n// {\r\n// // lines.map(X => )\r\n// }\r\n// {/* */}\r\n// {/* */}\r\n// {/* */}\r\n// {\r\n// dataArray.map(X => \r\n// \r\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 HoldingDetailList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport FolioItemDetailHeader from './FolioItemDetailHeader';\r\nimport FolioItemDetailList from './FolioItemDetailList';\r\nimport { useFolioStore } from '../../../../../Global/Stores/folioStore';\r\nimport HoldingsFilter from '../../../../Widgets/Filters/HoldingsFilter';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst FolioItems = ({ match }) => {\r\n \r\n const managerID = +match.params.managerID || 0;\r\n const folioID = +match.params.folioID || 0;\r\n const vesselID = +match.params.vesselID || 0;\r\n const itemID = +match.params.itemID || 0;\r\n \r\n const [folioState, folioActions] = useFolioStore();\r\n\r\n\r\n const [selectedGroups, setSelectedGroups] = useState([]);\r\n\r\n //console.log('itemID', itemID);\r\n\r\n useEffect(\r\n () => {\r\n folioActions.getFolioVesselItems(managerID, folioID, vesselID);\r\n },\r\n [vesselID, folioID]\r\n );\r\n\r\n const toggleSelectedGroup = (pgid) => {\r\n\r\n //console.log(\"toggleSelectedGroup\", pgid);\r\n // const newState = selectedGroups.includes(pgid) ? selectedGroups.filter(X => X !== pgid) : [...selectedGroups, pgid];\r\n // setSelectedGroups(prev => prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid]);\r\n setSelectedGroups(prev => prev.includes(pgid) ? [] : [pgid]);\r\n }\r\n\r\n\r\n const loaded = Boolean(folioState.folioVesselItems);\r\n //const filterID = +_.get(folioState, 'holdingDetail.filter.id', 0);\r\n\r\n // console.log('filterID', { filterID, ...selectedGroups });\r\n\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n \r\n
*/}\r\n\r\n
\r\n \r\n
\r\n
) : null\r\n\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default FolioItems;\r\n","import React, { useEffect } from 'react';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport ViewFolios from '../Folios/ViewFolios/ViewFolios';\r\n//import VesselFolio from './Folios/ListFolios/VesselFolios';\r\nimport FolioItems from './Holdings/FolioHoldingsDetail/FolioItems';\r\n\r\n\r\n// Import General Support Files\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nconst Folio = ({ match }) => {\r\n\r\n// //const [, folioActions] = useFolioStore();\r\n// const [, fleetActions] = useFleetStore();\r\n\r\n// // const selectedCompanyID = +match.params.companyID || 0;\r\n// // console.log(selectedCompanyID);\r\n\r\n\r\n// useEffect(\r\n// () => {\r\n// //fleetActions.getHoldingsOverview();\r\n// fleetActions.getHoldingsOverview();\r\n// fleetActions.getFleetPositions();\r\n// //folioActions.getFolioOverview();\r\n// // folioActions.getManagers();\r\n// }, []\r\n// );\r\n\r\n return (\r\n \r\n \r\n {/* Folio Management*/}\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Folio;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Link } from \"react-router-dom\";\r\nimport { Typography, List, Button, Paper } from '@material-ui/core';\r\n// import { AnnouncementLine } from '../Home/Summaries/AnnouncementSummary';\r\nimport ContentColumn from '../Custom/ContentColumn';\r\n// import Loading from '../Misc/Loading';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport Moment from 'react-moment';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\n// import { ListItem, ListItemText, Divider, Card, List, Button } from \"@material-ui/core\";\r\n\r\nconst NewsDetail = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n const loaded = Boolean(newsItems.length);\r\n\r\n const selectedID = +match.params.newsID;\r\n const newsItem = loaded && newsItems.find(X => X.chartagentNewsID === selectedID);\r\n\r\n return (\r\n \r\n
\r\n {`Details`}\r\n
\r\n\r\n
\r\n {\r\n newsItem && (\r\n \r\n {newsItem.title}\r\n \r\n {ReactHtmlParser(newsItem.message)}\r\n \r\n \r\n
\r\n Posted on: \r\n
\r\n
\r\n )\r\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 NewsDetail\r\n","import React, { useEffect } from 'react';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport NewsList from './NewsList';\r\nimport NewsDetail from './NewsDetail';\r\nimport Breadcrumb from '../Navigation/Breadcrumb';\r\n\r\nconst News = () => {\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default News;\r\n","import React from 'react'\r\n// import { Router, Route, Link, browserHistory, IndexRoute } from 'react-router-dom'\r\nimport { Link, useHistory } from \"react-router-dom\";\r\n\r\n////// Images\r\nimport pageNotFoundBG from './Images/OldShip-Fading.jpg';\r\n\r\n\r\n////// Material UI\r\nimport {Button } from '@material-ui/core';\r\n\r\nconst PageNotFound = () => {\r\n \r\n // let children = \"hey\";\r\n function BackButton() {\r\n let history = useHistory()\r\n // console.log(history.length);\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 // let history = useHistory()\r\n\r\n return (\r\n
\r\n

404 Error!
\r\n oops! We could not find the page you requested for.
\r\n Where Do you want to sail to?\r\n

\r\n {BackButton()}\r\n
\r\n )\r\n}\r\n\r\nexport default PageNotFound","import React from 'react'\r\nimport { BrowserRouter as Router, Switch, Route, Redirect } from \"react-router-dom\";\r\n\r\n// Universal Views\r\nimport BottomNav from './Navigation/BottomNav';\r\nimport TopNav from './Navigation/TopNav';\r\nimport FloatingMenuButton from './Navigation/FloatingMenuButton';\r\nimport MenuCategory from './Navigation/MenuCategory';\r\n\r\n// Content Files\r\n///// Account Management\r\nimport AccountSettings from './AccountManagement/AccountSettings';\r\n\r\n////// Home\r\nimport Home from './Home';\r\n\r\n////// Help\r\nimport Help from './Help';\r\n\r\n/////Order Management\r\nimport QuotationsApprove from './Sales/Order.QuotationsApprove';\r\nimport Catalogue from './Sales/Order.CatalogueSales';\r\nimport OrderHistory from './Sales/Order.History';\r\nimport ShipmentTracking from './Sales/Order.ShipmentTracking';\r\nimport FlatFeeContracts from './Sales/Order.FlatFeeContracts';\r\nimport AVCSO from './Sales/AVCSOnline';\r\n\r\n/////Fleet Management\r\nimport FleetHoldings from './FleetManagement/Fleet.Holdings';\r\nimport FleetStatus from './FleetManagement/Fleet.Status';\r\nimport NavigatorUpdates from './FleetManagement/Fleet.NavigatorUpdates';\r\nimport FleetTracking from './FleetManagement/Fleet.Tracking';\r\nimport FleetOverview from './FleetManagement/Fleet.Overview';\r\n\r\n//////Folio Management\r\nimport Folios from './Folios/Folios';\r\n\r\n\r\n////// News\r\nimport News from './News/News';\r\n\r\n////// Image Imports\r\n// import pageNotFoundBG from './Images/OldShip-Fading.jpg';\r\n\r\n////// CSS Files\r\nimport mainStyles from './CSS/MainStyles.module.css';\r\n\r\n////// Load Config Files\r\nimport MobileConfig from '../../Global/Data/Config';\r\n// import StatusCodes from '../../Global/Data/StatusCodes';\r\n\r\n////// 404 Page\r\nimport PageNotFound404 from './404';\r\n\r\n// let EG200 = \"Hey there\";\r\n\r\n// console.log(window);\r\n// console.log(window.screen.width+\"||\"+window.screen.height);\r\n/*\r\nPROJECT: Chart Track Ship Management System - Mobile Version\r\nPROJECT FILE(S): /Mobile, ../Global\r\nSTART DATE: January 23, 2020 : 12:34:20\r\nMODIFIED: March 26, 2021 : 09:09:10 (Folio Status included)\r\nDEVELOPER(S) Emmanuel Eshun-Davies, \r\n\r\nNOTES:\r\n- Due to floating button, content must always have -> Bottom: 20% for styling in order to allow reading last content\r\n- Navigation data loop when console logged, seems to print at every click. Possible cause to look into should final app run slow\r\n- Updated Menu.js file to include \"to:\" parameters to the subItems. \r\n\r\nKNOWN BUGS:\r\n- on the iphone, the input boxes at the top (example case: folio status); the inputs seem to move when touched and scrolled.\r\n This is unusual because on android, same behavior has not been recorded. might be a Material-UI thing but we will figure out\r\n a solution\r\n\r\nFIXES:\r\n- set the border definitions in Components/Custom/ContentColumn.jsx to 0\r\n- Global/Data/Menu.jsx updated as found from Menu Summary Cards\r\n\r\nTODO NOW:\r\n- Password reset and support page\r\n\r\nTODO FUTURE:\r\n- Add loading feature so with heavy data, user is not forced to watch a blank white painful endless screen\r\n- Setup error codes and definition file\r\n- Make Bottom Menu Dynamic to a config file.\r\n- To prevent several clicks on the tracking information request, disable button after request click\r\n\r\nTODO END OF DEVELOPMENT (Well Development never really ends but end of version :D )\r\n- Detect device and screen size then decide which version of app to show.\r\n\r\nSTATUS MESSAGES\r\nStatus message is a tiny component used to display messages to the user.\r\nStatusMessage is in the Mobile/ Directory with File Name StatusMessage.jsx\r\n\r\nIt is initiated with value props of\r\n- messageTitle: Title of message that appears at the title of the modal/dailog page\r\n- messageBody: Displays intended body or message\r\n- actionLink: takes the intended URL Link to navigate to when user clicks. (It is likely this is upgraded to take an array of buttons in the future should that be required)\r\n- actionTitle: takes the display value of the button. in the likely case where the button is turned to an array, this must be included. they work together\r\n- showActions: takes bolean (true/false) to display title\r\neg:\r\n\r\n\r\n*/\r\n\r\n// Component description: Holds the whole app in place. Meet the Mobile Component Display.\r\nconst Mobile = () => {\r\n\r\n return (\r\n \r\n
\r\n {/*Top Menu: Displays Main Menu, Active User Full Name, Active User Shipment Company*/}\r\n
\r\n \r\n
\r\n {/*Content Area: Will take care of displaying the content area of the view. *May contain other sectors*/}\r\n
\r\n




\r\n {/* URL remains /login after successful login so I fixed it with this */}\r\n { (window.location.pathname === \"/login\") ? : null }\r\n \r\n \r\n \r\n\r\n {/* To display categories of each menu when clicked from the home screen or root of module is loaded/called */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {/* */}\r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n {/* */}\r\n\r\n \r\n\r\n \r\n \r\n












\r\n
\r\n
\r\n \r\n
\r\n {/*Bottom Menu: Holds Bottom Menu with default quick menu items defined per the most likely used menus by users*/} \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\n}\r\n\r\n// This serves as an easy way to turn off/shut down the whole app should there be an issue to deal with.\r\n// Works with the config file found in \"Global/\"\r\nconst MobileState = () => {\r\n // document.getElementById(\"hey\").innerHTML=navigator;\r\n if(MobileConfig.Shutdown.Status === true){\r\n return (\r\n
\r\n

{MobileConfig.Shutdown.Header}

\r\n

Status Code\r\n
{MobileConfig.Shutdown.Code}

\r\n

Event\r\n
[Code {MobileConfig.Shutdown.Code}] {MobileConfig.Shutdown.ShortDescription}

\r\n

Details:\r\n
{MobileConfig.Shutdown.LongDescription}

\r\n

Resolve:\r\n
{MobileConfig.Shutdown.Resolve}

\r\n
{window.navigator.oscpu}
\r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n )\r\n }\r\n \r\n}\r\n\r\nexport default MobileState","import React, {useState} from 'react';\r\nimport { Link as RouterLink, withRouter } from 'react-router-dom';\r\nimport { Link, ListItem, ListItemText } from '@material-ui/core';\r\n\r\nconst NavMenuItem = ({ selected, label, to, location }) => {\r\n //const isSelected = (location.pathname.startsWith(to));\r\n const [selectedID, setSelectedID] = useState(0);\r\n\r\n let setSelected;\r\n setSelected = location.pathname.includes(\"folios\") ? 3 : setSelected;\r\n setSelected = location.pathname.includes(\"fleet\") ? 3 : setSelected;\r\n setSelected = location.pathname.includes(\"sales\") ? 2 : setSelected;\r\n setSelected = location.pathname.includes(\"news\") ? 1 : setSelected;\r\n\r\n //console.log(selected)\r\n const isSelected = Boolean(selected === setSelected);\r\n const decoration = isSelected ? 'underline' : 'none';\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(NavMenuItem);\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport { useUserStore } from '../../../Global/Stores/userStore';\r\nimport { Menu, MenuItem } from '@material-ui/core';\r\n\r\nconst NavIconAccount = () => {\r\n\r\n const [, actions] = useUserStore();\r\n\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const open = Boolean(anchorEl);\r\n\r\n\r\n const handleMenu = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n }\r\n\r\n\r\n const onLogout = () => {\r\n // setAnchorEl(null);\r\n actions.logout(true);\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* \r\n */}\r\n {/* \r\n Profile\r\n Users */}\r\n\r\n \r\n Profile\r\n \r\n\r\n \r\n Users\r\n \r\n\r\n Logout\r\n \r\n
\r\n );\r\n};\r\n\r\n// export const MenuItemLink = (to, caption) => {\r\n// return (\r\n// \r\n// {caption}\r\n// );\r\n// }\r\n\r\n\r\nexport default NavIconAccount;\r\n","import React, { useMemo } from 'react';\r\nimport CT_Logo from \"./../../../../src/Images/CT-logo-transparant.png\";\r\nimport { makeStyles } from '@material-ui/core';\r\nimport { withRouter } from \"react-router\";\r\n\r\n\r\nconst useStyles = makeStyles({\r\n logo: {\r\n height: '42px',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n }\r\n});\r\n\r\nconst NavBarLogo = ({ history }) => {\r\n const classes = useStyles();\r\n\r\n return useMemo(() => {\r\n\r\n const goHome = () => {\r\n history.push(\"/home\");\r\n }\r\n\r\n return (\"logo\");\r\n\r\n }, []);\r\n};\r\n\r\nexport default withRouter(NavBarLogo);\r\n","import React, { useMemo } from 'react';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n// import { getToken } from '../../../Global/Services/httpService';\r\n\r\nconst NavIconHelp = () => {\r\n\r\n return useMemo(() => {\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\nexport default NavIconHelp;\r\n","//import classes from '*.module.css';\r\nimport React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n// Custom Styling Properties\r\n//import menuStyles from '../CSS/MenuStyles.module.css';\r\n\r\n// styles\r\nconst useStyles = makeStyles({\r\n font: {\r\n fontSize: '12px',\r\n }\r\n});\r\n\r\n// Actual work starts here\r\nconst Breadcrumb = ({Module, currentPage}) => {\r\n\r\n const classes = useStyles();\r\n\r\n // We are going to have to write a dirty little hack here. eventually this will have to come off since Folio will be a module of its own\r\n // but till then, lets replace names here. \r\n // 1. if Module is Folio, change to Fleet\r\n //2. if Module is Folio and current Page is Status, change to Folio\r\n \r\n //Looks like the hack has to spread. lol\r\n // Possibly writing out a clearer solution in the future will help. this can get dirty. realllllyyyy dirty\r\n let newModule = Module;\r\n let newCurrentPage = currentPage;\r\n //console.log(Module)\r\n // This is for the Modules\r\n if(Module === \"folios\"){\r\n newModule = \"fleet\"\r\n } \r\n else if(Module === \"sales\"){\r\n newModule = \"orders\"\r\n } \r\n //Module === \"folios\" ? currentPage === \"status\" ? \"folio\" : currentPage : currentPage\r\n //console.log(currentPage, \"|\", newcurrentPage)\r\n //newModule = Module === \"sales\" ? \"orders\" : Module;\r\n\r\n // This is for the current Page or sub modules if you will\r\n if(Module === \"folios\" && currentPage === \"status\"){\r\n newCurrentPage = \"folio\"\r\n }\r\n else if(Module === \"sales\" && currentPage === \"orders\"){\r\n newCurrentPage = \"history\"\r\n }\r\n else if(Module === \"sales\" && currentPage === \"flatfee\")\r\n {\r\n newCurrentPage = \"flat fee\"\r\n }\r\n //newcurrentPage = Module === \"sales\" ? currentPage === \"orders\" ? \"history\" : currentPage : currentPage\r\n //newcurrentPage = Module === \"sales\" ? currentPage === \"flatfee\" ? \"flat fee\" : currentPage : currentPage\r\n\r\n // Check if current Page is empty. if yes\r\n let divider = null;\r\n if(currentPage != null)\r\n {\r\n divider = '|';\r\n }\r\n\r\n return (\r\n
\r\n

You are here: {newModule} {divider} {newCurrentPage}

\r\n
\r\n )\r\n}\r\n\r\nexport default Breadcrumb","import React, { useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Menu from '../../../Global/Data/Menu';\r\nimport NavMenuItem from './NavMenuItem';\r\nimport NavIconAccount from './NavIconAccount';\r\nimport NavBarLogo from './NavBarLogo';\r\nimport NavIconHelp from './NavIconHelp';\r\nimport NavBreadCrumbs from './NavBarBreadCrumbs';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n backgroundColor: '#FFFFFF',\r\n color: '#4d4d4d',\r\n fontSize: '1rem',\r\n letterSpacing: '4px',\r\n },\r\n flexFill: {\r\n flex: 1,\r\n }\r\n});\r\n\r\n\r\n\r\n//console.log(Menu);\r\nconst NavBar = ({Module, currentPage}) => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n\r\n {/*
*/}\r\n {/* SM */}\r\n {/* \"logo\" */}\r\n {/*
*/}\r\n\r\n \r\n {\r\n Menu.map(X => )\r\n }\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default NavBar;\r\n","import React, { useMemo } from 'react';\r\nimport { Link as Link1, withRouter } from 'react-router-dom';\r\nimport { Link, ListItem, ListItemText, ListItemSecondaryAction, Chip } from '@material-ui/core';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n\r\n\r\nconst ListItemLink = ({ text, subText, to, location, number, numberSmall, selected, isHeader = true, divider = false, icon = null }) => {\r\n // console.log('number 1', number);\r\n\r\n const isSelected = selected === true || (location.pathname.startsWith(to));\r\n\r\n const hasIcon = Boolean(icon);\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('ListItemLink number', number);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n numberSmall ? : null\r\n }\r\n {\r\n number ? : null\r\n }\r\n\r\n\r\n {icon !== null ? icon : null}\r\n \r\n \r\n \r\n );\r\n\r\n // }, []);\r\n }, [text, to, number, numberSmall, isSelected, isHeader, hasIcon]);\r\n}\r\n\r\nexport default withRouter(ListItemLink);\r\n","import React, { useMemo } from 'react';\r\nimport { Typography, Grid } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n color: '#4d4d4d',\r\n fontVariant: 'small-caps',\r\n fontSize: '1.1rem',\r\n letterSpacing: '4px',\r\n alignItems: 'center',\r\n padding: '7px 0px 7px 0px',\r\n },\r\n});\r\n\r\nconst SummaryCardHeader = ({ title, image, justify = null }) => {\r\n const classes = useStyles();\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \"Logo\"\r\n  {title}\r\n \r\n );\r\n\r\n }, [title, image]);\r\n};\r\n\r\nexport default SummaryCardHeader;\r\n","import React, { useMemo } from 'react';\r\nimport { Box, Divider } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n border: '5px solid #e9edf7',\r\n width: '100%',\r\n minWidth: '260px',\r\n maxWidth: '360px',\r\n padding: '15px',\r\n margin: '10px',\r\n alignSelf: 'flex-start'\r\n },\r\n});\r\n\r\nconst SummaryCard = ({ children }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\n\r\nexport const SummaryCardLine = ({ text, subText, to, numberSmall, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }, [text, subText, to, numberSmall, selected]);\r\n}\r\n\r\nexport default SummaryCard;\r\n","import React, { useMemo } from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport { Box, makeStyles, Divider } from '@material-ui/core';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\nimport SummaryCardHeader from './SummaryCardHeader';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport img from \"./../../../../Images/summaries/icon-ordermanagment.png\";\r\nimport SummaryCard, { SummaryCardLine } from './SummaryCard';\r\nimport _ from 'lodash';\r\n\r\nconst SalesSummary = () => {\r\n const [saleState,] = useSaleStore();\r\n\r\n const approvals = +_.get(saleState.summary, 'approvals');\r\n const orders = +_.get(saleState.summary, 'orders');\r\n const flatFees = +_.get(saleState.summary, 'flatFees');\r\n const shipments = +_.get(saleState.summary, 'shipments');\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('SalesSummary', saleState.summary);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n );\r\n }, [approvals, orders, flatFees, shipments]);\r\n // }, [saleState.summary]);\r\n}\r\n\r\nexport default SalesSummary\r\n","import React, { useMemo } from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport { Paper, Divider } from '@material-ui/core';\r\nimport SummaryCardHeader from './SummaryCardHeader';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\nimport img from \"./../../../../Images/summaries/icon-fleetmanagment.png\";\r\nimport SummaryCard, { SummaryCardLine } from './SummaryCard';\r\n\r\nconst FleetSummary = () => {\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n {/* */}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n\r\n\r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n \r\n );\r\n\r\n }, []);\r\n}\r\n\r\nexport default FleetSummary\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport SummaryCardHeader from './SummaryCardHeader';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\nimport SummaryCard from './SummaryCard';\r\nimport img from \"./../../../../Images/summaries/icon-news.png\";\r\nimport { Divider } from '@material-ui/core';\r\nimport Moment from 'react-moment';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\n\r\nconst AnnouncementSummary = () => {\r\n\r\n const [globalState, globalActions] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n\r\n useEffect(() => {\r\n globalActions.getAnnouncements();\r\n }, []);\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n {\r\n newsItems.map(X => ())\r\n }\r\n\r\n\r\n\r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n );\r\n }, [newsItems]);\r\n}\r\n\r\n\r\nexport const AnnouncementLine = ({ newsItem, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n const { chartagentNewsID, title, startDate } = newsItem;\r\n const to = `/news/${chartagentNewsID}`;\r\n const isSelected = selected === true;\r\n // const posted = Date.parse(startDate).toLocaleString();\r\n const posted = ();\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }, [newsItem]);\r\n}\r\n\r\nexport default AnnouncementSummary;\r\n","import React from 'react';\r\nimport SalesSummary from './Summaries/SalesSummary';\r\nimport FleetSummary from './Summaries/FleetSummary';\r\nimport AnnouncementSummary from './Summaries/AnnouncementSummary';\r\nimport { AppBar, Toolbar, Typography, IconButton, Grid } from '@material-ui/core';\r\n// import ReportSummary from './Summaries/ReportSummary';\r\nimport CT_Logo from \"./../../../../src/Images/CT_TEXT.png\";\r\nimport CT_DIST_Logo from \"./../../../../src/Images/AVCS/ADM_ICA_DD_rgb.png\";\r\n\r\nconst Home = () => {\r\n // const [sale] = useSaleStore();\r\n\r\n // console.log('Home', sale);\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// Desktop View\r\nconst onMobileView = () => {\r\n // setAnchorEl(null);\r\n localStorage.setItem('isMobile', 'mobile');\r\n window.location.reload(true);\r\n\r\n }\r\n\r\n //Switch to mobile display content\r\nconst SwitchToMobile = () => {\r\n\r\n if (window.screen.width < 700 && window.screen.height < 900 || window.screen.width < 900 && window.screen.height < 700)\r\n {\r\n return (\r\n \r\n \r\n \r\n Switch to Mobile View\r\n \r\n\r\n \r\n \r\n );\r\n }else {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst HomeFooter = () => {\r\n\r\n\r\n return (\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Home;\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\nimport { makeStyles } from '@material-ui/styles';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport OrderStatus from '../../Widgets/OrderStatus';\r\n// import QuoteStatus from '../../Widgets/QuoteStatus';\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n // listItem: {\r\n // backgroundColor: '#e9edf7',\r\n // textDecoration: 'none',\r\n // },\r\n});\r\n\r\nconst ListItemSub = ({ mainText, subText, number, selected, linkTo, statusComponent }) => {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n {/* */}\r\n {number ? : null}\r\n\r\n {statusComponent ? statusComponent : null}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport const ListItemSubQuote = ({ quote, selected }) => {\r\n // console.log('quote', quote);\r\n return useMemo(() => {\r\n // console.log('quote selected 2', selected);\r\n const mainText = `${quote.reference} [${quote.customerReference}]`;\r\n const subText = `${quote.quoteDate + \" - \"} Total: ${quote.currency} ${(quote.totalPrice).toFixed(2)}`;\r\n const to = `/sales/quotes/${quote.salesQuoteID}`;\r\n const number = quote.lineCount;\r\n return (} \r\n />);\r\n\r\n }, [quote, selected])\r\n}\r\n\r\nexport const ListItemSubOrder = ({ order, selected }) => {\r\n // console.log('order selected 1', selected);\r\n return useMemo(() => {\r\n // console.log('order selected 2', selected);\r\n const mainText = `${order.reference} [${order.customerReference}]`;\r\n const subText = `${order.orderDate + \" - \"} Total: ${order.currency} ${order.totalPrice.toFixed(2)}`;\r\n\r\n const to = `/sales/orders/${order.salesOrderID}`;\r\n const number = null;\r\n return (\r\n }\r\n />);\r\n\r\n }, [order, selected])\r\n}\r\n\r\n\r\nexport const ListItemSubShipment = ({ shipment, selected }) => {\r\n // console.log('shipment selected 1', selected);\r\n return useMemo(() => {\r\n // console.log('shipment selected 2', selected);\r\n const mainText = `${shipment.reference} [${shipment.customerReference}]`;\r\n const subText = `${shipment.salesShipmentStatus}`;\r\n\r\n const to = `/sales/shipments/${shipment.salesShipmentID}`;\r\n const number = shipment.lineCount;\r\n return ();\r\n\r\n }, [shipment, selected])\r\n}\r\n\r\n\r\nexport const ListItemSubFlatFeeContract = ({ flatFeeContract, selected }) => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const { vesselFlatFeePeriodID, startDate, endDate, description, price, currencyID } = flatFeeContract;\r\n const currency = globalActions.getCurrency(currencyID).code;\r\n\r\n // console.log('order selected 2', selected);\r\n const mainText = description;\r\n const subText = `${startDate.split('T')[0]} to ${endDate.split('T')[0]} [${currency} ${price}]`;\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}`;\r\n const number = null;\r\n\r\n return ();\r\n\r\n }, [flatFeeContract, selected])\r\n}\r\n\r\nexport default ListItemSub;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { ListItem, ListItemIcon, Collapse, ListItemText, List, Link } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport _ from 'lodash';\r\n// import storage from 'store';\r\nimport OrderStatus from '../../../Widgets/OrderStatus';\r\nimport OrderStatusVessel from '../../../Widgets/OrderStatusVessel';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubOrder } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst VesselOrders = ({ vesselOrders, selectedSalesOrderID }) => {\r\n\r\n const key = `VOL${vesselOrders.vesselID}`;\r\n const openLoad = JSON.parse(sessionStorage.getItem(key)) || false;\r\n\r\n // console.log('openLoad', openLoad)\r\n\r\n const [open, setOpen] = React.useState(openLoad);\r\n useEffect(() => { sessionStorage.setItem(key, open); }, [open]);\r\n\r\n const orders = _.orderBy(vesselOrders.orders, ['reference'], ['desc']);\r\n\r\n\r\n return (\r\n }\r\n >\r\n\r\n \r\n \r\n {\r\n orders.map(X => ())\r\n }\r\n \r\n \r\n\r\n \r\n )\r\n\r\n\r\n // return (\r\n //
\r\n // setOpen(!open)} selected={open}>\r\n // \r\n // \r\n // \r\n // \r\n\r\n // \r\n // {/* */}\r\n\r\n // {open ? : }\r\n // \r\n // \r\n // \r\n // {\r\n // orders.map(X => ())\r\n // }\r\n // \r\n // \r\n //
\r\n // );\r\n};\r\n\r\n\r\n// const VesselOrder = ({ order, selected }) => {\r\n\r\n\r\n// return useMemo(() => {\r\n// // console.log('Selected', selected);\r\n// const to = `/sales/orders/${order.salesOrderID}`;\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// }, [selected])\r\n\r\n// };\r\n\r\nexport default VesselOrders;\r\n","import React, { useEffect } from 'react';\r\nimport { Box, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport VesselOrders from './VesselOrders';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst Orders = ({ match }) => {\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const salesOrderID = +match.params.id || 0;\r\n\r\n // console.log('orders', salesOrderID);\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getVesselOrders();\r\n },\r\n []\r\n );\r\n\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n\r\n const loaded = Boolean(saleState.vesselOrders);\r\n let vessels = loaded ?\r\n saleState.vesselOrders.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n // const sum = _.sumBy(vessels, (V) => V.orders.length);\r\n // console.log('sum', sum);\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Orders;\r\n","import React, { useMemo } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport CommentIcon from '@material-ui/icons/Comment';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemLink from '../Misc/ListItemLink';\r\nimport { useSaleStore } from '../../../Global/Stores/saleStore';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport SummaryCardHeader from '../Home/Summaries/SummaryCardHeader';\r\nimport img from \"./../../../Images/summaries/icon-ordermanagment.png\";\r\nimport _ from 'lodash';\r\n\r\nconst SalesOverview = () => {\r\n return useMemo(() => {\r\n // console.log('SalesOverview');\r\n return (\r\n \r\n \r\n \r\n );\r\n }, []);\r\n}\r\n\r\nconst SalesOverviewContent = () => {\r\n const [saleState] = useSaleStore();\r\n\r\n const approvals = +_.get(saleState.summary, 'approvals');\r\n const orders = +_.get(saleState.summary, 'orders');\r\n const flatFees = +_.get(saleState.summary, 'flatFees');\r\n const shipments = +_.get(saleState.summary, 'shipments');\r\n\r\n return useMemo(() => {\r\n // console.log('SalesOverview Content');\r\n return (\r\n \r\n
\r\n {/* \r\n Order Management */}\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n }, [approvals, orders, flatFees, shipments]);\r\n // }, [saleState.summary]);\r\n}\r\n\r\nexport default SalesOverview;\r\n","import React, { useEffect } from 'react';\r\nimport { Collapse, List } from '@material-ui/core';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubQuote } from '../../_StyledComponents/ListItemSub';\r\nimport _ from 'lodash';\r\n// import storage from 'store';\r\n\r\nconst VesselQuotes = ({ vesselQuotes, selectedID }) => {\r\n\r\n const key = `VQL${vesselQuotes.vesselID}`;\r\n const openLoad = JSON.parse(sessionStorage.getItem(key)) || false;\r\n\r\n // console.log('selectedID', selectedID);\r\n\r\n const [open, setOpen] = React.useState(openLoad);\r\n useEffect(() => { sessionStorage.setItem(key, open); }, [open]);\r\n\r\n const quotes = _.orderBy(vesselQuotes.approvals, ['reference'], ['desc']);\r\n return (\r\n // \r\n \r\n\r\n \r\n \r\n {\r\n // quotes.map(X => ())\r\n quotes.map(X => ())\r\n }\r\n \r\n \r\n\r\n \r\n // \r\n );\r\n};\r\n\r\n\r\n// const VesselQuote = ({ quote, selected }) => {\r\n\r\n// const to = `/sales/quotes/${quote.salesQuoteID}`;\r\n// // const price = _.sumBy(quote.lines, 'linePrice').toFixed(2);\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\nexport default VesselQuotes;\r\n","import React, { useEffect } from 'react';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport VesselQuotes from './VesselQuotes';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { List, Divider } from '@material-ui/core';\r\n\r\nconst Quotes = ({ match }) => {\r\n const [saleState, salesActions] = useSaleStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const selectedID = +match.params.id || 0;\r\n\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getVesselQuotes();\r\n }, []\r\n );\r\n\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n\r\n const loaded = Boolean(saleState.vesselQuotes);\r\n\r\n let vessels = loaded ?\r\n saleState.vesselQuotes.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())}\r\n onSort={(S) => setSort(() => S)}\r\n />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Quotes;\r\n","import React from 'react';\r\nimport { Link as RouterLink, withRouter } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, ListItemText, Typography, Link } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\n\r\nconst VesselQuoteLineDetailHeader = ({ line, closePath, next, before }) => {\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 {line.item.itemTitle}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\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 VesselQuoteLineDetailHeader\r\n","import React from 'react';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport { Typography, TableFooter } from '@material-ui/core';\r\nimport QuoteLineStatusButton from '../../../../Widgets/QuoteLineStatusButton';\r\n\r\nconst VesselQuoteLineDetailList = ({ productGroup, line }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Number:\r\n {line.item.itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {line.item.itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {String(line.item.editionDate).split(' ')[0]}\r\n \r\n\r\n \r\n Quantity:\r\n {line.quantity}\r\n \r\n\r\n \r\n Duration:\r\n {`${line.duration || 'N/A'}`}\r\n \r\n\r\n \r\n Price:\r\n {`${line.currency} ${line.linePrice}`}\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n {/*
Group
\r\n
Number
\r\n
\r\n
Price
\r\n
\r\n
Total
\r\n
Duration
*/}\r\n
\r\n );\r\n};\r\n\r\nexport default VesselQuoteLineDetailList;\r\n","import React, { useState, useMemo } from 'react';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport { Typography, Checkbox, Dialog, DialogTitle, DialogActions, DialogContent, DialogContentText, Button, CircularProgress } from '@material-ui/core';\r\n\r\nconst LineDetailTable = ({ productGroup, item, line, showOrder = false, showLicense = false, showBasket = false }) => {\r\n\r\n const hasLine = Boolean(line);\r\n const showItem = Boolean(item) ? item : line.item;\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {productGroup ? productGroup.caption : \"\"}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Number:\r\n {showItem.itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {showItem.itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {String(showItem.editionDate).split(' ')[0]}\r\n \r\n {\r\n (hasLine && !showBasket) && (\r\n \r\n Quantity:\r\n {line.quantity}\r\n \r\n )\r\n }\r\n\r\n {\r\n Boolean(showItem.itemStatus) ? (\r\n \r\n Item Status:\r\n {showItem.itemStatus}\r\n \r\n ) : null\r\n }\r\n\r\n {\r\n (hasLine && showOrder) && (\r\n \r\n \r\n Duration:\r\n {`${line.duration || 'N/A'}`}\r\n \r\n \r\n Price:\r\n {`${line.currency} ${line.linePrice}`}\r\n \r\n \r\n )\r\n }\r\n\r\n {\r\n (hasLine && showLicense) && (\r\n \r\n \r\n Active:\r\n \r\n \r\n {\r\n line.endDate && (\r\n \r\n License Expires:\r\n {String(line.endDate).slice(0, 10)}\r\n )\r\n }\r\n \r\n )\r\n }\r\n\r\n {\r\n (showBasket && hasLine) && (\r\n \r\n \r\n Quantity:\r\n {`${line.quantity.toFixed(2)}`}\r\n \r\n\r\n \r\n Duration:\r\n {`${line.itemPrice.months}`}\r\n \r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n\r\n }, [line, hasLine, showItem, showLicense, showOrder, showBasket, productGroup]);\r\n};\r\n\r\nconst ActiveLicenceConfirmation = ({ line }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [, fleetActions] = useFleetStore();\r\n const [disabledButton, setDisabledButton] = useState(false);\r\n\r\n const history = useHistory();\r\n\r\n const Confirm = () => {\r\n \r\n setDisabledButton(true);\r\n\r\n fleetActions.setLicenseAvailability(line.vesselID, line.itemID, !line.active,\r\n (success) => {\r\n if(!success) {\r\n setOpen(false);\r\n setDisabledButton(false);\r\n }\r\n\r\n if(success) {\r\n history.push(`/fleet/holdings/${line.vesselID}`);\r\n }; \r\n }\r\n );\r\n };\r\n\r\n const actionText = line.active ? 'deactivate' : 'activate';\r\n console.log(line); \r\n \r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n {actionText} license?\r\n \r\n \r\n Do you want to {actionText} {line.item.itemTitle}?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { setOpen(true); }} />\r\n \r\n )\r\n }, [line, disabledButton, open, actionText]);\r\n}\r\n\r\nexport default LineDetailTable;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Box } from '@material-ui/core';\r\nimport VesselQuoteLineDetailHeader from './VesselQuoteLineDetailHeader';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport VesselQuoteLineDetailList from './VesselQuoteLineDetailList';\r\nimport _ from 'lodash';\r\nimport LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\n\r\nconst VesselQuoteLineDetail = ({ match }) => {\r\n\r\n const [saleState,] = useSaleStore();\r\n\r\n const salesQuoteID = +match.params.id;\r\n const salesQuoteLineID = +match.params.lineID;\r\n\r\n return useMemo(() => {\r\n\r\n // if (!saleState.quoteDetail || !saleState.quoteDetail.quote) return null;\r\n\r\n const loaded = Boolean(_.get(saleState, 'quoteDetail.quote', false));\r\n\r\n const currentLine = loaded ? saleState.quoteDetail.quote.lines.find(X => X.salesQuoteLineID === salesQuoteLineID) : null;\r\n\r\n // if (!currentLine) return null;\r\n\r\n\r\n const productGoup = loaded ? saleState.quoteDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n\r\n const quoteLines = _.get(saleState, 'quoteDetail.quote.lines', []);\r\n const lines = _.orderBy(quoteLines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n const lineCount = lines.length;\r\n const SQLID_Array = lines.map(X => X.salesQuoteLineID);\r\n const index = _.indexOf(SQLID_Array, salesQuoteLineID);\r\n\r\n const before = SQLID_Array[(lineCount + index - 1) % lineCount];\r\n const next = SQLID_Array[(index + 1) % lineCount];\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 }, [saleState.quoteDetail, salesQuoteLineID])\r\n\r\n\r\n};\r\n\r\nexport default VesselQuoteLineDetail;\r\n","import React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, Typography, Link } from '@material-ui/core';\r\n\r\nconst VesselOrderLineDetailHeader = ({ line, closePath, next, before }) => {\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 {line.item.itemTitle}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\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 VesselOrderLineDetailHeader\r\n","import React, { useMemo } from 'react';\r\nimport VesselOrderLineDetailHeader from './VesselOrderLineDetailHeader';\r\nimport LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst VesselOrderLineDetail = ({ match }) => {\r\n\r\n const [saleState] = useSaleStore();\r\n\r\n const salesOrderID = +match.params.id;\r\n const salesOrderLineID = +match.params.lineID;\r\n\r\n return useMemo(() => {\r\n\r\n const loaded = Boolean(_.get(saleState, 'orderDetail.order', false));\r\n\r\n // console.log('loaded', loaded);\r\n\r\n // if (!saleState.orderDetail || !saleState.orderDetail.order)\r\n // return null;\r\n\r\n const currentLine = loaded ? saleState.orderDetail.order.lines.find(X => X.salesOrderLineID === salesOrderLineID) : null;\r\n\r\n // if (!currentLine) \r\n // return null;\r\n\r\n const productGoup = loaded ? saleState.orderDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n\r\n const orderLines = _.get(saleState, 'orderDetail.order.lines', []);\r\n\r\n const lines = _.orderBy(orderLines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n // const lines = _.orderBy(saleState.orderDetail.order.lines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n const lineCount = lines.length;\r\n const SQLID_Array = lines.map(X => X.salesOrderLineID);\r\n const index = _.indexOf(SQLID_Array, salesOrderLineID);\r\n\r\n const before = SQLID_Array[(lineCount + index - 1) % lineCount];\r\n const next = SQLID_Array[(index + 1) % lineCount];\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 }, [saleState.orderDetail, salesOrderLineID])\r\n\r\n\r\n};\r\n\r\nexport default VesselOrderLineDetail;\r\n","import React from 'react';\r\nimport { IconButton } from '@material-ui/core';\r\nimport MailIcon from '@material-ui/icons/MailOutline';\r\n\r\nfunction MailTo({ vessel }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport function MailOrderDetailTo({ orderDetail }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport function MailQuoteDetailTo({ quoteDetail }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport function MailHoldingDetailTo({ vessel }) {\r\n \r\n // console.log('MailHoldingDetailTo', vessel);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MailTo;\r\n","import React from 'react';\r\nimport { IconButton, SvgIcon } from '@material-ui/core';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport http, { getToken } from '../../../Global/Services/httpService'\r\n\r\nconst DownloadFile = ({ to, disabled }) => {\r\n\r\n const btn = (\r\n \r\n \r\n \r\n );\r\n\r\n return disabled ? btn : (\r\n \r\n {btn}\r\n \r\n );\r\n};\r\n\r\n\r\nexport const DownloadQuote = ({ salesQuoteID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const DownloadOrder = ({ salesOrderID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const DownloadHoldings = ({ vesselID }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nexport const OpenShipment = ({ to, disabled }) => {\r\n\r\n // console.log('OpenShipment', to);\r\n\r\n const btn = (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n return disabled ? btn : (\r\n \r\n {btn}\r\n \r\n );\r\n};\r\n\r\nexport default DownloadFile;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport { IconButton, Divider, ListItemText } from '@material-ui/core';\r\nimport { MailOrderDetailTo } from '../../../Misc/MailTo';\r\nimport { DownloadOrder } from '../../../Misc/DownloadFile';\r\nimport OrderStatus from '../../../../Widgets/OrderStatus';\r\n\r\nconst OrderDetailHeader = ({ orderDetail, history }) => {\r\n\r\n if (!orderDetail || !orderDetail.order) return null;\r\n\r\n const { order } = orderDetail;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(OrderDetailHeader);\r\n","import React, { useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Chip, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport OrderLineStatus from '../../../../Widgets/OrderLineStatus';\r\n\r\nconst OrderDetailList = ({ selectedLineID, orderDetail }) => {\r\n\r\n const [OpenGroups, setOpenGroups] = useState(orderDetail ? orderDetail.productGroups.map(X => X.productGroupID) : []);\r\n\r\n if (!orderDetail || !orderDetail.order) return null;\r\n\r\n // const productGroups = order.productGroups;\r\n\r\n\r\n const { order, productGroups } = orderDetail;\r\n // console.log('OrderDetailList', orderDetail);\r\n\r\n let lines = order.lines;\r\n if (orderDetail.statusFilter) {\r\n //console.log('statusFilter', orderDetail.statusFilter);\r\n lines = lines.filter(X => orderDetail.statusFilter.includes(X.salesOrderLineStatusID));\r\n }\r\n // console.log('lines', lines.length);\r\n\r\n lines = _.orderBy(lines, ['item.itemNumber'], ['asc']);\r\n\r\n // console.log('lines', lines.length);\r\n\r\n const toggleProductGroup = (productGroupID) => {\r\n setOpenGroups(prev => prev.includes(productGroupID) ? prev.filter(X => X !== productGroupID) : [...prev, productGroupID])\r\n }\r\n\r\n\r\n const headers = productGroups.map(X => {\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === X.productGroupID);\r\n const subTotal = _.sumBy(productgroupItems, 'linePrice').toFixed(2);\r\n const open = OpenGroups.includes(X.productGroupID);\r\n // const open = true;\r\n return productgroupItems.length > 0 ? (\r\n \r\n toggleProductGroup(X.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n\r\n\r\n \r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n });\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\nconst OrderLine = ({ line, selected }) => {\r\n\r\n const to = `/sales/orders/${line.salesOrderID}/${line.salesOrderLineID}`;\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 OrderDetailList;\r\n","import React, { useMemo } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst OrderDetailFooter = ({ order }) => {\r\n\r\n const totalPrice = { order };\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n {`Total Price: ${order.currency} ${order.totalPrice.toFixed(2)}`}\r\n \r\n );\r\n }, totalPrice);\r\n};\r\n\r\nexport default OrderDetailFooter;\r\n","import React, { useEffect } from 'react';\r\nimport OrderDetailHeader from './OrderDetailHeader';\r\nimport OrderDetailList from './OrderDetailList';\r\nimport OrderDetailFooter from './OrderDetailFooter';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport OrderStatusFilter from '../../../../Widgets/Filters/OrderStatusFilter';\r\nimport Loading from '../../../Misc/Loading';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst VesselOrderDetail = ({ match }) => {\r\n const salesOrderID = +match.params.id;\r\n const selectedLineID = +match.params.lineID;\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // console.log('VesselOrderDetail', salesOrderID);\r\n\r\n const filterChanged = (statusIDs) => {\r\n salesActions.filterSalesOrder(statusIDs);\r\n }\r\n\r\n useEffect(\r\n () => {\r\n salesActions.getSalesOrder(salesOrderID);\r\n return () => {\r\n salesActions.clearSalesOrder();\r\n }\r\n },\r\n [salesOrderID]\r\n );\r\n\r\n const loaded = _.get(saleState, 'orderDetail.order.salesOrderID', -1) === salesOrderID;\r\n const order = _.get(saleState, 'orderDetail.order');\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default VesselOrderDetail;\r\n","import React, { useMemo } from 'react';\r\nimport './QuoteStatus.scss';\r\n\r\nconst QuoteStatus = ({ quote }) => {\r\n\r\n const total = quote.lines.length;\r\n const accepted = Math.ceil(1.0 * quote.lines.filter(X => X.validationID === 1).length / total * 360);\r\n const rejected = Math.ceil(1.0 * quote.lines.filter(X => X.validationID === 2).length / total * 360);\r\n const open = Math.max(360 - (accepted + rejected), 0);\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('QuoteStatus', total, accepted, rejected, open);\r\n\r\n return (\r\n
\r\n
180 ? \"pie-quote big\" : \"pie-quote\"} data-start={0} data-value={accepted}>
\r\n
180 ? \"pie-quote big\" : \"pie-quote\"} data-start={accepted} data-value={rejected}>
\r\n
180 ? \"pie-quote big\" : \"pie-quote\"} data-start={accepted + rejected} data-value={open}>
\r\n

{total}

\r\n
\r\n );\r\n }, [total, accepted, rejected, open]);\r\n\r\n};\r\n\r\nexport default QuoteStatus;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport { IconButton, Divider, ListItemText } from '@material-ui/core';\r\nimport { MailQuoteDetailTo } from '../../../Misc/MailTo';\r\nimport QuoteStatus from '../../../../Widgets/QuoteStatus';\r\nimport { DownloadQuote } from '../../../Misc/DownloadFile';\r\n\r\nconst QuoteDetailHeader = ({ quoteDetail, history }) => {\r\n\r\n if (!quoteDetail || !quoteDetail.quote) return null;\r\n\r\n const { quote } = quoteDetail;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(QuoteDetailHeader);\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport red from '@material-ui/core/colors/red';\r\nimport green from '@material-ui/core/colors/green';\r\nimport { Switch } from '@material-ui/core';\r\n\r\nconst PurpleSwitch = withStyles({\r\n switchBase: {\r\n color: red[300],\r\n '&$checked': {\r\n color: green[500],\r\n },\r\n '&$checked + $track': {\r\n backgroundColor: green[500],\r\n },\r\n },\r\n checked: {},\r\n track: {},\r\n})(Switch);\r\n\r\nconst ValidationWidget = ({ validationID, onChange }) => {\r\n\r\n const check = validationID === 1;\r\n\r\n const handleChange = (e) => {\r\n e.preventDefault();\r\n // console.log('handleChange', check);\r\n onChange(check === true ? 2 : 1);\r\n }\r\n\r\n return (\r\n //
\r\n \r\n //
\r\n );\r\n};\r\n\r\nexport default ValidationWidget;\r\n","import React, { useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, ListItemSecondaryAction, IconButton, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ValidationWidget from '../../../Misc/ValidationWidget';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash'\r\n\r\nconst QuoteDetailList = ({ selectedLineID, quoteDetail, salesActions }) => {\r\n\r\n //console.log('quoteDetail', quoteDetail)\r\n\r\n const [OpenGroups, setOpenGroups] = useState((quoteDetail ? quoteDetail.productGroups.map(X => X.productGroupID) : []));\r\n\r\n if (!quoteDetail || !quoteDetail.quote) return null;\r\n\r\n\r\n // console.log('quoteDetail', quoteDetail);\r\n\r\n // const quote = quoteDetail.quote;\r\n // const productGroups = quote.productGroups;\r\n\r\n\r\n const toggleProductGroup = (productGroupID) => {\r\n setOpenGroups(prev => prev.includes(productGroupID) ? prev.filter(X => X !== productGroupID) : [...prev, productGroupID])\r\n }\r\n\r\n\r\n const { quote, productGroups } = quoteDetail;\r\n\r\n const lines = _.orderBy(quote.lines, ['item.productGroupID', 'item.itemNumber'], ['asc', 'asc']);\r\n\r\n\r\n\r\n const headers = productGroups.map(X => {\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === X.productGroupID);\r\n const subTotal = (_.sumBy(productgroupItems, 'linePrice') || 0).toFixed(2);\r\n const subTotalSelected = (_.sumBy(productgroupItems.filter(X => X.validationID === 1), 'linePrice') || 0).toFixed(2);\r\n\r\n const open = OpenGroups.includes(X.productGroupID);\r\n return productgroupItems.length > 0 ? (\r\n \r\n\r\n toggleProductGroup(X.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n });\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\nconst QuoteLine = ({ line, onValidate, onSelect, selected }) => {\r\n\r\n // console.log('selected', selected);\r\n\r\n const handleValidation = (newValidation) => {\r\n // console.log('handleValidation', newValidation);\r\n onValidate(line.salesQuoteLineID, newValidation);\r\n };\r\n\r\n const handleSelection = () => {\r\n //console.log('onSelect', line.salesQuoteLineID);\r\n onSelect(line.salesQuoteLineID);\r\n };\r\n\r\n const to = `/sales/quotes/${line.salesQuoteID}/${line.salesQuoteLineID}`;\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 QuoteDetailList;\r\n","import React, { useEffect } from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nexport default function FormDialog({ quote, active, salesActions }) {\r\n const [open, setOpen] = React.useState(false);\r\n const [reference, setReference] = React.useState(\"reference\");\r\n\r\n function handleClickOpen() {\r\n setOpen(true);\r\n }\r\n\r\n function handleClose() {\r\n setOpen(false);\r\n }\r\n\r\n useEffect(() => {\r\n setReference(quote.customerReference);\r\n }, [quote.salesQuoteID])\r\n\r\n\r\n const handleReference = (e) => {\r\n // console.log('e.value', e.target.value);\r\n const val = e.target.value;\r\n setReference(() => val);\r\n }\r\n\r\n const handleConfirm = () => {\r\n\r\n const lines = quote.lines.map(X => (\r\n {\r\n accept: X.validationID === 1,\r\n salesQuoteLineID: X.salesQuoteLineID,\r\n }));\r\n\r\n const req = {\r\n vesselID: quote.vesselID,\r\n salesQuoteID: quote.salesQuoteID,\r\n reference: reference,\r\n lines: lines,\r\n }\r\n\r\n salesActions.confirmSalesQuote(req);\r\n \r\n handleClose();\r\n }\r\n\r\n return (\r\n \r\n \r\n Are you sure you want to confirm the quotation?\r\n \r\n If needed, you can change the reference before ordering below:\r\n \r\n Please note the order will be processed immediatly and can not be undone\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import React, { useMemo, useEffect } from 'react';\r\nimport { Typography, Button, Modal, Table, TableHead, TableRow, TableCell, TableBody } from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\r\nimport ConfirmButton from './QuoteConfirmation';\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nconst QuoteDetailFooter = ({ quote, salesActions }) => {\r\n let history = useHistory();\r\n\r\n const subTotal = _.sumBy(quote.lines, 'linePrice').toFixed(2);\r\n\r\n const selectedLines = quote.lines.filter(X => X.validationID === 1);\r\n const subTotalSelected = (_.sumBy(selectedLines, 'linePrice') || 0).toFixed(2);\r\n\r\n const complete = quote.lines.length === quote.lines.filter(X => (X.validationID || 0) > 0).length;\r\n const confirmed = quote.confirmed || false;\r\n\r\n \r\n //console.log('confirmed 1', quote.confirmed);\r\n\r\n useEffect(() => {\r\n\r\n\r\n //console.log('confirmed 2', confirmed);\r\n\r\n if (confirmed == true) {\r\n history.replace(\"/sales/quotes/\");\r\n }\r\n }, [confirmed]);\r\n\r\n return useMemo(() => {\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n {`${quote.currency} ${subTotalSelected} / ${subTotal}`}\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n }, [subTotalSelected, complete, confirmed]);\r\n};\r\n\r\nexport default QuoteDetailFooter;\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport Loading from '../../../Misc/Loading';\r\nimport { Box } from '@material-ui/core';\r\nimport QuoteDetailHeader from './QuoteDetailHeader';\r\nimport QuoteDetailList from './QuoteDetailList';\r\nimport QuoteDetailFooter from './QuoteDetailFooter';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\n\r\nconst VesselQuoteDetail = ({ match }) => {\r\n const salesQuoteID = +match.params.id;\r\n const selectedLineID = +match.params.lineID;\r\n // const [, mapActions] = useMapStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // console.log('props', props);\r\n // console.log(salesQuoteID);\r\n\r\n useEffect(\r\n () => {\r\n\r\n salesActions.getSalesQuote(salesQuoteID);\r\n\r\n return () => {\r\n salesActions.clearSalesQuote();\r\n }\r\n },\r\n [salesQuoteID]\r\n );\r\n\r\n const confirmed = _.get(saleState, 'quoteDetail.confirmed', false);\r\n if (confirmed === true)\r\n return ;\r\n\r\n const loaded = _.get(saleState, 'quoteDetail.quote.salesQuoteID', -1) === salesQuoteID;\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default VesselQuoteDetail;\r\n","import React, { useEffect, useMemo } from 'react'\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\n// import Select from 'react-select';\r\nimport { Box, Typography, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, DialogActions, List, Button, IconButton, ListItemIcon } from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\n// import BasketReview from './Basket/BasketReview';\r\nimport { useBasketStore } from '../../../../Global/Stores/basketStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport DoneOutlineIcon from '@material-ui/icons/DoneOutline';\r\n\r\nconst Catalogue = ({ match, history }) => {\r\n const [globalState] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n\r\n // // const [, saleActions] = useSaleStore();\r\n // const [open, setOpen] = useState(false);\r\n\r\n const vesselID = +match.params.vesselID || 0;\r\n\r\n // const handleVesselSelect = (vessel) => {\r\n // history.push(`/sales/catalogue/${vessel.vesselID}`);\r\n // }\r\n\r\n // const loaded = Boolean(globalState.vessels);\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], ['asc']);\r\n const vessel = vessels.find(X => X.vesselID === vesselID) || null;\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n // const disabled = !Boolean(vessel) || !itemsLoaded;\r\n\r\n // console.log('globalState.Catalogue', globalState.catalogue);\r\n\r\n const ordered = _.get(basketState, 'ordered', false);\r\n\r\n useEffect(() => {\r\n basketActions.setVessel(vesselID);\r\n return () => basketActions.setVessel(0);\r\n }, [vesselID]);\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n history.push(`/sales/catalogue/`);\r\n }\r\n }, [ordered]);\r\n\r\n return (\r\n \r\n
\r\n Create new order\r\n
\r\n\r\n \r\n\r\n {/* 1. SELECT VESSEL */}\r\n {/*
\r\n 1. Select a vessel:\r\n X.vesselName}\r\n getOptionValue={(X) => X}\r\n styles={{ width: '100%' }}\r\n className=\"basic-single\"\r\n classNamePrefix=\"select\"\r\n isSearchable={true}\r\n name=\"color\"\r\n value={vessel}\r\n onChange={(X) => { handleVesselSelect(X) }}\r\n options={vessels}\r\n />\r\n
*/}\r\n\r\n\r\n\r\n {/* 2. Add items to basket */}\r\n {/*
\r\n\r\n 2. Add items to basket:\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n
\r\n\r\n\r\n */}\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketButtonList = ({ Vessel }) => {\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\nconst BasketSelectVesselButton = ({ Vessel }) => {\r\n const [basketState,] = useBasketStore();\r\n const vesselID = basketState.vesselID;\r\n const selected = vesselID > 0;\r\n const text = Vessel ? `1. Vessel: ${Vessel.vesselName}` : `1. Select a vessel:`;\r\n\r\n return (\r\n );\r\n\r\n // return (\r\n // \r\n // );\r\n}\r\n\r\nconst BasketAddItemsButton = () => {\r\n const [basketState,] = useBasketStore();\r\n const vesselID = basketState.vesselID;\r\n const selected = basketState.basketLines.length > 0;\r\n const disabled = (vesselID === 0);\r\n\r\n return useMemo(() => {\r\n // console.log('BasketAddItemsButton', selected)\r\n return (\r\n );\r\n\r\n }, [vesselID, disabled, selected]);\r\n}\r\n\r\n\r\nconst BasketReviewButton = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n const hasLines = Boolean(basketState.basketLines);\r\n\r\n const vesselID = basketState.vesselID;\r\n const basketItemCount = hasLines ? basketState.basketLines.length : 0;\r\n const selected = basketActions.hasBasketPrices();\r\n\r\n const disabled = (vesselID === 0) || (basketItemCount === 0);\r\n\r\n return useMemo(() => {\r\n\r\n if (!hasLines)\r\n return null;\r\n\r\n return (\r\n );\r\n\r\n }, [hasLines, basketItemCount, vesselID, disabled, selected]);\r\n}\r\n\r\nconst BasketConfirmButton = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n const hasLines = Boolean(basketState.basketLines);\r\n\r\n const vesselID = basketState.vesselID;\r\n const basketItemCount = hasLines ? basketState.basketLines.length : 0;\r\n\r\n const pricesLoaded = basketActions.hasBasketPrices();\r\n const disabled = (vesselID === 0) || (basketItemCount === 0) || (!pricesLoaded);\r\n // const selected = vesselID > 0;\r\n\r\n const done = !disabled && basketState.reference.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n if (!hasLines)\r\n return null;\r\n\r\n return (\r\n );\r\n\r\n }, [hasLines, vesselID, disabled, done]);\r\n}\r\n\r\n\r\nexport const BasketButton = ({ Text, To, Location, Count, Selected, Disabled, Done }) => {\r\n\r\n const icon = Done === true ? (\r\n \r\n \r\n ) : null;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\n\r\n\r\nconst SaveManagerBasket = () => {\r\n return ();\r\n}\r\n\r\n\r\nconst SaveManagerBasketConfirmation = () => {\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [reference, setReference] = React.useState(\"\");\r\n\r\n const disabled = basketState.basketLines.length <= 0;\r\n\r\n const handleReference = (e) => {\r\n const val = e.target.value;\r\n setReference(() => val);\r\n }\r\n\r\n const SaveManagerBasket = () => {\r\n\r\n basketActions.saveManagerBasket(reference);\r\n setOpen(false);\r\n }\r\n\r\n return (\r\n \r\n { setOpen(false); }}\r\n aria-labelledby=\"Save Basket\">\r\n Do you want to save the basket?\r\n \r\n Please enter the reference for the basket you want to save:\r\n \r\n After saving the basket will become available from the existing baskets\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 Catalogue;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Typography, ListItem, ListItemIcon, List, ListItemText, Collapse, Chip, Link, ListItemSecondaryAction, IconButton, FormControl, Select, Input, MenuItem, Button } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport { useBasketStore } from '../../../../../Global/Stores/basketStore';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\n\r\nconst CatalogueBasketReview = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n // const [saleState, saleActions] = useSaleStore();\r\n\r\n const selectedItemID = +match.params.itemID || 0;\r\n\r\n // console.log('selectedItemID', selectedItemID);\r\n\r\n useEffect(() => {\r\n // const { selectedItems, vesselID } = saleState.catalogue;\r\n // if (vesselID > 0)\r\n basketActions.getBasketPrices();\r\n }, []);\r\n\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n\r\n const productGroups = _.get(globalState, 'catalogue.productGroups', []);\r\n const { basketLines, closedProductGroups, vesselID } = basketState;\r\n const listItems = basketLines || [];\r\n\r\n \r\n\r\n if (listItems.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n Basket Review\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n productGroups.map(PG => (\r\n Boolean(I.item) && I.item.productGroupID === PG.productGroupID)}\r\n selectedItemID={selectedItemID}\r\n open={!closedProductGroups.includes(PG.productGroupID)}\r\n toggleOpen={basketActions.toggleClosedProductGroups}\r\n />))\r\n }\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nconst BasketDurationSelector = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const allMonths = [3, 6, 9, 12];\r\n const { months } = basketState;\r\n\r\n return useMemo(() => {\r\n\r\n const durationChange = (e) => {\r\n const newMonths = +e.target.value;\r\n basketActions.setBasketDuration(newMonths);\r\n // console.log('durationChange', months);\r\n }\r\n\r\n return (\r\n \r\n Set Durations:  \r\n \r\n
{`${X} Months`}
}\r\n onChange={durationChange}\r\n input={}\r\n >\r\n {\r\n allMonths.map(M => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n }, [months])\r\n}\r\n\r\n\r\nconst BasketProductGroupListHeader = ({ productGroup, vesselID, lines, selectedItemID, open, toggleOpen }) => {\r\n\r\n // console.log('BasketProductGroupListHeader', productGroup);\r\n // const open = true;\r\n const { productGroupID, caption, isDigitalPoductGroup } = productGroup;\r\n const [, basketActions] = useBasketStore();\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const doubleOrder = [];\r\n\r\n useEffect (\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID)\r\n return () => {\r\n fleetActions.clearVesselHoldings();\r\n }\r\n }, [vesselID])\r\n\r\n const loadedHoldings = Boolean(fleetState.holdingDetailItems);\r\n\r\n const holdingItems = loadedHoldings ? fleetState.holdingDetailItems : []\r\n\r\n\r\n const anything = loadedHoldings ? console.log(holdingItems) : null;\r\n // We will simply do a check for each array\r\n // console.log(\"Before: \", doubleOrder);\r\n \r\n // lines.forEach(X => \r\n // holdingslist.includes(X.item.itemNumber) ?\r\n // doubleOrder.push(X.item.itemNumber)\r\n // :null\r\n \r\n // )\r\n \r\n // console.log(\"After: \", doubleOrder);\r\n \r\n if (lines.length === 0)\r\n return null;\r\n \r\n // console.log('items', items);\r\n console.log(lines);\r\n\r\n return (\r\n\r\n \r\n \r\n toggleOpen(productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n \r\n {open ? : }\r\n \r\n \r\n \r\n {\r\n lines.map(X => \r\n // This was to ensure that existing items are not ordered twice. so it simply takes it out\r\n // Plan was to also include a popup message. but this has been replaced\r\n // with a check at the point of adding items. disables existing items\r\n // holdingItems.some(Y => Y.itemID === X.itemID) ?\r\n // basketActions.removeBasketItems([X.itemID])\r\n // :\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BasketProductGroupListItem = ({ line, selected, isDigital }) => {\r\n const [, basketActions] = useBasketStore();\r\n const { item, itemPrice, quantity } = line;\r\n\r\n //console.log(line.itemID)\r\n\r\n const months = itemPrice ? itemPrice.months : false;\r\n\r\n return useMemo(() => {\r\n const to = `${item.itemID}`;\r\n const label = isDigital ? (Boolean(months) ? `${months} Months` : null) : `x ${quantity}`\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n Boolean(label) ? : null\r\n }\r\n\r\n \r\n {\r\n e.preventDefault();\r\n basketActions.removeBasketItems([item.itemID]);\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [item.itemID, selected, months, quantity])\r\n}\r\n\r\nconst BasketFooter = () => {\r\n\r\n const [globalState,] = useGlobalStore();\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const vesselID = basketState.vesselID;\r\n\r\n const months = basketState.months;\r\n const lineCount = basketState.basketLines.length;\r\n const validLines = basketState.basketLines.filter(X => Boolean(X.itemPrice));\r\n\r\n const validPrices = lineCount === validLines.length;\r\n\r\n // if (!validPrices) {\r\n // const invalid = basketState.basketLines.filter(X => !Boolean(X.itemPrice));\r\n // console.log('Invalid Lines', invalid);\r\n // }\r\n\r\n const P = _.sumBy(basketState.basketLines, 'itemPrice.price');\r\n const QTY = _.sumBy(basketState.basketLines, 'quantity');\r\n\r\n return useMemo(() => {\r\n\r\n const totalValue = validPrices ? [] : [\"Calculating...\"];\r\n\r\n if (validPrices === true) {\r\n globalState.currencies.forEach(C => {\r\n\r\n const currencyLines = validLines\r\n .filter(P => P.itemPrice.currencyID === C.currencyID)\r\n .map(L => +((L.quantity * L.itemPrice.price).toFixed(2)));\r\n\r\n if (currencyLines.length > 0) {\r\n const currencyPrice = _.sum(currencyLines).toFixed(2);\r\n totalValue.push(`${currencyPrice} ${C.code}`);\r\n }\r\n });\r\n }\r\n\r\n const priceString = totalValue.join(\" + \");\r\n // const confirmDisabled = !validPrices || validLines.length === 0;\r\n\r\n\r\n // console.log('BasketFooter', priceString)\r\n\r\n return (\r\n \r\n \r\n {`Total Price: ${priceString}`}\r\n \r\n\r\n {/* */}\r\n\r\n \r\n \r\n );\r\n }, [vesselID, validPrices, months, validLines.length, P, QTY, basketActions]);\r\n};\r\n\r\n\r\nexport default CatalogueBasketReview;\r\n","import React, { useMemo } from 'react'\r\nimport { Typography, Button } from '@material-ui/core';\r\nimport { withRouter } from \"react-router\";\r\nimport http from '../../../../../Global/Services/httpService';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport UploadButton from '../../../../Widgets/Buttons/UploadButton';\r\n\r\nconst RouteUpload = ({ history, vesselID }) => {\r\n\r\n const [, globalsActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const handleFileSelected = (file) => {\r\n const files = Array.from(file);\r\n\r\n let formData = new FormData();\r\n formData.append(\"File\", files[0]);\r\n\r\n http.post(\"/api/catalogue/routes/upload\", formData, { headers: { 'Content-Type': 'multipart/form-data' } })\r\n .then((result) => {\r\n const routeID = +result.data;\r\n globalsActions.getRoutes();\r\n history.push(`/sales/catalogue/${vesselID}/routes/${routeID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [vesselID])\r\n}\r\n\r\n\r\nexport const BasketUpload = withRouter(({ history, vesselID }) => {\r\n\r\n const [, globalsActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n const handleFileSelected = (file) => {\r\n const files = Array.from(file);\r\n\r\n const formData = new FormData();\r\n formData.append(\"File\", files[0]);\r\n\r\n http.post(\"/api/catalogue/baskets/upload\", formData, { headers: { 'Content-Type': 'multipart/form-data' } })\r\n .then((result) => {\r\n const basketID = +result.data;\r\n globalsActions.getBaskets();\r\n history.push(`/sales/catalogue/${vesselID}/baskets/${basketID}`);\r\n })\r\n .catch(error => {\r\n //alert(error)\r\n });\r\n };\r\n\r\n return (\r\n \r\n );\r\n\r\n }, [vesselID])\r\n})\r\n\r\n\r\n// const UploadButton = ({ text, FileSelected, accept }) => {\r\n// return (\r\n// \r\n\r\n\r\n// {text} {\r\n// const val = e.target.files;\r\n// FileSelected(val);\r\n// }} />\r\n// \r\n// );\r\n// }\r\n\r\n\r\nexport default withRouter(RouteUpload)\r\n// export default RouteUpload\r\n","import React, { useMemo } from 'react';\r\nimport { Collapse, List, Divider } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubShipment } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst VesselShipments = ({ vessel, selectedsalesShipmentID }) => {\r\n const [saleState,] = useSaleStore();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const vesselShipments = saleState.vesselShipments.filter(X => X.vesselID === vessel.vesselID);\r\n\r\n return useMemo(() => {\r\n\r\n return vesselShipments.length > 0 ? (\r\n \r\n \r\n \r\n {\r\n vesselShipments.map(X => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n }, [vesselShipments, selectedsalesShipmentID]);\r\n};\r\n\r\nexport default VesselShipments;\r\n","import React, { useEffect } from 'react';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport Loading from '../../Misc/Loading';\r\nimport VesselShipments from './VesselShipments';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { List, Divider } from '@material-ui/core';\r\n\r\nconst Shipments = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const salesShipmentID = +match.params.id || 0;\r\n\r\n useEffect(() => {\r\n salesActions.getVesselShipments();\r\n }, []);\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n const shipments = saleState.vesselShipments;\r\n\r\n const loaded = (vessels !== null) && (shipments !== null);\r\n if (loaded === true) {\r\n vessels = vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1);\r\n }\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n loaded ? (\r\n \r\n {\r\n vessels.map(X => ())\r\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 Shipments;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Box, IconButton, Divider, Collapse, Link, SvgIcon } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../../Global/Stores/saleStore';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport Loading from '../../../Misc/Loading';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport { OpenShipment } from '../../../Misc/DownloadFile';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\n\r\nconst VesselShipmentDetail = ({ history, match }) => {\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n const salesShipmentID = +match.params.id || 0;\r\n const selectedID = +match.params.lineID || 0;\r\n\r\n // const shipment = (saleState.vesselShipments || []).find(X => X.salesShipmentID === salesShipmentID);\r\n\r\n\r\n // const loaded = Boolean(saleState.shipmentDetail) && saleState.shipmentDetail;\r\n\r\n const loaded = +_.get(saleState, 'shipmentDetail.header.salesShipmentID', -1) === salesShipmentID;\r\n\r\n const detail = loaded ? saleState.shipmentDetail : null;\r\n\r\n // console.log('shipment', detail, loaded);\r\n\r\n useEffect(() => {\r\n if (salesShipmentID > 0) {\r\n saleActions.getVesselShipment(salesShipmentID);\r\n }\r\n }, [salesShipmentID]);\r\n\r\n // const content = saleState.orderDetail ? : ;\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n contentColumnFilter\r\n
*/}\r\n\r\n
\r\n \r\n
\r\n\r\n {/*
contentColumnFooter
*/}\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\n// Header\r\nconst ShipmentDetailHeader = ({ shipmentHeader, history }) => {\r\n\r\n\r\n return useMemo(() => {\r\n\r\n if (!shipmentHeader) return null;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n const { reference, customerReference, trackingLink, shippingDate } = shipmentHeader;\r\n const hasTracking = Boolean(trackingLink);\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n\r\n \r\n\r\n {/* \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n );\r\n }, [shipmentHeader]);\r\n};\r\n\r\n// Lines\r\nconst ShipmentLineList = ({ shipmentDetail, selectedID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [closedGroups, setClosedGroups] = useState([]);\r\n\r\n if (!globalState.productGroups)\r\n return null;\r\n\r\n\r\n\r\n const toggleProductGroup = (pgid) => {\r\n setClosedGroups(prev => {\r\n const newGroups = prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid];\r\n return newGroups;\r\n })\r\n }\r\n\r\n // console.log('shipmentDetail.lines', shipmentDetail.lines);\r\n const sortedLines = _.orderBy(shipmentDetail.lines, [I => +(I.item.itemNumber || \"\").toLowerCase()]);\r\n return (\r\n \r\n {\r\n globalState.productGroups.map(PG => (\r\n X.item.productGroupID === PG.productGroupID)}\r\n selectedID={selectedID}\r\n toggleProductGroup={toggleProductGroup}\r\n open={!closedGroups.includes(PG.productGroupID)}\r\n />\r\n ))\r\n }\r\n \r\n );\r\n}\r\n\r\n// ListHeader\r\nconst ShipmentProductGroupHeader = ({ productGroup, salesShipmentID, lines, selectedID, toggleProductGroup, open }) => {\r\n // const open = true;\r\n const hasLines = lines.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('ShipmentProductGroupHeader', lines);\r\n return (\r\n \r\n {\r\n hasLines ? (\r\n \r\n toggleProductGroup(productGroup.productGroupID)}>\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n lines.map(X => )\r\n }\r\n \r\n \r\n \r\n ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n }, [salesShipmentID, open, selectedID]);\r\n}\r\n\r\nconst ShipmentLine = ({ salesShipmentID, line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('ShipmentLine');\r\n\r\n const to = `/sales/shipments/${salesShipmentID}/${line.salesShipmentLineID}`;\r\n return (\r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n );\r\n\r\n }, [salesShipmentID, line.itemID, selected]);\r\n}\r\n\r\nexport default VesselShipmentDetail;\r\n","import React, { useMemo, useEffect } from 'react'\r\nimport { Collapse, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { ListItemSubFlatFeeContract } from '../../_StyledComponents/ListItemSub';\r\n\r\nconst FlatFee = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState, salesActions] = useSaleStore();\r\n\r\n // const [filter] = React.useState(\"\");\r\n\r\n const flatFeeID = +match.params.id || 0;\r\n\r\n useEffect(() => {\r\n salesActions.getVesselFlatFees();\r\n }, []);\r\n\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()]);\r\n const flatFees = saleState.vesselFlatFees;\r\n const loaded = (vessels !== null) && (flatFees !== null);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst FlatFeeContent = ({ flatFeeID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [saleState] = useSaleStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n let vessels = _.orderBy(globalState.vessels, [B => B.vesselName.toLowerCase()]);\r\n const flatFees = saleState.vesselFlatFees;\r\n\r\n const loaded = (vessels !== null) && (flatFees !== null);\r\n if (loaded === true) {\r\n vessels = vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1);\r\n\r\n vessels = _.orderBy(\r\n vessels,\r\n ['vesselName'],\r\n [sort > 0 ? 'asc' : 'desc']);\r\n }\r\n\r\n // console.log('loaded', loaded, saleState.vesselFlatFees)\r\n\r\n // const onSearch = (text) => {\r\n // setFilter(() => { return text.toLowerCase(); })\r\n // };\r\n\r\n return (\r\n \r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels.map(X => ())\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst VesselFlatFees = ({ vessel, selectedID }) => {\r\n const [saleState,] = useSaleStore();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const vesselFlatFees = _.get(saleState, 'vesselFlatFees', []).filter(X => X.vesselID === vessel.vesselID);\r\n // console.log('vesselFlatFees 1', vesselFlatFees);\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('vesselFlatFees', vesselFlatFees);\r\n\r\n return vesselFlatFees.length > 0 ? (\r\n \r\n\r\n \r\n \r\n {\r\n vesselFlatFees.map(X => (\r\n ))\r\n }\r\n \r\n \r\n \r\n ) : null;\r\n\r\n }, [vesselFlatFees, selectedID, open]);\r\n};\r\n\r\nexport default FlatFee;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport { Box, IconButton, ListItemText, Divider, List, ListItem, ListItemIcon, Link } from '@material-ui/core';\r\nimport Loading from '../../Misc/Loading';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst FlatFeeOrders = ({ match, history }) => {\r\n const flatFeeID = +match.params.id || 0;\r\n const orderID = +match.params.orderID || 0;\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(0);\r\n\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n\r\n useEffect(() => {\r\n if (flatFeeID > 0) {\r\n saleActions.getVesselFlatFeeOrders(flatFeeID);\r\n }\r\n }, [flatFeeID]);\r\n\r\n\r\n const detailID = _.get(saleState, 'flatFeeDetail.flatFee.vesselFlatFeePeriodID', -1);\r\n const loaded = (detailID === flatFeeID);\r\n\r\n // const loaded = Boolean(saleState.vesselOrders);\r\n\r\n //Filter included should there be a need for including a filtering feature in the future\r\n let flatFeeOrderSort = loaded ?\r\n saleState.flatFeeDetail.orders.filter(X => X.orderDate.toLowerCase().indexOf(filter) !== -1) : [];\r\n console.log(saleState.flatFeeDetail);\r\n\r\n flatFeeOrderSort = _.orderBy(flatFeeOrderSort, ['orderDate'], ['desc']);\r\n\r\n // console.log('loaded', loaded, flatFeeID, loaded, detailID);\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n flatFeeOrderSort.map(X => \r\n )\r\n }\r\n \r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\n// Header\r\nconst FlatFeeHeader = ({ flatFee, history }) => {\r\n\r\n return useMemo(() => {\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n if (!flatFee)\r\n return null;\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 }, [flatFee]);\r\n}\r\n\r\n\r\nconst FlatFeeOrder = ({ vesselFlatFeePeriodID, order, selected }) => {\r\n\r\n\r\n return useMemo(() => {\r\n\r\n const { purchaseOrderID, reference, totalQuantity } = order;\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}/${purchaseOrderID}`;\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 }, [vesselFlatFeePeriodID, selected]);\r\n}\r\n\r\n\r\nexport default FlatFeeOrders;\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, ListItemSecondaryAction, Box, IconButton, Divider, Collapse, Link, SvgIcon } from '@material-ui/core';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport Loading from '../../Misc/Loading';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst FlatFeeOrderDetail = ({ match, history }) => {\r\n\r\n const flatFeeID = +match.params.id || 0;\r\n const orderID = +match.params.orderID || 0;\r\n const lineID = +match.params.lineID || 0;\r\n\r\n const [saleState, saleActions] = useSaleStore();\r\n\r\n\r\n // console.log('object', flatFeeID, orderID, lineID)\r\n\r\n useEffect(() => {\r\n if (flatFeeID > 0 && orderID > 0) {\r\n saleActions.getVesselFlatFeeOrderDetails(flatFeeID, orderID);\r\n }\r\n }, [flatFeeID, orderID]);\r\n\r\n\r\n const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n const loaded = (purchaseOrderID === orderID);\r\n\r\n return (\r\n (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n contentColumnFilter\r\n
*/}\r\n\r\n
\r\n \r\n
\r\n\r\n {/*
contentColumnFooter
*/}\r\n
\r\n ) : \r\n }\r\n
\r\n )\r\n );\r\n};\r\n\r\n// Header\r\nconst FlatFeeOrderDetailHeader = ({ header, history }) => {\r\n\r\n // console.log('history', history);\r\n\r\n return useMemo(() => {\r\n const handleBack = () => {\r\n\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n if (!header)\r\n return null;\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 }, [header]);\r\n}\r\n\r\n\r\n// Lines\r\nconst FlatFeeOrderDetailLineList = ({ detail, selectedID }) => {\r\n const [globalState,] = useGlobalStore();\r\n const [closedGroups, setClosedGroups] = useState([]);\r\n\r\n if (!globalState.productGroups)\r\n return null;\r\n\r\n\r\n\r\n const toggleProductGroup = (pgid) => {\r\n setClosedGroups(prev => {\r\n const newGroups = prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid];\r\n return newGroups;\r\n })\r\n }\r\n\r\n\r\n const sortedLines = _.orderBy(detail.lines, [I => I.item.itemNumber.toLowerCase()]);\r\n // console.log('object', detail)\r\n\r\n return (\r\n \r\n {\r\n // globalState.productGroups.map(PG =>
{PG.caption}
)\r\n globalState.productGroups.map(PG => (\r\n X.item.productGroupID === PG.productGroupID)}\r\n selectedID={selectedID}\r\n toggleProductGroup={toggleProductGroup}\r\n open={!closedGroups.includes(PG.productGroupID)}\r\n />\r\n ))\r\n }\r\n
\r\n );\r\n}\r\n\r\n\r\n// ListHeader\r\nconst OrderProductGroupHeader = ({ vesselFlatFeePeriodID, productGroup, purchaseOrderID, lines, selectedID, toggleProductGroup, open }) => {\r\n // const open = true;\r\n const hasLines = lines.length > 0;\r\n\r\n return useMemo(() => {\r\n\r\n return (\r\n \r\n {\r\n hasLines ? (\r\n \r\n toggleProductGroup(productGroup.productGroupID)} disablePadding>\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n {open ? : }\r\n \r\n \r\n\r\n \r\n \r\n {\r\n //lines.map(L =>
{L.item.itemNumber}
)\r\n lines.map(X => )\r\n }\r\n
\r\n
\r\n
\r\n ) : null\r\n }\r\n\r\n
\r\n );\r\n\r\n }, [purchaseOrderID, open, selectedID]);\r\n}\r\n\r\n\r\nconst PurchaseOrderLine = ({ vesselFlatFeePeriodID, purchaseOrderID, line, selected }) => {\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('purchaseOrderLine', line);\r\n\r\n const to = `/sales/flatfee/${vesselFlatFeePeriodID}/${purchaseOrderID}/${line.purchaseOrderLineID}`;\r\n // const to = `${line.purchaseOrderLineID}`;\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 }, [purchaseOrderID, line.itemID, selected]);\r\n}\r\n\r\n\r\n\r\nexport default FlatFeeOrderDetail;\r\n","import React, { useMemo } from 'react';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\nimport { Table, TableHead, TableRow, TableCell, Typography, TableBody, Checkbox } from '@material-ui/core';\r\n\r\nconst LineDetailTable2 = ({ line }) => {\r\n\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n return useMemo(() => {\r\n\r\n if (!line || !globalState.productGroups)\r\n return null;\r\n\r\n // console.log('line', line);\r\n\r\n const productGroup = globalActions.getProductGroup(line.item.productGroupID);\r\n\r\n const { quantity, months, price, totalPrice, active, endDate, currencyID, customerCurrencyID } = line;\r\n const { itemNumber, itemTitle, editionDate, itemStatus } = line.item;\r\n\r\n const showEditionDate = editionDate ? editionDate.split(' ')[0] : 'N/A';\r\n const showEndDate = endDate ? endDate.split(' ')[0] : 'N/A';\r\n\r\n const showPrice = price || totalPrice;\r\n const showPriceCurrencyID = currencyID || customerCurrencyID;\r\n const hasPrice = Boolean(showPrice);\r\n const showCurrencyCode = hasPrice ? globalActions.getCurrency(showPriceCurrencyID).code : null;\r\n\r\n // console.log('showPrice', showPrice);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n Number:\r\n {itemNumber}\r\n \r\n\r\n \r\n Title:\r\n {itemTitle}\r\n \r\n\r\n \r\n Edition:\r\n {showEditionDate}\r\n \r\n\r\n \r\n Item Status:\r\n {itemStatus}\r\n \r\n\r\n {/* \r\n \r\n Order Details\r\n \r\n */}\r\n\r\n \r\n Quantity:\r\n {quantity}\r\n \r\n\r\n \r\n Months:\r\n {months}\r\n \r\n\r\n {\r\n hasPrice ? (\r\n \r\n Price:\r\n {`${showCurrencyCode} ${showPrice}`}\r\n \r\n ) : null\r\n }\r\n\r\n \r\n Active:\r\n \r\n \r\n\r\n \r\n License Expires:\r\n {showEndDate}\r\n \r\n\r\n \r\n\r\n
\r\n );\r\n }, [line, globalState.productGroups]);\r\n};\r\n\r\n\r\n// const ItemPartRow = (Caption, Value) => {\r\n\r\n// // return useMemo(() => {\r\n// return (\r\n// \r\n// {Caption}\r\n// {Value}\r\n// \r\n// );\r\n// // }, [Caption, Value]);\r\n// }\r\n\r\nexport default LineDetailTable2;\r\n","import React from 'react'\r\nimport { Box } from '@material-ui/core';\r\nimport LineDetailTable2 from '../../Misc/LineDetailTable2';\r\nimport { useSaleStore } from '../../../../Global/Stores/saleStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport NextIcon from '@material-ui/icons/NavigateNext';\r\nimport BeforeIcon from '@material-ui/icons/NavigateBefore';\r\nimport { IconButton, Divider, Typography, Link } from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst FlatFeeOrderLineDetail = ({ match }) => {\r\n\r\n // const flatFeeID = +match.params.id;\r\n const orderID = +match.params.orderID;\r\n const selectedLineID = +match.params.lineID;\r\n\r\n const [saleState] = useSaleStore();\r\n\r\n const purchaseOrderID = _.get(saleState, 'flatFeeOrderDetail.header.purchaseOrderID', -1);\r\n\r\n const loaded = (purchaseOrderID === orderID);\r\n const line = loaded ? saleState.flatFeeOrderDetail.lines.find(X => X.purchaseOrderLineID === selectedLineID) : null;\r\n const popLink = match.url.substring(0, match.url.lastIndexOf(\"/\"));\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n ) : \r\n }\r\n
\r\n );\r\n}\r\n\r\n\r\nconst FlatFeeOrderLineDetailHeader = ({ line, closePath }) => {\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 {line.item.itemTitle}\r\n \r\n\r\n {/* \r\n \r\n \r\n \r\n \r\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 FlatFeeOrderLineDetail\r\n","import React, { useMemo } from 'react';\r\nimport ListItemVessel from '../../../_StyledComponents/ListItemVessel';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport { List, Typography, Divider } from '@material-ui/core';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport { useBasketStore } from '../../../../../Global/Stores/basketStore';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport _ from 'lodash';\r\n\r\nconst CatalogueSelectVessel = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const [globalState] = useGlobalStore();\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], ['asc']);\r\n\r\n //console.table(\"Vessels\", vessels);\r\n // console.log('vesselID', basketState.vesselID);\r\n\r\n const itemsLoaded = Boolean(globalState.catalogue);\r\n const vesselsLoaded = Boolean(vessels.length);\r\n const loaded = itemsLoaded && vesselsLoaded;\r\n\r\n const { vesselID } = basketState;\r\n\r\n return (\r\n\r\n \r\n
\r\n Select a Vessel\r\n
\r\n\r\n
\r\n \r\n {\r\n vessels.map(V => )\r\n }\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst CatalogueVesselListItem = ({ Vessel, BasketActions, Selected }) => {\r\n\r\n let history = useHistory();\r\n //console.log('basket VesselID', Selected);\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('basket VesselID', Selected);\r\n\r\n const handleVesselClick = (vesselID) => {\r\n // console.log('Vessel Click', Vessel, vesselID);\r\n BasketActions.setVessel(vesselID);\r\n history.push(`/sales/catalogue/${vesselID}`);\r\n }\r\n\r\n return (\r\n \r\n\r\n \r\n );\r\n\r\n }, [Vessel, Selected]);\r\n\r\n}\r\n\r\n\r\n\r\n\r\nexport default CatalogueSelectVessel;\r\n","import React, { useMemo, useEffect, useRef } from 'react';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport { Link as Link1 } from 'react-router-dom';\r\nimport { Typography, Box, ListItemText, Checkbox, List, ListItem, ListItemIcon, Button, Badge, Chip, Link, Divider, Grid, TextField, InputAdornment } from '@material-ui/core';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport { useParams } from \"react-router\";\r\nimport { useCatalogueStore } from '../../../../../Global/Stores/catalogueStore';\r\nimport { FixedSizeList } from 'react-window';\r\nimport _ from 'lodash';\r\nimport { NavigateBeforeSharp } from '@material-ui/icons';\r\nimport AutoSizer from \"react-virtualized-auto-sizer\";\r\nimport { useBasketStore } from '../../../../../Global/Stores/basketStore';\r\nimport http from '../../../../../Global/Services/httpService';\r\nimport UploadBasketButton from '../../../../Widgets/Buttons/UploadBasketButton';\r\nimport UploadRouteButton from '../../../../Widgets/Buttons/UploadRouteButton';\r\nimport CreateRouteButton from '../../../../Widgets/Buttons/CreateRouteButton';\r\nimport SearchFilter, { TextFieldSearch } from '../../../Misc/SearchFilter';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\n// import SearchIcon from '@material-ui/icons/Search';\r\n\r\n\r\n\r\nconst CatalogueSelectItems = () => {\r\n const [globalState] = useGlobalStore();\r\n const [, catalogueActions] = useCatalogueStore();\r\n const [, fleetActions] = useFleetStore();\r\n const pars = useParams();\r\n const vesselID = +pars.vesselID || 0;\r\n\r\n const { productGroups, productItemGroups, catalogue } = globalState;\r\n const loaded = Boolean(productGroups) && Boolean(productItemGroups) && Boolean(catalogue);\r\n\r\n useEffect (\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID)\r\n return () => {\r\n fleetActions.clearVesselHoldings();\r\n }\r\n }, [vesselID])\r\n\r\n\r\n useEffect(() => {\r\n catalogueActions.reset();\r\n catalogueActions.loadVesselItemIDs(vesselID);\r\n //console.log(\"we run this\")\r\n }, [vesselID]);\r\n\r\n\r\n return (\r\n \r\n {/*
\r\n Add Items to basket\r\n
*/}\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketItemsAddFrom = () => {\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\nconst ProductItemFilter = () => {\r\n const [, catalogueActions] = useCatalogueStore();\r\n\r\n const handleSearch = (e) => {\r\n // console.log('handleSearch', e);\r\n catalogueActions.setFilterText(e);\r\n };\r\n\r\n return \r\n}\r\n\r\n\r\nconst SourceItems = () => {\r\n\r\n const ref = useRef(null);\r\n const [catalogueState,] = useCatalogueStore();\r\n const [fleetState,] = useFleetStore();\r\n const { itemSource, sourceLines, selectedItemIDs, vesselItemIDs, productGroup, productItemGroups, filterText } = catalogueState;\r\n \r\n //console.log(\"Getting datassssss: \", vesselItemIDs)\r\n\r\n const loadedHoldings = Boolean(fleetState.holdingDetailItems);\r\n\r\n const holdingItems = loadedHoldings ? fleetState.holdingDetailItems : []\r\n\r\n const pars = useParams();\r\n const focusedItemID = +pars.itemID || 0;\r\n\r\n let listItems = sourceLines.filter(X => (productItemGroups.includes(X.productItemGroupID)));\r\n if (Boolean(filterText)) {\r\n listItems = listItems.filter(X => (X.itemNumber.toLowerCase().indexOf(filterText) !== -1) || (X.itemTitle.toLowerCase().indexOf(filterText) !== -1));\r\n }\r\n\r\n useEffect(() => {\r\n\r\n if (ref && ref.current && focusedItemID > 0) {\r\n const focusedIndex = _.findIndex(listItems, (I) => I.itemID === focusedItemID);\r\n // ref.current.state.scrollOffset = 1800;\r\n // console.log('focusedItemID', focusedItemID, ref.current.state.scrollOffset)\r\n ref.current.scrollToItem(focusedIndex);\r\n }\r\n }, [focusedItemID, listItems]);\r\n\r\n\r\n if (!itemSource || !productGroup)\r\n return null;\r\n\r\n const itemCount = listItems.length;\r\n\r\n // console.log('sourceLines', sourceLines, itemCount);\r\n // console.log('selectedItemIDs', selectedItemIDs);\r\n\r\n return (\r\n \r\n {/* */}\r\n \r\n
\r\n \r\n {\r\n ({ width, height }) => (\r\n\r\n \r\n \r\n {Row}\r\n \r\n \r\n )\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst Row = ({ data, index, style }) => {\r\n // const history = useHistory();\r\n const [, catalogueActions] = useCatalogueStore();\r\n const { listItems, selectedItemIDs, vesselItemIDs, focusedItemID } = data;\r\n //console.log(\"vID: \", vesselItemIDs)\r\n\r\n const I = listItems[index];\r\n const itemID = Boolean(I) ? I.itemID : 0;\r\n\r\n const focused = itemID === focusedItemID;\r\n const selected = selectedItemIDs.includes(itemID);\r\n const inInventory = vesselItemIDs.some(Y => Y.itemID === itemID);\r\n\r\n return React.useMemo(() => {\r\n\r\n // console.log('Row', I, listItems);\r\n\r\n const handleItemChecked = (id) => {\r\n catalogueActions.toggleSelectedItem(id);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n { handleItemChecked(I.itemID, !selected) }}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [itemID, selected, inInventory, focused]);\r\n};\r\n\r\n\r\nconst SourceSelector = () => {\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { itemSourceOptions, itemSource } = catalogueState;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n // console.log('SourceSelector', itemSource);\r\n\r\n return useMemo(() => {\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n // console.log('val', id);\r\n // setSelectValue(val);\r\n catalogueActions.setItemSource(id);\r\n };\r\n\r\n const value = itemSource ? itemSource.id : 0;\r\n\r\n return (\r\n \r\n Add items from\r\n \r\n {\r\n itemSourceOptions.map(X => {X.caption})\r\n }\r\n \r\n \r\n );\r\n\r\n }, [itemSource, catalogueActions, labelWidth]);\r\n}\r\n\r\n// const SourceRecordSelector = () => {\r\n\r\n// }\r\n\r\nconst SourceRecordSelector = () => {\r\n\r\n const pars = useParams();\r\n const vesselID = +pars.vesselID || 0;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { itemSource, sourceRecord } = catalogueState;\r\n\r\n return useMemo(() => {\r\n\r\n //console.log('SourceRecordSelector', itemSource);\r\n const sourceID = itemSource ? itemSource.id : 0;\r\n\r\n switch (sourceID) {\r\n case 1:\r\n return ();\r\n break;\r\n case 2:\r\n return ();\r\n break;\r\n case 3:\r\n return ();\r\n break;\r\n case 4:\r\n return ();\r\n break;\r\n default:\r\n return null;\r\n break;\r\n }\r\n }, [vesselID, itemSource, sourceRecord]);\r\n}\r\n\r\n\r\nconst BasketSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n const baskets = _.orderBy(globalState.baskets, [B => B.name.toLowerCase()]);\r\n const { sourceRecord } = CatalogueState;\r\n\r\n const selectedBasket = sourceRecord;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n const basketID = selectedBasket ? selectedBasket.sourceBasketID : 0;\r\n\r\n // console.log('BasketSelector', basketID)\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const basket = baskets.find(X => X.sourceBasketID === id);\r\n // console.log('New Basket: ', basket);\r\n\r\n CatalogueActions.setSourceRecord(basket);\r\n\r\n // Set Items\r\n const itemIDs = basket.lines.map(X => X.itemID);\r\n const basketItems = items.filter(X => itemIDs.includes(X.itemID));\r\n CatalogueActions.setSourceLines(basketItems);\r\n };\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n\r\n \r\n Select a basket\r\n \r\n {\r\n basketID !== 0 ? null : Select a basket\r\n }\r\n {\r\n baskets.map(X => {X.name})\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n\r\n }, [labelWidth, baskets, selectedBasket, items, CatalogueActions, VesselID]);\r\n}\r\n\r\nconst QuoteSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n\r\n // Label\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n\r\n const selectedquote = CatalogueState.sourceRecord;\r\n const [vesselQuotes, setVesselQuotes] = React.useState([]);\r\n React.useEffect(() => {\r\n\r\n //console.log('vesselID', VesselID);\r\n\r\n http.get(`/api/sales/vesselquotes/${VesselID}`)\r\n .then(result => {\r\n const quotes = result.data;\r\n //console.log('vesselQuotes', quotes);\r\n setVesselQuotes(() => quotes);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n return setVesselQuotes(() => []);\r\n\r\n }, [VesselID, setVesselQuotes]);\r\n\r\n\r\n // return
{selectedquote}
\r\n\r\n return useMemo(() => {\r\n const quoteID = selectedquote ? selectedquote.salesQuoteID : 0;\r\n\r\n // console.log('QuoteSelector', quoteID)\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const quote = vesselQuotes.find(X => X.salesQuoteID === id);\r\n // console.log('New quote: ', quote);\r\n\r\n CatalogueActions.setSourceRecord(quote);\r\n\r\n CatalogueActions.loadSalesQuoteItems(id);\r\n };\r\n\r\n return (\r\n \r\n Select a quote\r\n \r\n {\r\n quoteID !== 0 ? null : Select a quote\r\n }\r\n {\r\n vesselQuotes.map(X => {X.reference})\r\n }\r\n \r\n \r\n );\r\n\r\n }, [labelWidth, vesselQuotes, selectedquote, items, CatalogueActions]);\r\n\r\n}\r\n\r\nconst RouteSelector = ({ VesselID, CatalogueState, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n const routes = _.orderBy(globalState.routes, [B => B.name.toLowerCase()]);\r\n const { sourceRecord } = CatalogueState;\r\n\r\n const selectedroute = sourceRecord;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n const routeID = selectedroute ? selectedroute.sourceRouteID : 0;\r\n\r\n const handleChange = event => {\r\n const id = event.target.value;\r\n const route = routes.find(X => X.sourceRouteID === id);\r\n //console.log('New route: ', route);\r\n\r\n CatalogueActions.setSourceRecord(route);\r\n\r\n // const routeID = route.sourceRouteID;\r\n http.post(`/api/catalogue/${VesselID}/routes/${id}/items`, {\r\n vesselID: VesselID,\r\n routeID: id,\r\n productGroupIDs: []\r\n })\r\n .then(result => {\r\n // console.log(\"addVesselRouteItems\", result.data);\r\n const response = result.data;\r\n // const newVesselItemIDs = response.vesselItemIDs;\r\n const selectedItemIDs = response.selectedItemIDs;\r\n const bufferItemIDs = response.bufferItemIDs;\r\n\r\n // console.log('response', response);\r\n\r\n\r\n // Set Items\r\n const itemIDs = [...selectedItemIDs, ...bufferItemIDs];\r\n const routeItems = items.filter(X => itemIDs.includes(X.itemID));\r\n // console.log('routeItems', routeItems);\r\n CatalogueActions.setSourceLines(routeItems, selectedItemIDs);\r\n // CatalogueActions.setSelectedItems(selectedItemIDs);\r\n\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n // CatalogueActions.loadRouteItems(VesselID, id, []);\r\n\r\n };\r\n\r\n return (\r\n \r\n\r\n \r\n \r\n \r\n Select a route\r\n \r\n {\r\n routeID !== 0 ? null : Select a route\r\n }\r\n {\r\n routes.map(X => {X.name})\r\n }\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n );\r\n\r\n }, [labelWidth, VesselID, routes, selectedroute, items, CatalogueActions]);\r\n}\r\n\r\nconst CatalogueSelector = ({ VesselID, CatalogueActions }) => {\r\n const [globalState] = useGlobalStore();\r\n const items = globalState.catalogue.items;\r\n\r\n useEffect(() => {\r\n\r\n // console.log('CatalogueSelector', items);\r\n\r\n CatalogueActions.setSourceLines(items);\r\n\r\n }, [items, CatalogueActions])\r\n\r\n return (null);\r\n}\r\n\r\nconst ProductGroupSelectorContainer = () => {\r\n const [catalogueState,] = useCatalogueStore();\r\n const { sourceLines } = catalogueState;\r\n\r\n const visible = sourceLines.length > 0;\r\n\r\n if (!visible)\r\n return null;\r\n\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n// const ProductGroupSelector = ({ ProductGroup, CatalogueActions, catalogue, productGroups, productItemGroups }) => {\r\nconst ProductGroupSelector = () => {\r\n\r\n const [globalState] = useGlobalStore();\r\n const { productGroups, catalogue } = globalState;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { sourceLines, productGroup } = catalogueState;\r\n\r\n\r\n const selectableProductGroupIDs = _.uniqBy(sourceLines, X => X.productGroupID).map(X => X.productGroupID);\r\n const selectableProductGroups = productGroups.filter(X => selectableProductGroupIDs.includes(X.productGroupID));\r\n\r\n // console.log('selectableProductGroups', selectableProductGroups)\r\n // console.log('catalogue.items', catalogue.items)\r\n\r\n // console.log('ProductGroupSelector', selectableProductGroups);\r\n\r\n const PG = productGroup ? productGroups.find(X => X.productGroupID === productGroup) : null;\r\n const PGID = PG ? PG.productGroupID : 0;\r\n\r\n const valid = catalogue && productGroups;\r\n\r\n // console.log('ProductGroupSelector', productGroups, catalogue, valid);\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [PGID, valid]);\r\n\r\n\r\n const handleProductChange = (e) => {\r\n const id = e.target.value;\r\n\r\n // console.log('handleProductChange', id);\r\n catalogueActions.setProductGroup(id);\r\n }\r\n\r\n\r\n if (!valid)\r\n return null;\r\n\r\n return (\r\n
\r\n \r\n Select Product\r\n (PG ?
{PG.code}
: Product)}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n selectableProductGroups ? null : \r\n }\r\n\r\n {\r\n selectableProductGroups && selectableProductGroups.map(PG => {\r\n const valid = catalogue.items.findIndex(X => X.productGroupID === PG.productGroupID) > -1;\r\n\r\n // console.log('ProductGroup', PG.productGroupID, valid, catalogue.items);\r\n\r\n return valid ? (\r\n \r\n \r\n \r\n ) : null;\r\n })\r\n }\r\n\r\n \r\n
\r\n {/* */}\r\n
\r\n );\r\n}\r\n\r\n// const ProductScaleSelector = ({ ProductGroup, CatalogueActions, catalogue, productItemGroups, selectedIDs }) => {\r\n\r\nconst ProductScaleSelector = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n // const { productGroups, productItemGroups: allItemGroups, catalogue } = globalState;\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { productGroup: PGID, productItemGroups: PGIDS } = catalogueState;\r\n\r\n const productScales = globalActions.getProductItemGroupsLocal(PGID);\r\n\r\n // console.log('productScales', productScales);\r\n\r\n // const selectedScales = selectedIDs;\r\n const disabled = productScales.length === 0;\r\n\r\n // const PGID = productGroup;\r\n const valid = PGID > 0 && productScales.length > 0;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [PGIDS, valid]);\r\n\r\n\r\n const handleScaleChange = (e) => {\r\n const newScales = e.target.value;\r\n catalogueActions.setProductItemGroups(newScales);\r\n }\r\n\r\n if (!valid)\r\n return null;\r\n\r\n\r\n return (\r\n \r\n Select Scales\r\n
Scale [{PGIDS.length}/{productScales.length}]
}\r\n onChange={handleScaleChange}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n productScales && productScales.map(PIG => {\r\n\r\n const count = catalogueActions.getSelectedProductGroupItemCount(PIG.productItemGroupID);\r\n const checked = PGIDS.includes(PIG.productItemGroupID);\r\n\r\n const countText = count > 0 ? ` [${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\nconst CatalogSelectFooter = () => {\r\n const [, basketActions] = useBasketStore();\r\n\r\n const [catalogueState, catalogueActions] = useCatalogueStore();\r\n const { sourceRecord, sourceLines, productItemGroups } = catalogueState;\r\n\r\n // const sourceLineItemIDs = sourceLines.map(X => X.itemID);\r\n\r\n const selectedProductGroupItems = catalogueActions.getSelectedProductItems();\r\n const selectedItemIDs = selectedProductGroupItems.map(X => X.itemID);\r\n\r\n const hasLines = sourceLines.length > 0;\r\n const selectedCount = selectedProductGroupItems.length\r\n const hasSelected = selectedCount > 0;\r\n\r\n\r\n const listItems = sourceLines.filter(X => productItemGroups.includes(X.productItemGroupID)).map(X => X.itemID);\r\n\r\n const handleAddToBasket = () => {\r\n // console.log('handleAddToBasket', selectedItemIDs);\r\n basketActions.addBasketItems(selectedItemIDs);\r\n basketActions.addSourceRecord(sourceRecord);\r\n }\r\n\r\n return (\r\n \r\n
\r\n { catalogueActions.addSelectedItems(listItems); }}>All\r\n\r\n { catalogueActions.removeSelectedItems(listItems); }}>None\r\n
\r\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 CatalogueSelectItems\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, TextField, Button, TableFooter } from '@material-ui/core';\r\nimport { useBasketStore } from '../../../../../Global/Stores/basketStore';\r\nimport { useGlobalStore } from '../../../../../Global/Stores/globalStore';\r\nimport _ from 'lodash';\r\n\r\nconst CatalogueBasketConfirm = () => {\r\n const [basketState,] = useBasketStore();\r\n const { basketLines } = basketState;\r\n\r\n\r\n if (basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n Basket Confirmation\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n Please note the order will be processed immediatly and can not be undone\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nexport const BasketSummary = ({ basketLines }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n const { productGroups } = globalState;\r\n\r\n\r\n if (!Boolean(productGroups))\r\n return null;\r\n\r\n\r\n const processLines = basketLines\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Product\r\n Qty\r\n Price\r\n \r\n \r\n \r\n\r\n {/* dfgdfgdfg */}\r\n {\r\n productGroups.map(PG => {\r\n\r\n const PGID = PG.productGroupID;\r\n const caption = PG.caption;\r\n\r\n // const lines = basketLines.filter(X => X.item.productGroupID === PGID);\r\n const lines = basketLines.filter(X => (X.productGroupID || X.item.productGroupID) === PGID);\r\n\r\n if (lines.length === 0)\r\n return null;\r\n\r\n\r\n const QTY = _.sumBy(lines, L => (L.quantity || 1));\r\n const P = _.sumBy(lines, 'itemPrice.price').toFixed(2);\r\n\r\n const currencyID = lines[0].itemPrice.currencyID;\r\n const currency = globalActions.getCurrency(currencyID);\r\n\r\n return (\r\n \r\n {caption}\r\n {QTY}\r\n {`${currency.code} ${P}`}\r\n \r\n )\r\n\r\n })\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n\r\nconst BasketReference = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n const reference = basketState.reference || \"\";\r\n\r\n\r\n return React.useMemo(() => {\r\n\r\n // console.log('BasketReference', reference);\r\n\r\n const handleReferenceChange = (e) => {\r\n const newValue = e.target.value;\r\n // console.log('handleReferenceChange', newValue);\r\n basketActions.setReference(newValue);\r\n }\r\n\r\n return ();\r\n\r\n }, [reference, basketActions]);\r\n}\r\n\r\n\r\nconst BasketOrderButton = () => {\r\n\r\n const [basketState, basketActions] = useBasketStore();\r\n\r\n const { vesselID, reference, basketLines, ordered } = basketState;\r\n const pricesLoaded = basketActions.hasBasketPrices();\r\n\r\n const canOrder = pricesLoaded && basketLines.length > 0 && reference.length > 0 && vesselID > 0;\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n basketActions.clearData();\r\n }\r\n\r\n\r\n }, [ordered, basketActions])\r\n\r\n return React.useMemo(() => {\r\n\r\n const handleBasketOrder = () => {\r\n // console.log('handleBasketOrder');\r\n basketActions.orderBasket();\r\n }\r\n\r\n return (\r\n Confirm Order\r\n );\r\n }, [canOrder, basketActions])\r\n}\r\n\r\n\r\n\r\nexport default CatalogueBasketConfirm\r\n","import React, { useEffect, useState, useMemo } from 'react'\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { Typography, Button, List } from '@material-ui/core';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport { BasketButton } from '../Catalogue/Catalogue';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\n\r\nconst AVCSO = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n // const [state, setState] = useState(null);\r\n\r\n const loaded = avcsoActions.isLoaded();\r\n const hasLicense = avcsoActions.hasAvcsoLicense();\r\n // console.log('AVCSO', state, hasLicense);\r\n\r\n useEffect(() => {\r\n avcsoActions.loadData();\r\n\r\n }, []);\r\n\r\n\r\n return (\r\n \r\n {\r\n hasLicense ? : \r\n }\r\n \r\n );\r\n}\r\n\r\n\r\nconst AvcsoLicenses = () => {\r\n\r\n return (\r\n \r\n\r\n
\r\n AVCSO Licenses\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n );\r\n}\r\n\r\nconst AvcsoButtonList = ({ Vessel }) => {\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\nconst AvcsoAddItemsButton = () => {\r\n const [avcsoState] = useAvcsoStore();\r\n const { basketLines } = avcsoState;\r\n\r\n const selected = basketLines.length > 0;\r\n const disabled = false;\r\n\r\n // return useMemo(() => {\r\n\r\n return (\r\n );\r\n\r\n // }, []);\r\n}\r\n\r\n\r\nconst AvcsoReviewButton = () => {\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { basketLines } = avcsoState;\r\n\r\n\r\n // const hasLines = Boolean(basketLines.length);\r\n\r\n // const vesselID = basketState.vesselID;\r\n const basketItemCount = basketLines.length;\r\n const selected = avcsoActions.hasBasketPrices();\r\n //const selected = null;\r\n const disabled = basketLines.length === 0;\r\n\r\n\r\n useEffect(() => {\r\n\r\n avcsoActions.getBasketPrices();\r\n\r\n }, []);\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // if (!hasLines)\r\n // return null;\r\n\r\n return (\r\n );\r\n\r\n }, [basketItemCount, disabled, selected]);\r\n}\r\n\r\nconst AvcsoConfirmButton = () => {\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n // const hasLines = Boolean(basketState.basketLines);\r\n\r\n // const vesselID = basketState.vesselID;\r\n const lineCount = avcsoState.basketLines.length;\r\n const pricesLoaded = avcsoActions.hasBasketPrices();\r\n const disabled = (lineCount === 0) || (!pricesLoaded);\r\n const done = !disabled && avcsoState.reference.length > 0;\r\n\r\n // return useMemo(() => {\r\n\r\n // if (!hasLines)\r\n // return null;\r\n\r\n return (\r\n );\r\n\r\n // }, [hasLines, vesselID, disabled, done]);\r\n}\r\n\r\nconst AvcsoInformation = () => {\r\n\r\n return (\r\n \r\n
\r\n AVCS Online\r\n
\r\n\r\n
\r\n \r\n With AVCS online you can now view official UKHO ENC’s directly in your web browser.\r\n This allows you to verify the safety of intended routes for your vessels, while looking at the same charts as on board.\r\n \r\n
\r\n \r\n A standard AVCS Online license grants access to all ENC’s in band 1.\r\n \r\n
\r\n\r\n \r\n Additional ENC coverage can be purchased and added to your AVCS Online license, should this be required.\r\n \r\n
\r\n\r\n \r\n AVCS Online is the easiest way to have updated ENC’s available to you at any time, anywhere you are.\r\n \r\n
\r\n\r\n \r\n -\tIn depth insight for maritime professionals -\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\n\r\n\r\n\r\nconst RequestAvcsoInformationButton = () => {\r\n\r\n\r\n const handleRequestInformation = () => {\r\n\r\n // const vesselID = 0;\r\n\r\n httpService.get(`/api/sales/avcso/information`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('handleRequestInformation', data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n\r\n return (\r\n Request more information);\r\n}\r\n\r\nexport default AVCSO\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { Link as Link1 } from 'react-router-dom';\r\nimport { Typography, ListItemText, Checkbox, List, ListItem, ListItemIcon, Link, FormControl, InputLabel, Select, MenuItem, Badge, Button } from '@material-ui/core';\r\n// import { useCatalogueStore } from '../../../../../Global/Stores/catalogueStore';\r\nimport { FixedSizeList } from 'react-window';\r\nimport _ from 'lodash';\r\nimport AutoSizer from \"react-virtualized-auto-sizer\";\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useParams } from \"react-router\";\r\n\r\nconst AVCSO_SelectItems = () => {\r\n const [, globalActions] = useGlobalStore();\r\n\r\n const loaded = globalActions.isLoaded();\r\n\r\n return (\r\n \r\n
\r\n Add AVCSO Licenses\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n );\r\n}\r\n\r\nconst ProductScaleSelector = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n const PGID = avcsoState.productGroup;\r\n const selectedScaleIDs = avcsoState.productItemGroups;\r\n\r\n const productScales = globalActions.getProductItemGroupsLocal(PGID);\r\n\r\n // const selectedScales = selectedIDs;\r\n const disabled = productScales.length === 0;\r\n\r\n // const PGID = productGroup;\r\n const valid = PGID > 0 && productScales.length > 0;\r\n\r\n const inputLabel = React.useRef(null);\r\n const [labelWidth, setLabelWidth] = React.useState(0);\r\n React.useEffect(() => {\r\n if (inputLabel.current) {\r\n setLabelWidth(inputLabel.current.offsetWidth);\r\n }\r\n }, [valid]);\r\n\r\n\r\n const handleScaleChange = (e) => {\r\n const newScales = e.target.value;\r\n avcsoActions.setProductItemGroups(newScales);\r\n }\r\n\r\n if (!valid)\r\n return null;\r\n\r\n\r\n return (\r\n \r\n Select Scales\r\n
Scale [{selectedScaleIDs.length}/{productScales.length}]
}\r\n onChange={handleScaleChange}\r\n labelWidth={labelWidth}\r\n >\r\n {\r\n productScales && productScales.map(PIG => {\r\n\r\n // const count = catalogueActions.getSelectedProductGroupItemCount(PIG.productItemGroupID);\r\n // const count = 1;\r\n const checked = selectedScaleIDs.includes(PIG.productItemGroupID);\r\n\r\n // const countText = count > 0 ? ` [${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\nconst AvcsoItemList = () => {\r\n\r\n const ref = useRef(null);\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { selectedItemIDs, avcsoItemIDs, avcsoLines, licenseLines, productItemGroups } = avcsoState;\r\n\r\n const pars = useParams();\r\n const focusedItemID = +pars.itemID || 0;\r\n //const focusedItemID = 0;\r\n\r\n\r\n useEffect(() => {\r\n // console.log('setAvcsoLines 1');\r\n if (avcsoLines.length === 0) {\r\n\r\n const items = globalActions.getCatalogueItems(avcsoItemIDs);\r\n //console.log('setAvcsoLines 2', items);\r\n avcsoActions.setAvcsoLines(items);\r\n }\r\n\r\n }, [avcsoLines, avcsoActions, globalActions])\r\n\r\n // const items = globalActions.getCatalogueItems(avcsoItemIDs).filter(X => productItemGroups.includes(X.productItemGroupID));\r\n const items = avcsoLines.filter(X => productItemGroups.includes(X.productItemGroupID));\r\n\r\n // console.log('items', items);\r\n\r\n useEffect(() => {\r\n if (ref && ref.current && focusedItemID > 0) {\r\n const focusedIndex = _.findIndex(items, (I) => I.itemID === focusedItemID);\r\n // console.log(focusedIndex);\r\n // console.log('focusedItemID', focusedItemID, ref.current.state.scrollOffset)\r\n ref.current.scrollToItem(focusedIndex);\r\n }\r\n }, [focusedItemID, items]);\r\n\r\n\r\n const itemCount = items.length;\r\n const vesselItemIDs = licenseLines.map(X => X.itemID);\r\n\r\n // console.log('licenseLines', licenseLines);\r\n\r\n return (\r\n // \r\n
\r\n \r\n {\r\n ({ width, height }) => (\r\n\r\n \r\n \r\n {AvcsoItemListRow}\r\n \r\n \r\n\r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst AvcsoItemListRow = ({ data, index, style }) => {\r\n // const history = useHistory();\r\n const [, globalActions] = useGlobalStore();\r\n const [, avcsoActions] = useAvcsoStore();\r\n\r\n const { listItems, selectedItemIDs, vesselItemIDs, focusedItemID } = data;\r\n\r\n const item = listItems[index];\r\n const itemID = item.itemID;\r\n //const item = Boolean(I) ? I.itemID : 0;\r\n\r\n\r\n //console.log('I', item, itemID);\r\n // console.log('I', itemID, focusedItemID);\r\n\r\n // const vesselItemIDs = licenseLines.map(X => X.itemID);\r\n\r\n const focused = itemID === focusedItemID;\r\n const selected = selectedItemIDs.includes(itemID);\r\n const inInventory = vesselItemIDs.includes(itemID);\r\n\r\n return React.useMemo(() => {\r\n\r\n // const item = globalActions.getCatalogueItem(itemID);\r\n //console.log('Row', itemID, item, focused);\r\n\r\n if (itemID <= 0 || !Boolean(item)) {\r\n return null;\r\n }\r\n\r\n const handleItemChecked = (id) => {\r\n avcsoActions.toggleSelectedItem(id);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n { handleItemChecked(itemID) }}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [itemID, selected, inInventory, focused, globalActions]);\r\n};\r\n\r\nconst AvcsoItemFooter = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { selectedItemIDs } = avcsoState;\r\n\r\n const selectedCount = selectedItemIDs.length;\r\n const hasSelected = selectedCount > 0;\r\n\r\n const handleAddToBasket = () => {\r\n // console.log('handleAddToBasket', selectedItemIDs);\r\n avcsoActions.addselectedToBasket();\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
)\r\n\r\n}\r\n\r\nexport default AVCSO_SelectItems;\r\n","import React, { useEffect, useState, useMemo } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { Typography, Select, FormControl, Input, MenuItem, ListItemText, ListItem, ListItemIcon, Chip, List, Link, ListItemSecondaryAction, IconButton, Button } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport { useParams } from \"react-router\";\r\nimport _ from 'lodash';\r\n\r\nconst AVCSO_BasketReview = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n // const selectedItemID = +match.params.itemID || 0;\r\n\r\n // console.log('selectedItemID', selectedItemID);\r\n\r\n useEffect(() => {\r\n // const { selectedItems, vesselID } = saleState.catalogue;\r\n // if (vesselID > 0)\r\n avcsoActions.getBasketPrices();\r\n }, []);\r\n\r\n\r\n const itemsLoaded = globalActions.isLoaded();\r\n\r\n // const productGroups = _.get(globalState, 'catalogue.productGroups', []);\r\n // const { basketLines, productItemGroups } = avcsoState;\r\n // const listItems = basketLines || [];\r\n \r\n\r\n if (avcsoState.basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n AVCSO Basket Review\r\n
\r\n\r\n
\r\n {/* contentColumnFilter */}\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst BasketDurationSelector = () => {\r\n\r\n const allMonths = [3, 6, 9, 12];\r\n // const [months, setMonths] = useState(12);\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { months } = avcsoState;\r\n\r\n\r\n return useMemo(() => {\r\n console.log('BasketDurationSelector')\r\n\r\n const durationChange = (e) => {\r\n const newMonths = +e.target.value;\r\n avcsoActions.setBasketDuration(newMonths);\r\n // console.log('durationChange', months);\r\n // setMonths(P => newMonths);\r\n }\r\n\r\n return (\r\n \r\n Set Durations:  \r\n \r\n
{`${X} Months`}
}\r\n onChange={durationChange}\r\n input={}\r\n >\r\n {\r\n allMonths.map(M => (\r\n \r\n \r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n }, [months, avcsoActions])\r\n}\r\n\r\n\r\nconst AVCSO_BasketList = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { basketLines, months } = avcsoState;\r\n\r\n\r\n const pars = useParams();\r\n const selectedItemID = +pars.itemID || 0;\r\n\r\n // const lines = [];\r\n const caption = \"AVCS Online\";\r\n // const { productGroupID, caption, isDigitalPoductGroup } = productGroup;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {/* {open ? : } */}\r\n \r\n\r\n \r\n {\r\n basketLines.map(X => )\r\n }\r\n \r\n \r\n );\r\n}\r\n\r\nconst AVCSO_BasketListLine = ({ line, selected }) => {\r\n\r\n const [, avcsoActions] = useAvcsoStore();\r\n const { itemPrice, quantity } = line;\r\n\r\n const item = line;\r\n\r\n const months = itemPrice ? itemPrice.months : false;\r\n\r\n return useMemo(() => {\r\n const to = `${item.itemID}`;\r\n const label = `${months} Months`;\r\n\r\n return (\r\n \r\n \r\n \r\n {\r\n Boolean(months) ? : null\r\n }\r\n\r\n \r\n {\r\n e.preventDefault();\r\n avcsoActions.removeBasketItems([item.itemID]);\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [item.itemID, selected, months, quantity])\r\n}\r\n\r\n\r\nconst BasketFooter = () => {\r\n\r\n const [, globalActions] = useGlobalStore();\r\n const [, avcsoActions] = useAvcsoStore();\r\n\r\n const priceInfo = avcsoActions.getTotalPriceLocal();\r\n const currency = globalActions.getCurrency(priceInfo.currencyID);\r\n\r\n const priceString = priceInfo.valid ? `${currency.code} ${priceInfo.totalPrice}` : 'Calculating...';\r\n return (\r\n \r\n \r\n {`Total Price: ${priceString}`}\r\n \r\n\r\n {/* */}\r\n\r\n \r\n \r\n );\r\n}\r\n\r\nexport default AVCSO_BasketReview;\r\n","import React, { useEffect } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, TextField, Button, TableFooter } from '@material-ui/core';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { BasketSummary } from '../Catalogue/Basket/CatalogueBasketConfirm';\r\nimport { useAvcsoStore } from '../../../../Global/Stores/avcsoStore';\r\nimport _ from 'lodash';\r\n\r\nconst AVCSO_BasketConfirm = ({ history }) => {\r\n const [avcsoState] = useAvcsoStore();\r\n const { basketLines, ordered } = avcsoState;\r\n\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n history.push(`/sales/avcso/add/`);\r\n }\r\n }, [ordered]);\r\n\r\n\r\n if (basketLines.length === 0) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n
\r\n AVCSO Confirmation\r\n
\r\n\r\n
\r\n \r\n \r\n Please note the order will be processed immediatly and can not be undone\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nconst BasketReference = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n const { reference } = avcsoState;\r\n\r\n return React.useMemo(() => {\r\n\r\n // console.log('BasketReference', reference);\r\n\r\n const handleReferenceChange = (e) => {\r\n const newValue = e.target.value;\r\n // console.log('handleReferenceChange', newValue);\r\n avcsoActions.setReference(newValue);\r\n }\r\n\r\n return (\r\n );\r\n\r\n }, [reference, avcsoActions]);\r\n}\r\n\r\n\r\n\r\nconst BasketOrderButton = () => {\r\n\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n\r\n const { reference, basketLines, ordered } = avcsoState;\r\n const pricesLoaded = avcsoActions.hasBasketPrices();\r\n\r\n const canOrder = pricesLoaded && basketLines.length > 0 && reference.length > 0;\r\n\r\n useEffect(() => {\r\n if (ordered === true) {\r\n console.log('clearData');\r\n avcsoActions.clearData();\r\n }\r\n\r\n\r\n }, [ordered, avcsoActions])\r\n\r\n return React.useMemo(() => {\r\n\r\n const handleBasketOrder = () => {\r\n // console.log('handleBasketOrder');\r\n avcsoActions.orderBasket();\r\n }\r\n\r\n return (\r\n Confirm Order\r\n );\r\n }, [canOrder, avcsoActions])\r\n}\r\n\r\nexport default AVCSO_BasketConfirm;\r\n","import React from 'react';\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport Orders from './Orders/Orders';\r\nimport SalesOverview from './SalesOverview';\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport Quotes from './Quotes/Quotes';\r\nimport VesselQuoteLineDetail from './Quotes/VesselQuoteLineDetail/VesselQuoteLineDetail';\r\nimport VesselOrderLineDetail from './Orders/VesselOrderLineDetail/VesselOrderLineDetail';\r\nimport VesselOrderDetail from './Orders/VesselOrderDetail/VesselOrderDetail';\r\nimport VesselQuoteDetail from './Quotes/VesselQuoteDetail/VesselQuoteDetail';\r\nimport Catalogue from './Catalogue/Catalogue';\r\nimport RouteCreate from './Catalogue/RouteCreate/RouteCreate';\r\nimport RouteSelect from './Catalogue/RouteSelect/RouteSelect';\r\nimport RouteItems from './Catalogue/RouteItems/RouteItems';\r\nimport CatalogueBasketReview from './Catalogue/Basket/CatalogueBasketReview';\r\nimport BasketItemDetail from './Catalogue/BasketItemDetail/BasketItemDetail';\r\nimport ManagerBaskets from './Catalogue/ManagerBaskets/ManagerBaskets';\r\nimport QuoteBaskets from './Catalogue/QuoteBaskets/QuoteBaskets';\r\nimport CatalogueItems from './Catalogue/CatalogueItems';\r\nimport Shipments from './Shipments/Shipments';\r\nimport VesselShipmentDetail from './Shipments/VesselShipmentDetail/VesselShipmentDetail';\r\nimport FlatFee from './FlatFee/FlatFee';\r\nimport FlatFeeOrders from './FlatFee/FlatFeeOrders';\r\nimport FlatFeeOrderDetail from './FlatFee/FlatFeeOrderDetail';\r\nimport FlatFeeOrderLineDetail from './FlatFee/FlatFeeOrderLineDetail';\r\nimport CatalogueSelectVessel from './Catalogue/Basket/CatalogueSelectVessel';\r\nimport CatalogueSelectItems from './Catalogue/Basket/CatalogueSelectItems';\r\nimport CatalogueBasketConfirm from './Catalogue/Basket/CatalogueBasketConfirm';\r\nimport { useAvcsoStore } from '../../../Global/Stores/avcsoStore';\r\nimport AVCSO from './AVCSO/AVCSO';\r\nimport AVCSO_SelectItems from './AVCSO/AVCSO_SelectItems';\r\nimport AVCSO_BasketReview from './AVCSO/AVCSO_BasketReview';\r\nimport AVCSO_BasketConfirm from './AVCSO/AVCSO_BasketConfirm';\r\n\r\nconst Sales = () => {\r\n const [avcsoState, avcsoActions] = useAvcsoStore();\r\n // const [state, setState] = useState(null);\r\n const hasLicense = avcsoActions.hasAvcsoLicense();\r\n\r\n return (\r\n
\r\n\r\n {/* Overview */}\r\n \r\n\r\n {/* Catalogue */}\r\n < Route path=\"/sales/catalogue/:vesselID?\" component={Catalogue} />\r\n\r\n {/* Catalogue Select vessel */}\r\n \r\n\r\n {/* Catalogue Select Items */}\r\n \r\n\r\n\r\n {/* Catalogue Basket Review */}\r\n \r\n {/* } */}\r\n\r\n {/* Catalogue Basket Confirm */}\r\n \r\n\r\n\r\n\r\n\r\n {/* Routes */}\r\n {/* \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n\r\n {/* ManagerBaskets */}\r\n {/* */}\r\n\r\n {/* QuoteBaskets */}\r\n {/* */}\r\n\r\n {/* Catalogue Products */}\r\n {/* */}\r\n\r\n\r\n {/* Flatfee */}\r\n {/* */}\r\n \r\n \r\n \r\n \r\n\r\n\r\n {/* Shipments */}\r\n \r\n \r\n\r\n\r\n {/* Order History */}\r\n {/* */}\r\n \r\n \r\n \r\n\r\n {/* Quotations */}\r\n {/* */}\r\n \r\n \r\n \r\n\r\n\r\n {/* AVCS Online */}\r\n \r\n {/* included a check here. This will prevent accessing AVCSO via a link in the absence of a license. without which the idea of a license is defeated. */}\r\n {hasLicense ? \r\n \r\n \r\n \r\n \r\n \r\n :null}\r\n\r\n \r\n\r\n
\r\n );\r\n};\r\n\r\nexport default Sales;\r\n","import React from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemLink from '../Misc/ListItemLink';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport img from \"./../../../Images/summaries/icon-fleetmanagment.png\";\r\nimport SummaryCardHeader from '../Home/Summaries/SummaryCardHeader';\r\n\r\nconst FleetOverview = () => {\r\n // const [orderState] = useSaleStore();\r\n return (\r\n \r\n
\r\n {/* \r\n Fleet Management */}\r\n \r\n
\r\n\r\n
\r\n \r\n \r\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 FleetOverview;\r\n","import React, { useEffect } from 'react';\r\nimport { Box, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport _ from 'lodash';\r\nimport VesselProductGroups from './VesselProductGroups';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { HoldingStatus } from '../../../Widgets/ProductGroupStatus';\r\n\r\nconst Holdings = ({ match }) => {\r\n\r\n const [fleetState] = useFleetStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n // console.log('match', selectedVesselID);\r\n\r\n // const salesOrderID = 0;\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n\r\n const loaded = Boolean(fleetState.vessels);\r\n let vessels = loaded ? fleetState.vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels.map(X => (\r\n }\r\n linkTo={`/fleet/holdings/${X.vesselID}`}\r\n />))\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Holdings;\r\n","import React, { useMemo, useEffect, useState } from 'react';\r\nimport { Divider, Typography, ListItem } from '@material-ui/core';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\nimport LineDetailTable from '../../../Misc/LineDetailTable';\r\nimport StatusCircle from '../../../../Widgets/StatusCircle';\r\nimport { getHoldingStatusClass } from '../../../../MapControl/Helpers/GlobalHelper';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport http from '../../../../../Global/Services/httpService';\r\nimport CloseButtonLink from '../../../../Widgets/Buttons/CloseButtonLink';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst VesselHoldingsLineDetail = ({ match }) => {\r\n\r\n const [fleetState] = useFleetStore();\r\n\r\n const vesselID = +match.params.vesselID;\r\n const itemID = +match.params.itemID;\r\n const hasData = Boolean(fleetState.holdingDetail);\r\n\r\n\r\n // console.log('VesselHoldingsLineDetail 00');\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('VesselHoldingsLineDetail 01');\r\n\r\n const loaded = Boolean(_.get(fleetState, 'holdingDetail.vessel', false));\r\n\r\n // if (!fleetState.holdingDetail || !fleetState.holdingDetail.vessel) return null;\r\n const currentLine = loaded ? fleetState.holdingDetail.vessel.vesselItems.find(X => X.itemID === itemID) : null;\r\n\r\n //console.log('VesselHoldingsLineDetail 02', currentLine);\r\n\r\n if (!currentLine)\r\n return null;\r\n\r\n\r\n // console.log('VesselHoldingsLineDetail 03', currentLine);\r\n\r\n const productGroup = loaded ? fleetState.holdingDetail.productGroups.find(X => X.productGroupID === currentLine.item.productGroupID) : null;\r\n // console.log('productGroup', productGroup);\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 }, [hasData, vesselID, itemID]);\r\n};\r\n\r\nconst VesselHoldingsLineDetailHeader = ({ line }) => {\r\n\r\n return useMemo(() => {\r\n return (\r\n \r\n\r\n \r\n\r\n \r\n {line.item.itemTitle}\r\n \r\n \r\n \r\n );\r\n }, [line.item.itemID])\r\n\r\n}\r\n\r\nconst VesselHoldingsLineDetailList = ({ line, productGroup }) => {\r\n\r\n const itemClass = getHoldingStatusClass(line.itemIssue, line.itemWarning);\r\n const updateClass = getHoldingStatusClass(line.updateIssue, line.updateWarning);\r\n\r\n //console.log('VesselHoldingsLineDetail 01', line, updateClass);\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n {\r\n !line.item.polygonPoints && (\r\n \r\n Map outline not available\r\n \r\n )\r\n }\r\n\r\n \r\n {line.item.isDigital ? 'License' : 'Edition'}\r\n \r\n \r\n {line.item.isDigital ? 'Updates' : 'Corrections'}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nconst VesselHoldingsLineDetailCorrections = ({ line }) => {\r\n\r\n const [detailState, setDetailState] = useState({\r\n vesselID: 0,\r\n itemID: 0,\r\n itemCorrections: [],\r\n itemHistoryItems: [],\r\n });\r\n\r\n const { vesselID, item } = line;\r\n\r\n useEffect(() => {\r\n if (vesselID > 0) {\r\n http.get(`/api/fleet/holdings/${vesselID}/${item.itemID}/details`)\r\n .then(result => {\r\n\r\n if (result.data && result.data.vesselID === vesselID) {\r\n setDetailState(() => {\r\n return { ...result.data }\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n }\r\n\r\n }, [vesselID, item.itemID])\r\n\r\n\r\n return useMemo(() => {\r\n\r\n if (vesselID !== detailState.vesselID)\r\n return null;\r\n\r\n if (detailState.itemCorrections.length === 0)\r\n return null;\r\n\r\n const sorted = _.orderBy(detailState.itemCorrections, ['year', 'week'], ['desc', 'desc']);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n\r\n NM Number\r\n \r\n \r\n {/* Published */}\r\n Published\r\n \r\n \r\n\r\n Status\r\n \r\n \r\n \r\n\r\n \r\n {\r\n sorted.map((X, i) => (\r\n \r\n {X.name}\r\n {X.year}/{(\"0\" + X.week).slice(-2)}\r\n \r\n \r\n {/* {X.issue ? 'Y' : 'No'} */}\r\n \r\n \r\n ))\r\n }\r\n\r\n \r\n
\r\n
\r\n );\r\n }, [detailState, vesselID, item]);\r\n}\r\n\r\nconst CorrectionItemStatus = ({ correctionItem }) => {\r\n\r\n const updateClass = getHoldingStatusClass(correctionItem.issue, correctionItem.warning);\r\n\r\n //console.log('CorrectionItemStatus', updateClass, correctionItem);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default VesselHoldingsLineDetail;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BackIcon from '@material-ui/icons/ArrowBack';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport { IconButton, Divider, ListItemText, FormControlLabel } from '@material-ui/core';\r\nimport MailTo, { MailHoldingDetailTo } from '../../../Misc/MailTo';\r\n// import OrderStatus from '../../../Widgets/OrderStatus';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport { DownloadHoldings } from '../../../Misc/DownloadFile';\r\n\r\nconst HoldingDetailHeader = ({ holdingDetail, history }) => {\r\n\r\n if (!holdingDetail) return null;\r\n\r\n const handleBack = () => {\r\n const url = history.location.pathname;\r\n const popLink = url.substring(0, url.lastIndexOf(\"/\"));\r\n history.push(popLink);\r\n }\r\n\r\n return (\r\n \r\n {/*
*/}\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {/*
{holdingDetail.vessel.vesselItems.length}
*/}\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 withRouter(HoldingDetailHeader);\r\n","import React, { useState, useMemo } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport _ from 'lodash';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport HoldingLineStatus from '../../../../Widgets/HoldingLineStatus';\r\n\r\nconst HoldingDetailList = ({ holdingDetail, selectedItemID, selectedGroups, toggleSelectedGroup }) => {\r\n\r\n\r\n const { vessel, productGroups } = holdingDetail;\r\n\r\n // console.log('HoldingDetailList', holdingDetail);\r\n\r\n if (!holdingDetail || !vessel.vesselItems) return null;\r\n\r\n\r\n let lines = vessel.vesselItems;\r\n if (holdingDetail.filter) {\r\n const statusFilter = holdingDetail.filter.status;\r\n lines = lines\r\n // .filter(X => (holdingDetail.filter.productGroupID === -1 || holdingDetail.filter.productGroupID === X.item.productGroupID) &&\r\n // holdingDetail.filter.scale.includes(X.item.productItemGroupID || 0))\r\n .filter(X => X.active || statusFilter.inactive)\r\n .filter(X => (\r\n (\r\n (statusFilter.issue && (X.issue)) ||\r\n (statusFilter.warning && (X.warning)) ||\r\n (statusFilter.valid && (X.valid))\r\n // (!statusFilter.inactive && (X.active))\r\n )));\r\n //console.log('Lines', lines, statusFilter.inactive);\r\n }\r\n\r\n lines = _.orderBy(lines, ['item.itemNumber'], ['asc']);\r\n\r\n const headers = productGroups.map(X => );\r\n\r\n\r\n return (\r\n \r\n {headers}\r\n \r\n );\r\n};\r\n\r\n\r\n\r\nconst HoldingProductGroup = ({ productGroup, vessel, lines, open, toggleSelectedGroup, selectedItemID }) => {\r\n\r\n const productgroupItemsAll = vessel.vesselItems.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n const productgroupItems = lines.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n\r\n const itemLength = productgroupItems.length;\r\n\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('productgroupItemsAll.length', productgroupItemsAll.length);\r\n // console.log('productgroupItems.length', open, productgroupItems.length);\r\n\r\n if (productgroupItemsAll.length === 0)\r\n return null;\r\n\r\n return (\r\n \r\n toggleSelectedGroup(productGroup.productGroupID)} button divider selected={open}>\r\n \r\n \r\n \r\n\r\n \r\n I.item.productGroupID === productGroup.productGroupID)} />\r\n {/* */}\r\n {\r\n open ? : \r\n }\r\n \r\n \r\n \r\n {\r\n productgroupItems.map(X => )\r\n }\r\n \r\n \r\n );\r\n\r\n }, [open, selectedItemID, itemLength]);\r\n}\r\n\r\n\r\nconst HoldingLine = ({ line, selected }) => {\r\n const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default HoldingDetailList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport HoldingDetailHeader from '../VesselHoldingsDetail/HoldingDetailHeader';\r\nimport HoldingDetailList from '../VesselHoldingsDetail/HoldingDetailList';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\nimport HoldingsFilter from '../../../../Widgets/Filters/HoldingsFilter';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst VesselHoldingsDetail = ({ match }) => {\r\n const vesselID = +match.params.vesselID;\r\n const itemID = +match.params.itemID;\r\n const [fleetState, fleetActions] = useFleetStore();\r\n\r\n\r\n const [selectedGroups, setSelectedGroups] = useState([]);\r\n\r\n // console.log('fleetState', fleetState);\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID);\r\n\r\n return () => {\r\n fleetActions.clearVesselHoldings();\r\n }\r\n },\r\n [vesselID]\r\n );\r\n\r\n const toggleSelectedGroup = (pgid) => {\r\n\r\n //console.log(\"toggleSelectedGroup\", pgid);\r\n // const newState = selectedGroups.includes(pgid) ? selectedGroups.filter(X => X !== pgid) : [...selectedGroups, pgid];\r\n // setSelectedGroups(prev => prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid]);\r\n setSelectedGroups(prev => prev.includes(pgid) ? [] : [pgid]);\r\n }\r\n\r\n\r\n const loaded = _.get(fleetState, 'holdingDetail.vessel.vesselID', -1) === vesselID;\r\n const filterID = +_.get(fleetState, 'holdingDetail.filter.id', 0);\r\n\r\n // console.log('filterID', { filterID, ...selectedGroups });\r\n\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
) : null\r\n\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default VesselHoldingsDetail;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport { Box, List, ListItem, ListItemIcon, ListItemText, Link, Chip, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport Loading from '../../Misc/Loading';\r\nimport ChipStatus from '../../../Widgets/Status/ChipStatus';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport _ from 'lodash';\r\n\r\nconst FleetStatus = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const selectedID = +match.params.vesselID || 0;\r\n\r\n useEffect(() => {\r\n fleetActions.zoomToVessel(selectedID);\r\n }, [selectedID]);\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n const loaded = Boolean(fleetState.vessels);\r\n\r\n const vessels = _.orderBy(fleetState.vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n return (\r\n \r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n loaded ? (\r\n \r\n {\r\n\r\n vessels\r\n .filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1))\r\n .map(X => (\r\n }\r\n linkTo={`/fleet/status/${X.vesselID}`}\r\n />))\r\n }\r\n \r\n \r\n ) : \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst VesselFleetStatusChips = ({ vesselItemProductGroups }) => {\r\n\r\n const totalQuantity = _.sumBy(vesselItemProductGroups, \"totalQuantity\");\r\n const totalWarning = _.sumBy(vesselItemProductGroups, \"itemWarningCount\") + _.sumBy(vesselItemProductGroups, \"updateWarningCount\");\r\n const totalIssue = _.sumBy(vesselItemProductGroups, \"itemIssueCount\") + _.sumBy(vesselItemProductGroups, \"updateIssueCount\");\r\n const totalValid = totalQuantity - totalWarning - totalIssue;\r\n return useMemo(() => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }, []);\r\n}\r\n\r\nexport default FleetStatus;\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Box, Typography, Table, TableHead, TableRow, TableCell, TableBody } from '@material-ui/core';\r\nimport Loading from '../../Misc/Loading';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport CloseButtonLink from '../../../Widgets/Buttons/CloseButtonLink';\r\nimport _ from 'lodash';\r\nimport ChipStatus, { ChipStatusValid, ChipStatusWarning, ChipStatusIssue } from '../../../Widgets/Status/ChipStatus';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst FleetStatusDetail = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const vesselID = +match.params.vesselID;\r\n\r\n\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getVesselHoldings(vesselID);\r\n\r\n // return () => {\r\n // fleetActions.clearVesselHoldings();\r\n // }\r\n },\r\n [vesselID]\r\n );\r\n\r\n const detail = fleetState.holdingDetail;\r\n const loaded = _.get(fleetState, 'holdingDetail.vessel.vesselID', -1) === vesselID;\r\n\r\n // console.log('detail.vessel', detail.vessel);\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n {detail.vessel.vesselName}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n Product\r\n OK\r\n Item Issues\r\n Update Issues\r\n \r\n \r\n \r\n {\r\n _.sortBy(detail.productGroups, 'sortIndex')\r\n .map((P) => {\r\n return (\r\n P.productGroupID === V.item.productGroupID)} />\r\n );\r\n })\r\n }\r\n \r\n
\r\n
\r\n
\r\n ) : null\r\n }\r\n
\r\n );\r\n};\r\n\r\n\r\nconst VesselProductGroupStatus = ({ productGroup, vesselItems }) => {\r\n\r\n //console.log('vesselItems', vesselItems)\r\n\r\n return useMemo(() => {\r\n if (vesselItems.length === 0)\r\n return null;\r\n\r\n const totalQuantity = +_.sumBy(vesselItems, \"quantity\");\r\n const itemWarning = +_.sumBy(vesselItems, \"itemWarning\");\r\n const itemIssue = +_.sumBy(vesselItems, \"itemIssue\");\r\n const updateWarning = +_.sumBy(vesselItems, \"updateWarning\");\r\n const updateIssue = +_.sumBy(vesselItems, \"updateIssue\");\r\n\r\n const totalValid = totalQuantity - itemWarning - itemIssue - updateWarning - updateIssue;\r\n\r\n // console.log('Status', {\r\n // totalQuantity,\r\n // itemWarning,\r\n // itemIssue,\r\n // updateWarning,\r\n // updateIssue,\r\n // })\r\n\r\n return (\r\n \r\n {productGroup.caption}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n }, [vesselItems.length])\r\n\r\n\r\n}\r\n\r\nexport default FleetStatusDetail;\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport { Typography, List, Divider } from '@material-ui/core';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport _ from 'lodash';\r\nimport ChipStatus from '../../../Widgets/Status/ChipStatus';\r\nimport BlockIcon from '@material-ui/icons/Block';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\n\r\nconst NavigatorUpdates = ({ match }) => {\r\n\r\n const [fleetState, fleetActions] = useFleetStore();\r\n const [globalState] = useGlobalStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n const vessels = _.orderBy(globalState.vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n\r\n const hasUpdateInfo = Boolean(fleetState.vesselUpdates);\r\n const loaded = Boolean(globalState.vessels) && hasUpdateInfo;\r\n\r\n // const vessels = fleetState.vessels || []; \r\n // const vessels = _.orderBy(globalState.vessels, ['vesselName']);\r\n\r\n useEffect(() => {\r\n fleetActions.getVesselUpdating();\r\n }, []);\r\n\r\n\r\n const onSearch = (text) => {\r\n // console.log('onSearch', text);\r\n setFilter(() => { return text.toLowerCase(); });\r\n };\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n
\r\n Navigator Updates\r\n
\r\n\r\n
\r\n setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels\r\n .filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1))\r\n .map(X => (\r\n X.vesselID === U.vesselID) : null}\r\n Selected={X.vesselID === selectedVesselID}\r\n />))\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nconst NavigatorVesselListItem = ({ Vessel, UpdateInfo, Selected }) => {\r\n\r\n //let history = useHistory();\r\n\r\n return useMemo(() => {\r\n\r\n // console.log('basket VesselID', Selected);\r\n\r\n const { vesselID } = Vessel;\r\n\r\n\r\n\r\n // const patchLevel = _.get(UpdateInfo, 'patchLevel', null);\r\n const days = _.get(UpdateInfo, 'days', null);\r\n const updateIssue = _.get(UpdateInfo, 'updateIssue', false);\r\n const updateWarning = _.get(UpdateInfo, 'updateWarning', null);\r\n const blocked = _.get(UpdateInfo, 'blocked', false);\r\n // console.log('UpdateInfo.patchLevel', patchLevel);\r\n\r\n let statusColor = \"Green\";\r\n if (updateIssue) { statusColor = \"Red\" }\r\n else if (updateWarning) { statusColor = \"Orange\" }\r\n\r\n\r\n const handleVesselClick = (vesselID) => {\r\n //// console.log('Vessel Click', Vessel, vesselID);\r\n //BasketActions.setVessel(vesselID);\r\n //history.push(`/sales/catalogue/${vesselID}`);\r\n }\r\n\r\n return (\r\n \r\n \r\n {blocked === true && ()}\r\n\r\n \r\n }\r\n >\r\n\r\n \r\n );\r\n\r\n }, [Vessel, UpdateInfo, Selected]);\r\n\r\n}\r\n\r\nexport default NavigatorUpdates\r\n","import React, { useEffect, useState } from 'react';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody } from '@material-ui/core';\r\n// import { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport Moment from 'react-moment';\r\nimport DoneIcon from '@material-ui/icons/Done';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\n\r\n\r\nconst NavigatorUpdateList = ({ match }) => {\r\n\r\n const loaded = true;\r\n const vesselID = +match.params.vesselID || 0;\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(() => {\r\n fleetActions.zoomToVessel(vesselID);\r\n }, [vesselID]);\r\n\r\n return (\r\n \r\n
\r\n Update History\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst VesselUpdateHistory = ({ VesselID }) => {\r\n const [updates, setUpdates] = useState([]);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/navigator/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('VesselUpdateHistory', data);\r\n setUpdates(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n\r\n }, [VesselID]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n #\r\n Date\r\n Size\r\n Loaded\r\n \r\n \r\n \r\n {\r\n updates.map(row => (\r\n \r\n {row.edbRequestID}\r\n\r\n \r\n \r\n \r\n\r\n {readableBytes(row.updateSize)}\r\n\r\n {row.loaded ? : ''}\r\n \r\n ))\r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst readableBytes = (bytes) => {\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']\r\n\r\n\r\n if (!bytes) return 'N/A'\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\r\n\r\n return (bytes / Math.pow(1024, i)).toFixed(2) + ' ' + sizes[i];\r\n}\r\n\r\nexport default NavigatorUpdateList;\r\n","import React from 'react';\r\nimport { Typography, List, Divider } from '@material-ui/core';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport _ from 'lodash';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\n\r\nconst FleetDetails = ({ match }) => {\r\n\r\n const [globalState] = useGlobalStore();\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n\r\n const loaded = Boolean(globalState.vessels);\r\n\r\n const vessels = _.orderBy(\r\n (globalState.vessels || []).filter(X => (X.vesselName.toLowerCase().indexOf(filter) !== -1)),\r\n ['vesselName'],\r\n [sort > 0 ? 'asc' : 'desc']);\r\n\r\n const counter = selectedVesselID + filter.length + sort;\r\n return (\r\n \r\n
\r\n Fleet Overview\r\n
\r\n\r\n
\r\n setFilter(() => F.toLowerCase())} onSort={(S) => setSort(() => S)} />\r\n
\r\n\r\n
\r\n {\r\n \r\n {\r\n vessels\r\n .map(X => (\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 FleetDetails\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport { Typography, Paper, Table, TableHead, TableRow, TableCell, TableBody, Checkbox, Link, Chip } from '@material-ui/core';\r\nimport Moment from 'react-moment';\r\nimport httpService from '../../../../Global/Services/httpService';\r\nimport { ChipStatusValid, ChipStatusWarning, ChipStatusIssue } from '../../../Widgets/Status/ChipStatus';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\r\nimport GetAppIcon from '@material-ui/icons/GetApp';\r\nimport EmailIcon from '@material-ui/icons/Email';\r\nimport { useGlobalStore } from '../../../../Global/Stores/globalStore';\r\nimport { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport _ from 'lodash'\r\n\r\nconst FleetDetailsVessel = ({ match }) => {\r\n\r\n const vesselID = +match.params.vesselID || 0;\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(() => {\r\n fleetActions.zoomToVessel(vesselID);\r\n }, [vesselID]);\r\n\r\n\r\n if (vesselID <= 0)\r\n return null;\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\nconst VesselDetailsHeader = ({ VesselID }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n\r\n\r\n const { vessels } = globalState;\r\n return useMemo(() => {\r\n const vessel = globalActions.findVessel(VesselID) || {};\r\n return ({vessel.vesselName});\r\n }, [VesselID, vessels]);\r\n}\r\n\r\nconst VesselDetails = ({ VesselID }) => {\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\nconst VesselGeneralInfoTable = ({ VesselID }) => {\r\n const [open, setOpen] = useState(true);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/general/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"GENERAL INFORMATION\";\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title}\r\n \r\n \r\n \r\n {\r\n open && details && (\r\n \r\n \r\n e-mail:\r\n \r\n \r\n \r\n \r\n \r\n IMO:\r\n {details.imo || 'N/A'}\r\n \r\n \r\n Manager:\r\n {details.manager}\r\n \r\n \r\n Responsible:\r\n \r\n \r\n \r\n \r\n \r\n Chart Agent:\r\n {details.chartagent}\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselDocumentsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n\r\n httpService.get(`/api/fleet/documents/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"LICENSES/CERTIFICATES\";\r\n //const titleFull = details ? `${Title} [${1 + +details.avcsPermit + +details.navigator}]` : `${Title}`;\r\n const count = details && ;\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n \r\n {Title} {count}\r\n \r\n \r\n \r\n \r\n {\r\n open && details && (\r\n \r\n {\r\n details.avcsPermit && (\r\n \r\n AVCS permit:\r\n \r\n } href={httpService.getVesselAvcsPermitLink(VesselID)} />\r\n \r\n \r\n )}\r\n\r\n \r\n Certificate of Enrollment:\r\n \r\n } href={httpService.getVesselCertificateLink(VesselID)} />\r\n  \r\n \r\n \r\n \r\n\r\n {\r\n details.navigator && (\r\n \r\n Navigator License:\r\n \r\n } href={httpService.getVesselNavigatorLicenseLink(VesselID)} />\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst SendVesselCertificateIcon = ({ VesselID }) => {\r\n\r\n const handleMailCertificate = () => {\r\n // console.log('handleMailCertificate', VesselID);\r\n\r\n httpService.get(`/api/file/enrollment/${VesselID}/mail`)\r\n .then(response => { })\r\n .catch(error => { });\r\n }\r\n\r\n return ();\r\n}\r\n\r\n\r\nconst VesselSubscriptionsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/subscriptions/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('general', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n\r\n const Title = \"SUBSCRIPTIONS\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n \r\n {Title} {count}\r\n \r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Subscription\r\n Until\r\n Paused\r\n \r\n )}\r\n \r\n \r\n\r\n {\r\n open && details && details.map(X => (\r\n \r\n {X.subscriptionService}\r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Subscriptions -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselShipmentHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/shipments/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesShipmentID);\r\n // console.table(data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"SHIPMENT HISTORY\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Delivery\r\n Shipment\r\n Status\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.salesShipmentStatus}\r\n {/* {X.totalPrice} {X.currency} */}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Shipments -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselApprovelsTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState([]);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/approvals/${VesselID}`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('general', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"QUOTATIONS TO APPROVE\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n {\r\n open && details && details.length > 0 && (\r\n \r\n Expires\r\n Quote\r\n Qty\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.totalQuantity}\r\n {X.totalPrice} {X.currency}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Approvals -\r\n \r\n )\r\n }\r\n\r\n\r\n \r\n
);\r\n\r\n}\r\n\r\nconst VesselFlatFeeHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/flatfees/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesShipmentID);\r\n // console.table(data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"FLAT FEE CONTRACTS\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Products\r\n End Date\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n {X.productGroups}\r\n \r\n {X.price} {X.currency}\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Flat Fee contracts -\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselOrderHistory = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/orders/${VesselID}`)\r\n .then(response => {\r\n const data = _.orderBy(response.data, X => -X.salesOrderID);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n\r\n const Title = \"ORDER HISTORY\";\r\n //const titleFull = details ? `${Title} [${details.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.length > 0 && (\r\n \r\n Ordered\r\n Order\r\n Qty\r\n Price\r\n Link\r\n \r\n )}\r\n \r\n \r\n {\r\n open && details && details.map((X, index) => (\r\n \r\n \r\n {X.reference}\r\n {X.totalQuantity}\r\n {X.totalPrice} {X.currency}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n\r\n {\r\n open && details && details.length === 0 && (\r\n \r\n - There are no Orders -\r\n \r\n )\r\n }\r\n \r\n
\r\n );\r\n}\r\n\r\nconst VesselHoldingStatusTable = ({ VesselID }) => {\r\n\r\n const [open, setOpen] = useState(false);\r\n const [details, setDetails] = useState(null);\r\n\r\n useEffect(() => {\r\n setDetails(() => null);\r\n\r\n httpService.get(`/api/fleet/holdings/${VesselID}/status`)\r\n .then(response => {\r\n const data = response.data;\r\n // console.log('holdings status', data);\r\n setDetails(() => data);\r\n })\r\n .catch(error => {\r\n //alert(error);\r\n });\r\n\r\n }, [VesselID]);\r\n\r\n const Title = \"INVENTORY STATUS\";\r\n //const titleFull = details ? `${Title} [${details.productGroupStatus.length}]` : `${Title}`;\r\n const count = ;\r\n\r\n return (\r\n \r\n setOpen(O => !O)}>\r\n \r\n {Title} {count}\r\n \r\n\r\n {open && details && details.productGroupStatus.length > 0 && (\r\n \r\n Product\r\n OK\r\n Edition\r\n Correction\r\n \r\n\r\n )}\r\n \r\n \r\n\r\n {\r\n open && details && details.productGroupStatus.map((X, index) => (\r\n \r\n {details.productGroups.find(P => P.productGroupID === X.productGroupID).caption}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))\r\n }\r\n\r\n {\r\n open && details && details.productGroupStatus.length === 0 && (\r\n \r\n - There are no Holdings -\r\n \r\n )\r\n }\r\n\r\n \r\n
\r\n );\r\n\r\n}\r\n\r\n\r\nconst CountChip = ({ object, objectLink, Count = -1 }) => {\r\n\r\n\r\n const count = _.get(object, objectLink, Count);\r\n\r\n if (count < 0) return null;\r\n\r\n return ();\r\n}\r\n\r\nconst LinkTo = ({ text, icon, href }) => {\r\n\r\n return (\r\n \r\n {text}\r\n {icon}\r\n );\r\n}\r\n\r\n\r\nexport default FleetDetailsVessel\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport FleetOverview from './FleetOverview';\r\nimport Holdings from './Holdings/Holdings';\r\nimport VesselHoldingsLineDetail from './Holdings/VesselHoldingsLineDetail/VesselHoldingsLineDetail';\r\nimport VesselHoldingsDetail from './Holdings/VesselHoldingsDetail/VesselHoldingsDetail';\r\nimport FleetStatus from './FleetStatus/FleetStatus';\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport FleetStatusDetail from './FleetStatus/FleetStatusDetail';\r\nimport Tracking from './Tracking/Tracking';\r\nimport NavigatorUpdates from './Navigator/Navigator';\r\nimport NavigatorUpdateList from './Navigator/NavigatorUpdateList';\r\nimport FleetDetails from './Details/FleetDetails';\r\nimport FleetDetailsVessel from './Details/FleetDetailsVessel';\r\n//import ViewFolios from './Folios/Folio';\r\n//import VesselFolio from './Folios/ListFolios/VesselFolios';\r\n\r\nconst Fleet = () => {\r\n\r\n const [, fleetActions] = useFleetStore();\r\n\r\n useEffect(\r\n () => {\r\n fleetActions.getHoldingsOverview();\r\n fleetActions.getFleetPositions();\r\n }, []\r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n {/* \r\n */}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n {/* */}\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
);\r\n};\r\n\r\nexport default Fleet;\r\n","import React, { useEffect } from 'react';\r\nimport _ from 'lodash';\r\nimport {InputLabel, MenuItem, FormControl, Select } from '@material-ui/core';\r\nimport { useHistory, Link, Redirect } from 'react-router-dom';\r\n//import { useFleetStore } from '../../../Global/Stores/fleetStore';\r\n\r\nconst SelectList = ({ managerID, dataList, inputLabel, inputType, selected }) => {\r\n let history = useHistory();\r\n const [company, setCompany] = React.useState('');\r\n\r\n // Set this so if there is no selecttion, we can \r\n if(selected === 0 || selected === null){selected = ''};\r\n //const [companyID, setCompanyID] = React.useState('');\r\n\r\n //lets count the results so if it's empty we show something nice. \r\n // Am a nice person... no?\r\n let countDataResults = dataList.length;\r\n\r\n //lets define what to show when there is no data in the select box \r\n let noDataMessage = inputType === \"managers\" ? \"No Managers Found\" : \"No Folios Found\";\r\n\r\n\r\n // We are going to count the results and only use it if its a folio. \r\n // When result is one we preselect.\r\n let countData = dataList.length;\r\n let loaded = Boolean(dataList);\r\n\r\n useEffect (\r\n () => {\r\n if(inputType === \"folios\"){\r\n if(dataList.length === 1)\r\n {\r\n //console.log(dataList)\r\n selected = loaded ? dataList[0].folioID : selected;\r\n history.push(`/folios/status/${managerID}/${selected}`)\r\n }\r\n }\r\n }, [dataList]\r\n );\r\n\r\n // const [, fleetActions] = useFleetStore();\r\n // const [fleetState] = useFleetStore();\r\n // const [filter, setFilter] = React.useState('');\r\n // const [sort, setSort] = React.useState(1);\r\n\r\n // useEffect(\r\n // () => {\r\n // //fleetActions.getHoldingsOverview();\r\n // fleetActions.getFolioOverview();\r\n // fleetActions.getFleetPositions();\r\n // }, []\r\n // );\r\n\r\n // const loaded = Boolean(fleetState.folios);\r\n // let companyList = loaded ? fleetState.folios.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1) : [];\r\n\r\n //console.log(`Company ID is now: ${companyID}`);\r\n\r\n const handleChange = (event) => {\r\n setCompany(event.target.value);\r\n //setCompanyID(event.target.key);\r\n if(countDataResults >= 1){\r\n if(managerID != '')\r\n {\r\n history.push(`/folios/status/${managerID || 0}/${event.target.value}`);\r\n //console.log(\"Triger folio change\");\r\n }\r\n else\r\n {\r\n history.push(`/folios/status/${event.target.value}`);\r\n //console.log(\"Trigger company\");\r\n }\r\n }\r\n };\r\n\r\n //if(companyID != 0)\r\n //{\r\n return (\r\n
\r\n \r\n {inputLabel}\r\n \r\n {\r\n countDataResults <= 0 ?\r\n {noDataMessage}\r\n :\r\n dataList.map(X => (\r\n inputType === \"managers\"?\r\n {X.name}\r\n :\r\n {X.title}\r\n ))\r\n }\r\n \r\n \r\n
\r\n );\r\n // }\r\n // else\r\n // {\r\n // return (null);\r\n // }\r\n};\r\n\r\nexport default SelectList;\r\n","import React, { useMemo } from 'react';\r\nimport { ListItem, ListItemText, Chip, Divider, Link, makeStyles } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport NumberStatus from '../../Widgets/NumberStatus';\r\n// import _ from 'lodash';\r\n\r\n\r\nconst useStyles = makeStyles({\r\n link: {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n },\r\n listItem: {\r\n // backgroundColor: '#e9edf7',\r\n textDecoration: 'none',\r\n },\r\n});\r\n\r\nconst ListFoilioItems = ({ vessel, subText, number, numberSmall, open, subSelectedID, children, setOpen, onClick, statusComponent, linkTo, selected }) => {\r\n const classes = useStyles();\r\n\r\n // return useMemo(() => {\r\n\r\n const handleClick = () => {\r\n\r\n if (onClick) {\r\n onClick(vessel.vesselID);\r\n }\r\n\r\n\r\n if (children) {\r\n setOpen(!open);\r\n }\r\n\r\n }\r\n //Convert to upper case\r\n const vesselName = vessel.vesselName.toUpperCase();\r\n\r\n const listItem = (\r\n \r\n {/* */}\r\n \r\n\r\n {\r\n number ? : null\r\n }\r\n\r\n {\r\n numberSmall ? : null\r\n }\r\n\r\n {\r\n statusComponent ? statusComponent : null\r\n }\r\n\r\n {\r\n children ? (open === true ? : ) : null\r\n }\r\n\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n {\r\n linkTo ? {listItem} : listItem\r\n }\r\n\r\n {\r\n children ? children : null\r\n }\r\n \r\n );\r\n // }, [vessel, number, subText, numberSmall, subSelectedID, open, selected]);\r\n\r\n};\r\n\r\nexport default ListFoilioItems;\r\n","import React, { useEffect } from 'react';\r\nimport { Box, List, Divider } from '@material-ui/core';\r\nimport SearchFilter from '../../Misc/SearchFilter';\r\nimport SelectList from '../../Misc/SelectList';\r\n//import { useFleetStore } from '../../../../Global/Stores/fleetStore';\r\nimport { useFolioStore } from '../../../../Global/Stores/folioStore';\r\n\r\n//import Loading from '../../Misc/Loading';\r\nimport _ from 'lodash';\r\n//import VesselProductGroups from './VesselProductGroups';\r\n//import ContentColumn from '../../../Custom/ContentColumn';\r\n//import ListItemVessel from '../../_StyledComponents/ListItemVessel';\r\nimport ListFoilioItems from '../../_StyledComponents/ListFoilioItems';\r\n//import { HoldingStatus } from '../../../Widgets/ProductGroupStatus';\r\nimport ContentColumnNoMemo from '../../../Custom/ContentColumnNoMemo';\r\nimport { useHistory, Link, Redirect } from 'react-router-dom';\r\n//import http from '../../../../Global/Services/httpService';\r\n\r\n\r\nconst Folio = ({ match }) => {\r\n\r\n const [folioState ,folioAction] = useFolioStore();\r\n\r\n //const [fleetState] = useFleetStore();\r\n //const [folioState] = useFolioStore();\r\n\r\n const [filter, setFilter] = React.useState('');\r\n const [sort, setSort] = React.useState(1);\r\n\r\n \r\n\r\n let history = useHistory();\r\n\r\n\r\n const selectedManagerID = +match.params.managerID || 0;\r\n const selectedFolioID = +match.params.folioID || 0;\r\n const selectedVesselID = +match.params.vesselID || 0;\r\n // console.log('match', selectedVesselID);\r\n //console.log(selectedManagerID);\r\n // const salesOrderID = 0;\r\n \r\n\r\n\r\n useEffect(\r\n () => {\r\n folioAction.getManagers();\r\n }, []\r\n );\r\n \r\n useEffect(\r\n () => {\r\n if(selectedManagerID > 0){\r\n folioAction.getFolios(selectedManagerID);\r\n }\r\n \r\n if(selectedManagerID > 0 && selectedFolioID > 0){\r\n folioAction.getFolioVessels(selectedManagerID, selectedFolioID);\r\n folioAction.getFolioItems(selectedManagerID, selectedFolioID);\r\n }\r\n }, [selectedManagerID, selectedFolioID]\r\n );\r\n\r\n useEffect (\r\n () => {\r\n if(Boolean(folioState.managers)){\r\n //console.log(folioState.managers.length)\r\n if(folioState.managers.length <= 1){\r\n history.push(`/folios/status/${folioState.managers[0].managerID}`)\r\n }\r\n }\r\n }, [folioState.managers]\r\n );\r\n\r\n const onSearch = (text) => {\r\n setFilter(() => { return text.toLowerCase(); })\r\n };\r\n\r\n //const loadedFleet = Boolean(fleetState.vessels);\r\n const loadedVessels = Boolean(folioState.folioVessels);\r\n const loadedFolio = Boolean(folioState.folios);\r\n const loadedManagers = Boolean(folioState.managers);\r\n\r\n\r\n //let vessels = loadedFleet ? fleetState.vessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1 && X.managerID == selectedManagerID) : [];\r\n let vessels = loadedVessels ? folioState.folioVessels.filter(X => X.vesselName.toLowerCase().indexOf(filter) !== -1 && X.managerID == selectedManagerID) : [];\r\n\r\n let companyList = loadedManagers ? folioState.managers : [];\r\n //let reload = loadedManagers ? folioAction.getFolios(selectedManagerID) : [];\r\n let FolioList = loadedFolio ? folioState.folios : [];\r\n\r\n vessels = _.orderBy(vessels, ['vesselName'], [sort > 0 ? 'asc' : 'desc']);\r\n\r\n\r\n const counter = selectedManagerID + filter.length + sort;\r\n // const [getFirstManagerID] = companyList;\r\n\r\n return (\r\n \r\n {/* Select Company/Manager \r\n We count the number of company results and if less than 2 we do not show this drop down.\r\n */}\r\n {companyList.length > 1 ?\r\n
\r\n \r\n
\r\n :null}\r\n \r\n {/* Select Folios */}\r\n {selectedManagerID != 0 ?\r\n
\r\n \r\n
\r\n :null}\r\n\r\n {selectedFolioID != 0 ?\r\n
\r\n setSort(() => S)} />\r\n
\r\n :null}\r\n\r\n
\r\n {\r\n \r\n {\r\n selectedFolioID != 0 ?\r\n vessels.map(X => (\r\n \r\n /**/ }\r\n linkTo={`/folios/status/${selectedManagerID}/${selectedFolioID}/details/${X.vesselID}`}\r\n />))\r\n :null\r\n }\r\n \r\n \r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst FolioStatus =({ folioStatus })=>{\r\n\r\n const loaded = Boolean(folioStatus);\r\n //console.log(folioStatus)\r\n\r\n const itemsPresent = loaded ? folioStatus.vesselItemsActive : 0;\r\n const itemsMissing = loaded ? folioStatus.vesselItemsMissing : 0;\r\n const itemsSleeping = loaded ? folioStatus.vesselItemsSleeping : 0; //Buffles me too. why would we have items that sleep? someone already wake them up!!!\r\n\r\n const total = itemsPresent + itemsMissing + itemsSleeping;\r\n const issues = Math.ceil(((itemsMissing) * (1 / total) * 360));\r\n const warnings = Math.ceil(((itemsSleeping) * (1 / total) * 360));\r\n const open = Math.max(360 - (issues + warnings), 0);\r\n \r\n // console.log(\"VesselID: \", vesselID, \"Present: \", itemsPresent, \"\\nMissing: \", itemsMissing)\r\n return(\r\n
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={0} data-value={open}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open} data-value={warnings}>
\r\n
180 ? \"pie-vesselgroup big\" : \"pie-vesselgroup\"} data-start={open + warnings} data-value={issues}>
\r\n

{itemsMissing}

\r\n
\r\n )\r\n}\r\n\r\nexport default Folio;\r\n","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport SaveIcon from '@material-ui/icons/SaveAlt';\r\nimport { IconButton, Divider, ListItemText, FormControlLabel } from '@material-ui/core';\r\nimport MailTo, { MailHoldingDetailTo } from '../../../Misc/MailTo';\r\n// import OrderStatus from '../../../Widgets/OrderStatus';\r\nimport { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\nimport { DownloadHoldings } from '../../../Misc/DownloadFile';\r\n\r\nconst FolioItemDetailHeader = ({ managerID, folioID, holdingDetail, history }) => {\r\n\r\n if (!holdingDetail) return null;\r\n\r\n \r\n const handleBack = () => {\r\n //const url = history.location.pathname;\r\n //const uurl = url.substring(-1, url.lastIndexOf(\"/\")); // remove Vessel ID\r\n //const popLink = uurl.substring(-1, uurl.lastIndexOf(\"/\")); // remove /details\r\n history.push(`/folios/status/${managerID}/${folioID}`);\r\n }\r\n\r\n return (\r\n \r\n {/*
*/}\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* */}\r\n {/*
{holdingDetail.vessel.vesselItems.length}
*/}\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 withRouter(FolioItemDetailHeader);\r\n","import React, { useState, useMemo } from 'react';\r\nimport { List, ListItem, ListItemText, ListItemIcon, Collapse, Link } from '@material-ui/core';\r\nimport SendIcon from '@material-ui/icons/Send';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport _ from 'lodash';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n// import { HoldingLinesStatus } from '../../../../Widgets/ProductGroupStatus';\r\n// import HoldingLineStatus from '../../../../Widgets/HoldingLineStatus';\r\nimport StatusCircle from '../../../../Widgets/StatusCircle';\r\n\r\n/*What will happen here;\r\n * Categorize result under status (1)Active (2)Inactive (3)Missing\r\n *\r\n *\r\n */\r\n\r\nconst HoldingDetailList = ({ holdingDetail, selectedItemID, selectedGroups, toggleSelectedGroup, managerID, folioID, vesselID }) => {\r\n\r\n // const companyID = this.props.match.params.companyID || 0;\r\n // const folioID = +match.params.folioID || 0;\r\n // const vesselID = +match.params.vesselID || 0;\r\n // const itemID = +match.params.itemID || 0;\r\n // console.log(companyID, folioID, vesselID, itemID);\r\n \r\n // const [outOpen, setInOpen] = React.useState(true);\r\n // const [inOpen, setOutOpen] = React.useState(true);\r\n\r\n // //handle items in inventory open close click\r\n // const handleOutClick = () => {\r\n // setOutOpen(!outOpen);\r\n // };\r\n\r\n // //handle items not in inventory open and close click\r\n // const handleInClick = () => {\r\n // setInOpen(!inOpen);\r\n // };\r\n\r\n\r\n\r\n\r\n // console.log(\"Out: \", outOpen, \"\\nIn: \", inOpen);\r\n\r\n if (!holdingDetail) return null;\r\n //Get all items in inventory\r\n const itemsInInventory = holdingDetail.filter(X => X.inInventory === true);\r\n\r\n //Get all items not in inventory\r\n const itemsNotInInventory = holdingDetail.filter(X => X.inInventory === false);\r\n\r\n //Get total of folio items, items present and items not present\r\n let totalFolioItems = holdingDetail.length;\r\n let totalPresentITems = itemsInInventory.length;\r\n let totalMissingItems = itemsNotInInventory.length;\r\n\r\n // console.log(\"Folio Total: \", totalFolioItems, \"\\nPresent: \", totalPresentITems, \"\\nMissing: \", totalMissingItems)\r\n\r\n\r\n //console.log(\"Items in Inventory\", itemsInInventory);\r\n //console.log(\"Items Not in Inventory\", itemsNotInInventory);\r\n\r\n return (\r\n \r\n \r\n {\r\n holdingDetail.map(X => \r\n \r\n )\r\n }\r\n \r\n \r\n );\r\n};\r\n\r\n// This will display everything along with the statuses\r\nconst FolioItemsList = ({ itemID, itemNumber, itemTitle, inInventory, active, selectedItemID, managerID, folioID, vesselID }) => {\r\n\r\n let itemStatus;\r\n // Lets now decide the status of each item;\r\n // red(not in inventory and not active) \r\n // OR orange(in inventory but not active)\r\n // OR green(in inventory and active)\r\n if(!inInventory && !active)\r\n {\r\n itemStatus = \"statusRed\";\r\n }\r\n else if(inInventory && !active)\r\n {\r\n itemStatus = \"statusOrange\";\r\n }\r\n else if(inInventory && active)\r\n {\r\n itemStatus = \"statusGreen\";\r\n }\r\n\r\n const to = `/folios/status/${managerID}/${folioID}/details/${vesselID}/${itemID}`;\r\n //console.log(\"this ID: \", itemID, \"matches: \", selectedItemID )\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\n// const HoldingProductGroup = ({ productGroup, vessel, lines, open, toggleSelectedGroup, selectedItemID }) => {\r\n\r\n// // const productgroupItemsAll = vessel.vesselItems.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n// // const productgroupItems = lines.filter(I => I.item.productGroupID === productGroup.productGroupID);\r\n\r\n// // const itemLength = productgroupItems.length;\r\n\r\n\r\n// return useMemo(() => {\r\n\r\n// // console.log('productgroupItemsAll.length', productgroupItemsAll.length);\r\n// // console.log('productgroupItems.length', open, productgroupItems.length);\r\n\r\n// if (lines.length === 0)\r\n// return null;\r\n\r\n// return (\r\n// \r\n// toggleSelectedGroup(lines.itemID)} button divider selected={open}>\r\n// \r\n// \r\n// \r\n\r\n// {/* Display name */}\r\n// {/* I.item.productGroupID === productGroup.productGroupID)} /> */}\r\n// {/* */}\r\n// {\r\n// open ? : \r\n// }\r\n// \r\n// \r\n// \r\n// {\r\n// lines.map(X => )\r\n// }\r\n// \r\n// \r\n// );\r\n\r\n// }, [open, selectedItemID]);\r\n// }\r\n\r\n\r\n// const HoldingLine = ({ line, selected }) => {\r\n// //const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n// return (\r\n// // \r\n// \r\n// \r\n// \r\n// \r\n// // \r\n// );\r\n// }\r\n\r\n//Keeping this. Just in case the need arises. \r\n// const FolioItemSection = ({ dataArray, groupHeader }) => {\r\n \r\n// const [open, setOpen] = React.useState(false);\r\n \r\n// //handle items not in inventory open and close click\r\n// const handleClick = () => {\r\n// setOpen(!open);\r\n// };\r\n\r\n// return(\r\n// //const to = `/fleet/holdings/${line.vesselID}/${line.item.itemID}`;\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// {/* Display name */}\r\n// {/* I.item.productGroupID === productGroup.productGroupID)} /> */}\r\n// {/* */}\r\n// {\r\n// open ? : \r\n// }\r\n// \r\n// \r\n// \r\n// {\r\n// // lines.map(X => )\r\n// }\r\n// {/* */}\r\n// {/* */}\r\n// {/* */}\r\n// {\r\n// dataArray.map(X => \r\n// \r\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 HoldingDetailList;\r\n","import React, { useEffect, useState } from 'react';\r\nimport FolioItemDetailHeader from './FolioItemDetailHeader';\r\nimport FolioItemDetailList from './FolioItemDetailList';\r\nimport { useFolioStore } from '../../../../../Global/Stores/folioStore';\r\nimport HoldingsFilter from '../../../../Widgets/Filters/HoldingsFilter';\r\nimport ContentColumn from '../../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\nimport { useFleetStore } from '../../../../../Global/Stores/fleetStore';\r\n\r\nconst FolioItems = ({ match }) => {\r\n \r\n const managerID = +match.params.managerID || 0;\r\n const folioID = +match.params.folioID || 0;\r\n const vesselID = +match.params.vesselID || 0;\r\n const itemID = +match.params.itemID || 0;\r\n \r\n const [folioState, folioActions] = useFolioStore();\r\n\r\n\r\n const [selectedGroups, setSelectedGroups] = useState([]);\r\n\r\n useEffect(\r\n () => {\r\n folioActions.getFolioVesselItems(managerID, folioID, vesselID);\r\n },\r\n [vesselID, folioID]\r\n );\r\n \r\n const [, fleetActions] = useFleetStore();\r\n useEffect(() => {\r\n fleetActions.zoomToVessel(vesselID);\r\n }, [vesselID]);\r\n\r\n // useEffect(\r\n // () => {\r\n // folioActions.getFolioItems(companyID, folioID);\r\n // },\r\n // [folioID]\r\n // );\r\n\r\n const toggleSelectedGroup = (pgid) => {\r\n\r\n //console.log(\"toggleSelectedGroup\", pgid);\r\n // const newState = selectedGroups.includes(pgid) ? selectedGroups.filter(X => X !== pgid) : [...selectedGroups, pgid];\r\n // setSelectedGroups(prev => prev.includes(pgid) ? prev.filter(X => X !== pgid) : [...prev, pgid]);\r\n setSelectedGroups(prev => prev.includes(pgid) ? [] : [pgid]);\r\n }\r\n\r\n\r\n const loaded = Boolean(folioState.folioVesselItems);\r\n //const filterID = +_.get(folioState, 'holdingDetail.filter.id', 0);\r\n\r\n // console.log('filterID', { filterID, ...selectedGroups });\r\n\r\n\r\n return (\r\n \r\n {\r\n loaded ? (\r\n \r\n
\r\n \r\n
\r\n\r\n {/*
\r\n \r\n
*/}\r\n\r\n
\r\n \r\n
\r\n
) : null\r\n\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default FolioItems;\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport { useFleetStore } from '../../../Global/Stores/fleetStore';\r\nimport { useFolioStore } from '../../../Global/Stores/folioStore';\r\nimport ViewFolios from '../Folios/ViewFolios/ViewFolios';\r\nimport Holdings from './Holdings/Holdings';\r\n//import VesselFolio from './Folios/ListFolios/VesselFolios';\r\nimport FolioItems from './Holdings/FolioHoldingsDetail/FolioItems';\r\n\r\n\r\nconst Folio = ({ match }) => {\r\n\r\n// //const [, folioActions] = useFolioStore();\r\n// const [, fleetActions] = useFleetStore();\r\n\r\n// // const selectedCompanyID = +match.params.companyID || 0;\r\n// // console.log(selectedCompanyID);\r\n\r\n\r\n// useEffect(\r\n// () => {\r\n// //fleetActions.getHoldingsOverview();\r\n// fleetActions.getHoldingsOverview();\r\n// fleetActions.getFleetPositions();\r\n// //folioActions.getFolioOverview();\r\n// // folioActions.getManagers();\r\n// }, []\r\n// );\r\n\r\n return (\r\n
\r\n {/* Folio Management*/}\r\n \r\n {/* */}\r\n \r\n\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Folio;\r\n","import React, { useEffect, useState, useMemo } from 'react'\r\nimport { Box, Typography, Grid, TextField, Button } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport { isValidateEmail } from '../../../../Global/Data/Methods';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport ProtectedArea from '../../../Custom/ProtectedArea';\r\n\r\nconst Profile = () => {\r\n const [userState, userActions] = useUserStore();\r\n const [loading, setLoading] = useState(false);\r\n const [profileState, setProfileState] = useState();\r\n\r\n useEffect(() => {\r\n setProfileState(() => ({ ...userState.user, password: \"\", password2: \"\" }))\r\n }, []);\r\n\r\n return useMemo(() => {\r\n\r\n if (!profileState)\r\n return null;\r\n\r\n const { firstName, lastName, email, password, password2 } = profileState;\r\n // console.log('profileState', profileState);\r\n\r\n const canSave = (\r\n (firstName.length > 0) &&\r\n (lastName.length > 0) &&\r\n (email.length > 0) &&\r\n (isValidateEmail(email)) &&\r\n (password.length > 5) &&\r\n (password === password2));\r\n\r\n const handleChange = (e) => {\r\n if (!loading) {\r\n const { name, value } = e.target;\r\n setProfileState(() => ({ ...profileState, [name]: value }));\r\n }\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n if (!canSave) return;\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n email: email,\r\n password: password,\r\n };\r\n\r\n setLoading(() => true);\r\n\r\n http.post('/api/account/users/change', postData)\r\n .then(result => {\r\n\r\n // console.log('changed Profile', result.data);\r\n userActions.login({ user: result.data.user });\r\n })\r\n .catch(() => {\r\n\r\n setLoading(() => false);\r\n });\r\n }\r\n\r\n return (\r\n \r\n
\r\n\r\n My Profile\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n SAVE PROFILE\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\n }, [profileState, loading])\r\n}\r\n\r\nexport default Profile\r\n","import React from 'react';\r\nimport { Typography, Box } from '@material-ui/core';\r\n// import CommentIcon from '@material-ui/icons/Comment';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemLink from '../../Misc/ListItemLink';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst Users = () => {\r\n return (\r\n \r\n
\r\n \r\n User Management\r\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 Users\r\n","import React, { useEffect, useMemo } from 'react';\r\nimport { Table, TableHead, TableCell, TableBody, TableRow } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\nimport _ from 'lodash';\r\n\r\nconst UserList = ({ match, history }) => {\r\n\r\n const [userState, userActions] = useUserStore();\r\n\r\n const id = +_.get(match, 'params.id', 0);\r\n\r\n // console.log('id', id);\r\n\r\n useEffect(() => {\r\n userActions.getUsers();\r\n }, []);\r\n\r\n\r\n const { users } = userState;\r\n //console.log('users 1', users);\r\n\r\n return useMemo(() => {\r\n\r\n //console.log('users 2', users);\r\n const sorted = _.orderBy(users, [I => I.firstName.toLowerCase()]);\r\n //console.log('users 3', sorted);\r\n\r\n const openUser = (id) => {\r\n history.push(`/account/users/manage/${id}`)\r\n }\r\n\r\n const loaded = users.length > 0;\r\n return (\r\n \r\n \r\n \r\n \r\n First Name\r\n Last Name\r\n \r\n \r\n\r\n \r\n {\r\n sorted.map(X => {\r\n // console.log('X', X)\r\n return ()\r\n })\r\n }\r\n \r\n\r\n
\r\n
\r\n );\r\n }, [users, id]);\r\n}\r\n\r\nconst UserRow = ({ user, openUser, selected }) => {\r\n\r\n // console.log('User Row', user);\r\n return useMemo(() => {\r\n\r\n const { personID, firstName, lastName, deleted } = user;\r\n return (\r\n deleted !== true ? (\r\n openUser(personID)} selected={selected} hover={true} >\r\n {firstName}\r\n {lastName}\r\n ) : null);\r\n\r\n }, [user, selected])\r\n}\r\n\r\nexport default UserList\r\n","import React, { useState } from 'react'\r\nimport { Box, Grid, TextField, FormControlLabel, Checkbox, Button, Link, Typography } from '@material-ui/core';\r\nimport http from '../../../../Global/Services/httpService';\r\nimport { isValidateEmail } from '../../../../Global/Data/Methods';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst UserCreate = ({ history }) => {\r\n\r\n const [creating, setCreating] = useState(false);\r\n const [firstName, setFirstName] = useState(\"\");\r\n const [lastName, setLastName] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n // const [password, setPassword] = useState(\"\");\r\n // const [passwordRepeat, setPasswordRepeat] = useState(\"\");\r\n\r\n\r\n\r\n const disabled = creating ||\r\n (firstName.length < 2) ||\r\n (lastName.length < 2) ||\r\n // (password.length < 6) ||\r\n // (passwordRepeat.length < 6) ||\r\n // password !== passwordRepeat || \r\n !isValidateEmail(email);\r\n\r\n const firstNameChange = (e) => {\r\n const val = e.target.value;\r\n setFirstName(() => val);\r\n }\r\n\r\n const lastNameChange = (e) => {\r\n const val = e.target.value;\r\n setLastName(() => val);\r\n }\r\n\r\n const emailChange = (e) => {\r\n const val = e.target.value;\r\n setEmail(() => val);\r\n }\r\n\r\n // const passwordChange = (e) => {\r\n // const val = e.target.value;\r\n // setPassword(() => val);\r\n // }\r\n\r\n // const passwordRepeatChange = (e) => {\r\n // const val = e.target.value;\r\n // setPasswordRepeat(() => val);\r\n // }\r\n\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n const postData = {\r\n firstName: firstName,\r\n lastName: lastName,\r\n email: email,\r\n password: 'password',\r\n };\r\n\r\n\r\n setCreating(() => true);\r\n\r\n http.post('/api/account/users/create', postData)\r\n .then(() => {\r\n // actions.login(result.data);\r\n\r\n setFirstName(() => \"\");\r\n setLastName(() => \"\");\r\n setEmail(() => \"\");\r\n // setPassword(() => \"\");\r\n // setPasswordRepeat(() => \"\");\r\n\r\n history.push(\"/account/users\");\r\n })\r\n .catch(() => {\r\n setCreating(() => false);\r\n });\r\n }\r\n\r\n\r\n return (\r\n \r\n
\r\n\r\n Create new user\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n */}\r\n\r\n \r\n Create\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default UserCreate\r\n","import React, { useMemo, useState, useEffect } from 'react';\r\nimport { Box, Typography, Table, TableBody, TableRow, TableCell, FormControl, FormControlLabel, Checkbox, Button } from '@material-ui/core';\r\nimport { useUserStore } from '../../../../Global/Stores/userStore';\r\nimport _ from 'lodash';\r\nimport ContentColumn from '../../../Custom/ContentColumn';\r\n\r\nconst UserDetail = ({ match }) => {\r\n const [userState, userActions] = useUserStore();\r\n\r\n\r\n const id = +_.get(match, 'params.id', 0);\r\n\r\n const user = userState.users.find(X => X.personID === id);\r\n const hasUserManagement = userActions.hasUserManagement();\r\n\r\n\r\n return useMemo(() => {\r\n // console.log('UserDetail', userState);\r\n\r\n if (!user)\r\n return null;\r\n\r\n const handleDeleteUser = () => {\r\n // console.log('deleteUser', user.personID);\r\n userActions.deleteUser(user.personID);\r\n }\r\n\r\n const { firstName, lastName, email } = user;\r\n\r\n return (\r\n \r\n
\r\n User Detail\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n\r\n \r\n \r\n Firstname:\r\n {firstName}\r\n \r\n\r\n \r\n Lastname:\r\n {lastName}\r\n \r\n\r\n \r\n Email:\r\n \r\n {email}\r\n {/* {email} */}\r\n \r\n \r\n\r\n \r\n Features:\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Delete User\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }, [user]);\r\n};\r\n\r\n\r\nconst UserFeatures = ({ user }) => {\r\n const [userState, userActions] = useUserStore();\r\n\r\n\r\n const [features, setFeatures] = useState([]);\r\n\r\n useEffect(() => {\r\n\r\n setFeatures(p => user.userFeatureIDs);\r\n\r\n }, [user])\r\n\r\n\r\n\r\n return useMemo(() => {\r\n\r\n const toggleFeature = (fid) => {\r\n setFeatures(p => {\r\n return p.includes(fid) ? p.filter(X => X !== fid) : [...p, fid];\r\n })\r\n }\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n userActions.setUserFeatures(user.personID, features);\r\n }\r\n\r\n\r\n const canSave = !_.isEqual(user.userFeatureIDs.sort(), features.sort());\r\n const hasUserManagement = userActions.hasUserManagement();\r\n // console.log('hasUserManagement', hasUserManagement)\r\n\r\n\r\n return (\r\n \r\n \r\n {\r\n userState.appFeatures.map(X => (\r\n toggleFeature(X.appFeatureID)}\r\n />\r\n }\r\n label={X.name} />))\r\n }\r\n \r\n Save\r\n \r\n );\r\n\r\n }, [user, user.userFeatureIDs, features]);\r\n}\r\n\r\nexport default UserDetail;\r\n","import React from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport Profile from './Profile/Profile';\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport Users from './Users/Users';\r\nimport UserList from './Users/UserList';\r\nimport UserCreate from './Users/UserCreate';\r\nimport UserDetail from './Users/UserDetail';\r\n\r\nconst Account = () => {\r\n return (\r\n
\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n
);\r\n}\r\n\r\nexport default Account\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Typography, List } from '@material-ui/core';\r\nimport { AnnouncementLine } from '../Home/Summaries/AnnouncementSummary';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport Loading from '../Misc/Loading';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\n\r\nconst NewsList = ({ match }) => {\r\n const [globalState, globalActions] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n const selectedID = +match.params.newsID;\r\n const loaded = Boolean(newsItems.length);\r\n\r\n\r\n useEffect(() => {\r\n globalActions.getAnnouncements();\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n {`News & Announcements`}\r\n
\r\n\r\n
\r\n {\r\n loaded ? (\r\n \r\n {\r\n newsItems.map(X => ())\r\n }\r\n \r\n ) : \r\n }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NewsList\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Typography, List, Paper } from '@material-ui/core';\r\nimport { AnnouncementLine } from '../Home/Summaries/AnnouncementSummary';\r\nimport ContentColumn from '../../Custom/ContentColumn';\r\nimport Loading from '../Misc/Loading';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport Moment from 'react-moment';\r\nimport { useGlobalStore } from '../../../Global/Stores/globalStore';\r\n\r\nconst NewsDetail = ({ match }) => {\r\n const [globalState,] = useGlobalStore();\r\n const newsItems = globalState.newsItems || [];\r\n const loaded = Boolean(newsItems.length);\r\n\r\n const selectedID = +match.params.newsID || 0;\r\n const newsItem = selectedID > 0 ? loaded && newsItems.find(X => X.chartagentNewsID === selectedID) : null;\r\n\r\n return (\r\n selectedID > 0 ?\r\n \r\n
\r\n {`Details`}\r\n
\r\n\r\n
\r\n {\r\n newsItem && (\r\n \r\n {newsItem.title}\r\n \r\n {ReactHtmlParser(newsItem.message)}\r\n \r\n \r\n
\r\n Posted on: \r\n
\r\n
\r\n )\r\n }\r\n
\r\n
\r\n :null\r\n );\r\n}\r\n\r\nexport default NewsDetail\r\n","import React, { useEffect } from 'react';\r\nimport { Route } from \"react-router-dom\";\r\nimport MapControl from '../../MapControl/MapControl';\r\nimport NewsList from './NewsList';\r\nimport NewsDetail from './NewsDetail';\r\n\r\nconst News = () => {\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 News;\r\n","import React from 'react';\r\n\r\n////// Call Map\r\nimport MapControl from '../../MapControl/MapControl';\r\n\r\n////// Material UI support Files\r\nimport { Fab, Icon, Dialog, Slide } from '@material-ui/core';\r\n\r\n////// Styling Things\r\nimport menuStyling from './../../Mobile/CSS/MenuStyles.module.css';\r\n\r\n// Modal Window\r\n// const Transition = React.forwardRef(function Transition(props, ref) {\r\n// return ;\r\n// });\r\n\r\nconst FloatingMenuButton = () => {\r\n // Modal Window\r\n // const [open, setOpen] = React.useState(false);\r\n\r\n // const openMap = () => {\r\n // setOpen(true);\r\n // };\r\n\r\n // const closeMap = () => {\r\n // setOpen(false);\r\n // };\r\n\r\n const SwitchToMobile = () => {\r\n //setOpen(false);\r\n localStorage.setItem('isMobile', 'mobile');\r\n window.location.reload(true);\r\n };\r\n\r\n if (window.screen.width < 700 && window.screen.height < 1000 || window.screen.width < 1000 && window.screen.height < 700)\r\n {\r\n return (\r\n
\r\n {/*
\r\n \r\n
\r\n \r\n close\r\n \r\n
\r\n \r\n
\r\n
*/}\r\n\r\n
\r\n \r\n smartphone\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n else \r\n {\r\n return null\r\n }\r\n}\r\n\r\nexport default FloatingMenuButton","import React from 'react'\r\nimport NavBar from './NavBar/NavBar';\r\nimport Home from './Home/Home';\r\nimport { Switch, Route, Redirect, useLocation } from \"react-router-dom\";\r\nimport './../../Styles/Desktop.scss';\r\nimport Sales from './Sales/Sales';\r\nimport Fleet from './Fleet/Fleet';\r\nimport Folios from './Folios/Folios';\r\nimport Account from './Account/Account';\r\nimport News from './News/News';\r\nimport FloatingMenuButton from './NavBar/FloatingMenuButton'\r\nimport Routes from './Routes/Routes';\r\n\r\nconst Desktop = () => {\r\n\r\n const location = useLocation();\r\n const cPage = location.pathname.split(\"/\");\r\n\r\n // Since news items return numbers, we don't want to display numbers in breadcrumbs so we will simply display nothing.\r\n if(cPage[1] == \"news\") // If this spelling changes we are done! :D\r\n {\r\n cPage[2] = null;\r\n }\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {/* Floating button for switching to Mobile */}\r\n \r\n {\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n\r\n {/* Profile */}\r\n {/* */}\r\n \r\n \r\n }\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Desktop\r\n","import React, {useState} from 'react'\r\nimport { Switch, Route, Redirect } from \"react-router-dom\";\r\n\r\n// Material UI support files\r\nimport { CssBaseline, makeStyles, Button, TextField, Link, Grid, Container, InputAdornment, Typography, Paper } from \"@material-ui/core\";\r\n\r\n// Global Support Imports\r\nimport { useUserStore } from \"../../../Global/Stores/userStore\";\r\nimport http from '../../../Global/Services/httpService';\r\n\r\n// Images\r\nimport CT_Logo from \"./../../../../src/Images/CT-logo-transparant.png\";\r\n// theme.palette.secondary.main\r\n\r\n////// CSS\r\nimport loginStyles from '../CSS/LoginStyles.module.css'\r\n\r\n/*\r\nEmmanuel Eshun-Davies, January 23, 2020\r\n\r\nTODO:\r\n*/\r\n\r\n\r\n// Unneccessary required styling \r\n// const useStyles = makeStyles(theme => ({\r\n// forms: {\r\n// marginTop: theme.spacing(0),\r\n// display: 'flex',\r\n// flexDirection: 'column',\r\n// alignItems: 'center',\r\n// fontSize: 10,\r\n// width: '100%',\r\n// },\r\n// logoCenter: {\r\n// marginTop: theme.spacing(8),\r\n// display: 'flex',\r\n// flexDirection: 'column',\r\n// alignItems: 'center',\r\n// },\r\n// leftText: {\r\n// marginTop: theme.spacing(5),\r\n// display: 'flex',\r\n// flexDirection: 'column',\r\n// alignItems: 'left',\r\n// color: '#777',\r\n// },\r\n// bottomLinks: {\r\n// marginTop: theme.spacing(0),\r\n// display: 'flex',\r\n// flexDirection: 'column',\r\n// alignItems: 'center',\r\n// color: '#777',\r\n// },\r\n// form: {\r\n// width: '100%', // Fix IE 11 issue.\r\n// marginTop: theme.spacing(0),\r\n// },\r\n// submit: {\r\n// margin: theme.spacing(3, 0, 2),\r\n// backgroundColor: '#1e89c6',\r\n// color: '#fff',\r\n// fontWeight: '100',\r\n// },\r\n// }));\r\n\r\n\r\nconst ForgotPassword = () => {\r\n const [, actions] = useUserStore();\r\n \r\n // const loginStyles = useStyles();\r\n\r\n // Form Control\r\n const [formState, setFormState] = useState({\r\n email: '',\r\n loading: false,\r\n });\r\n\r\n const handleChange = event => {\r\n const target = event.target;\r\n if (!formState.loading)\r\n setFormState(() => ({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) }));\r\n };\r\n\r\n\r\n const handleForgotPassword = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n // console.log(formState.email);\r\n if(formState.email === \"\"){\r\n setFormState({ ...formState, loading: false });\r\n // We will just do nothing. They will eventually notice and have to enter an email. :D\r\n } else {\r\n const postData = {\r\n email: formState.email,\r\n };\r\n // const email = formState.mail;\r\n\r\n http.post('/api/account/users/resetpassword', postData)\r\n .then(result => {\r\n // actions.login(result.data);\r\n // history.push(\"/account/users\");\r\n window.location.href = \"/home\";\r\n })\r\n .catch(() => {\r\n // setCreating(() => false);\r\n setFormState({ ...formState, loading: false });\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
\r\n
\r\n \r\n \r\n Password Reset
\r\n 1. Enter your email
\r\n 2. click \"Reset Password\"
\r\n 3. An email will be sent to you
\r\n 4. Follow Instructions in email to reset password
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n  ),}}\r\n />\r\n \r\n Get Password\r\n \r\n \r\n \r\n \r\n Return to Login\r\n \r\n {/*   |   \r\n \r\n Need Help?\r\n */}\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport default ForgotPassword","import React, {useState} from 'react'\r\nimport queryString from 'query-string';\r\nimport _ from 'lodash';\r\n\r\n// Material UI support files\r\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\r\nimport { CssBaseline, Button, TextField, Grid, Container, IconButton, InputAdornment, Typography, Paper } from \"@material-ui/core\";\r\n\r\n// Global Support Imports\r\nimport http from '../../../Global/Services/httpService';\r\n\r\n// Images\r\nimport CT_Logo from \"./../../../../src/Images/CT-logo-transparant.png\";\r\n\r\n/* Custom CSS Files */\r\nimport loginStyles from '../CSS/LoginStyles.module.css'\r\n// theme.palette.secondary.main\r\n\r\n/*\r\nEmmanuel Eshun-Davies, January 23, 2020\r\n\r\nTODO:\r\n*/\r\n\r\n\r\nconst ResetPassword = ({ match, location, history, Title }) => {\r\n\r\n // const loginStyles = useStyles();\r\n\r\n const [formState, setFormState] = useState({\r\n password: '',\r\n password2: '',\r\n remember: false,\r\n showPassword: false,\r\n loading: false,\r\n });\r\n\r\n const query = queryString.parse(location.search, {});\r\n\r\n // const midsVal = query.mids || ''\r\n\r\n // console.log('access_token', query.access_token, !query.access_token);\r\n // console.log('mids', query);\r\n\r\n if (!query.access_token) {\r\n history.replace('/login');\r\n }\r\n\r\n const token = query.access_token;\r\n\r\n // console.log('token', token);\r\n\r\n const handleChange = event => {\r\n const target = event.target;\r\n if (!formState.loading)\r\n setFormState({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) });\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n if (!formState.loading)\r\n setFormState({ ...formState, showPassword: !formState.showPassword });\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n\r\n const postData = {\r\n Password: formState.password,\r\n Password2: formState.password2,\r\n mids: query.mids,\r\n };\r\n\r\n http.post('/api/account/setpassword', postData, {\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n }\r\n })\r\n .then(result => {\r\n // actions.login(result.data);\r\n const typeID = _.get(result.data, 'toast.typeID');\r\n if (typeID === 0)\r\n history.replace('/login');\r\n\r\n // console.log('typeID', typeID);\r\n // console.log('result.data', result.data);\r\n })\r\n .catch((error) => {\r\n // console.log('login error', error)\r\n // notificationActions.showNotification({variant: 'error', message: 'Invalid Credentials'});\r\n setFormState({\r\n ...formState,\r\n password: '',\r\n password2: '',\r\n loading: false\r\n });\r\n });\r\n };\r\n\r\n\r\n const validPassword = formState.password.length > 5 && formState.password === formState.password2;\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 Set New Password
\r\n 1. Enter your new password (must be at least 6 characters)
\r\n 2. Enter Your new password again
\r\n 3. Tap Reset Password
\r\n 4. Your new Password is set
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n\r\n\r\n RESET PASSWORD\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport default ResetPassword","import React, {useState} from 'react'\r\nimport { Route } from \"react-router-dom\";\r\n\r\n// Material UI support files\r\nimport { Visibility, VisibilityOff } from '@material-ui/icons';\r\nimport { CssBaseline, makeStyles, Button, TextField, FormControlLabel, Checkbox, Link, Grid, Container, IconButton, InputAdornment, Typography } from \"@material-ui/core\";\r\n\r\n// Support Files\r\nimport HelpPage from '../Help';\r\nimport ResetPassword from './ResetPassword';\r\nimport ForgotPassword from './ForgotPassword';\r\n\r\n// Global Support Imports\r\nimport { useUserStore } from \"../../../Global/Stores/userStore\";\r\nimport http from '../../../Global/Services/httpService';\r\n\r\n// Images\r\nimport CT_Logo from \"./../../../../src/Images/CT-logo-transparant.png\";\r\n\r\n////// CSS\r\nimport loginStyles from '../CSS/LoginStyles.module.css'\r\n\r\n/*\r\nEmmanuel Eshun-Davies, January 23, 2020\r\n\r\nTODO:\r\n*/\r\n\r\nconst Login = () => {\r\n const [, actions] = useUserStore();\r\n\r\n // Form Control\r\n const [formState, setFormState] = useState({\r\n email: '',\r\n password: '',\r\n remember: false,\r\n showPassword: false,\r\n loading: false,\r\n });\r\n\r\n // Password Visibility control\r\n const handleChange = event => {\r\n const target = event.target;\r\n if (!formState.loading)\r\n setFormState(() => ({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) }));\r\n };\r\n\r\n const clickShowPassword = () => {\r\n if (!formState.loading)\r\n setFormState({ ...formState, showPassword: !formState.showPassword });\r\n };\r\n\r\n // Handle onSubmit actions \r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n\r\n const postData = {\r\n Username: formState.email,\r\n Password: formState.password,\r\n Remember: formState.remember\r\n };\r\n\r\n if(formState.email === \"\" || formState.password === \"\"){\r\n setFormState({ ...formState, loading: false });\r\n // We will do nothing! They will eventually get the idea. :/\r\n } else { \r\n http.post('/api/auth', postData)\r\n .then(result => {\r\n\r\n const userData = { ...result.data, remember: formState.remember }\r\n actions.login(userData);\r\n })\r\n .catch((error) => {\r\n setFormState({\r\n ...formState,\r\n password: '',\r\n loading: false\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
\r\n
\r\n \r\n Please sign in to access shipmanager\r\n \r\n
\r\n
\r\n
\r\n  ),}}\r\n />\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n \r\n }\r\n label=\"Remember me\"\r\n />\r\n \r\n Sign In\r\n \r\n \r\n \r\n \r\n Forgot your password?\r\n \r\n {/*   |   \r\n \r\n Need Help?\r\n */}\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nconst LoadPage = () => {\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\nexport default LoadPage","import React, { useState } from \"react\";\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\nimport AccountCircle from '@material-ui/icons/MailOutline';\r\nimport { useUserStore } from \"../../Global/Stores/userStore\";\r\nimport http from '../../Global/Services/httpService';\r\nimport { Avatar, Button, TextField, FormControlLabel, Checkbox, Link, Grid, Box, Container, IconButton, InputAdornment, Typography } from \"@material-ui/core\";\r\n// import { useNotificationStore } from \"../../Global/Stores/notificationStore\";\r\nimport BackgroundHeader from \"./../../Images/bg_shipmanager.jpg\";\r\nimport CT_Logo from \"./../../Images/CT-logo-transparant.png\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n height: '100%',\r\n width: '100%',\r\n '& fieldset': {\r\n borderColor: '#dfe4ed !important',\r\n borderWidth: '5px',\r\n }\r\n },\r\n top: {\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: '45%',\r\n backgroundImage: `url(${BackgroundHeader})`,\r\n backgroundPosition: 'center',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n },\r\n bottom: {\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: '55%',\r\n },\r\n logoContainer: {\r\n height: '100%',\r\n width: '100%',\r\n \r\n },\r\n \r\n logoText: {\r\n // flexGrow: 1,\r\n textTransform: 'uppercase',\r\n backgroundImage: `url(${CT_Logo})`,\r\n backgroundPosition: 'left',\r\n backgroundRepeat: 'no-repeat',\r\n // fontvariant: 'small-caps',\r\n fontSize: '300%',\r\n letterSpacing: '12px',\r\n color: '#e3e3e3',\r\n padding: '30px 20px 30px 120px',\r\n backgroundColor: 'rgba(255, 225, 255, 0.3)'\r\n },\r\n loginContainer: {\r\n marginTop: '2rem',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n color: '#C0C0C0',\r\n },\r\n loginText: {\r\n // textTransform: 'uppercase',\r\n fontVariant: 'small-caps',\r\n // letterSpacing: '10px',\r\n color: '#4d4d4d',\r\n },\r\n forgotPassword: {\r\n color: '#C0C0C0',\r\n textDecoration: 'underline',\r\n display: 'block',\r\n padding: '5px 0px',\r\n textAlign: 'right',\r\n '&:hover': {\r\n color: '#026b94',\r\n }\r\n },\r\n}));\r\n\r\nconst Login = () => {\r\n const [, actions] = useUserStore();\r\n\r\n const classes = useStyles();\r\n const [formState, setFormState] = useState({\r\n email: '',\r\n password: '',\r\n remember: false,\r\n showPassword: false,\r\n loading: false,\r\n });\r\n\r\n\r\n const handleChange = event => {\r\n\r\n const target = event.target;\r\n // console.log('event', target);\r\n\r\n if (!formState.loading)\r\n setFormState(() => ({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) }));\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n if (!formState.loading)\r\n setFormState({ ...formState, showPassword: !formState.showPassword });\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n\r\n const postData = {\r\n Username: formState.email,\r\n Password: formState.password,\r\n Remember: formState.remember\r\n };\r\n\r\n if(formState.email === \"\" || formState.password === \"\"){\r\n setFormState({ ...formState, loading: false });\r\n // We will do nothing! They will eventually get the idea. :/\r\n } else { \r\n http.post('/api/auth', postData)\r\n .then(result => {\r\n\r\n const userData = { ...result.data, remember: formState.remember }\r\n actions.login(userData);\r\n })\r\n .catch((error) => {\r\n setFormState({\r\n ...formState,\r\n password: '',\r\n loading: false\r\n });\r\n });\r\n }\r\n };\r\n\r\n\r\n const handleForgotPassword = (e) => {\r\n e.preventDefault();\r\n // console.log(formState.email);\r\n\r\n const postData = {\r\n email: formState.email,\r\n };\r\n // const email = formState.mail;\r\n\r\n http.post('/api/account/users/resetpassword', postData)\r\n .then(result => {\r\n // actions.login(result.data);\r\n // history.push(\"/account/users\");\r\n })\r\n .catch(() => {\r\n // setCreating(() => false);\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 \r\n ship manager\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n please sign in to access ship manager\r\n\r\n\r\n
\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n \r\n }\r\n label=\"REMEMBER ME?\"\r\n />\r\n sign in\r\n\r\n \r\n \r\n Forgot your password?\r\n {/* Forgot your password? */}\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n © Chart Track {new Date().getFullYear()}\r\n \r\n \r\n \r\n
\r\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 Login;\r\n","import React, { useState } from 'react'\r\nimport { Container, Typography, TextField, InputAdornment, IconButton, Button, Box, Grid, Link } from '@material-ui/core';\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\nimport AccountCircle from '@material-ui/icons/MailOutline';\r\nimport queryString from 'query-string';\r\nimport http from '../../Global/Services/httpService';\r\nimport CT_Logo from \"./../../Images/CT_TEXT.png\";\r\nimport _ from 'lodash';\r\n\r\nconst ResetPassword = ({ match, location, history, Title }) => {\r\n\r\n const [formState, setFormState] = useState({\r\n password: '',\r\n password2: '',\r\n remember: false,\r\n showPassword: false,\r\n loading: false,\r\n });\r\n\r\n const query = queryString.parse(location.search, {});\r\n\r\n // const midsVal = query.mids || ''\r\n\r\n // console.log('access_token', query.access_token, !query.access_token);\r\n // console.log('mids', query);\r\n\r\n if (!query.access_token) {\r\n history.replace('/login');\r\n }\r\n\r\n const token = query.access_token;\r\n\r\n // console.log('token', token);\r\n\r\n const handleChange = event => {\r\n const target = event.target;\r\n if (!formState.loading)\r\n setFormState({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) });\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n if (!formState.loading)\r\n setFormState({ ...formState, showPassword: !formState.showPassword });\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n\r\n const postData = {\r\n Password: formState.password,\r\n Password2: formState.password2,\r\n mids: query.mids,\r\n };\r\n\r\n http.post('/api/account/setpassword', postData, {\r\n headers: {\r\n 'Authorization': `Bearer ${token}`,\r\n }\r\n })\r\n .then(result => {\r\n // actions.login(result.data);\r\n const typeID = _.get(result.data, 'toast.typeID');\r\n if (typeID === 0)\r\n history.replace('/login');\r\n\r\n // console.log('typeID', typeID);\r\n // console.log('result.data', result.data);\r\n })\r\n .catch((error) => {\r\n // console.log('login error', error)\r\n // notificationActions.showNotification({variant: 'error', message: 'Invalid Credentials'});\r\n setFormState({\r\n ...formState,\r\n password: '',\r\n password2: '',\r\n loading: false\r\n });\r\n });\r\n };\r\n\r\n\r\n const validPassword = formState.password.length > 5 && formState.password === formState.password2;\r\n\r\n return (\r\n \r\n\r\n {/* \r\n \r\n \r\n \r\n */}\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {Title}\r\n
\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n\r\n \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n />\r\n\r\n\r\n RESET PASSWORD\r\n \r\n \r\n \r\n \r\n © Chart Track {new Date().getFullYear()}\r\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 ResetPassword\r\n","import React from 'react'\r\nimport ResetPassword from './ResetPassword';\r\n\r\nconst NewUserPassword = (props) => {\r\n return ()\r\n}\r\n\r\nexport default NewUserPassword\r\n","import React from 'react'\r\nimport ResetPassword from './ResetPassword';\r\n\r\nconst ForgotPassword = (props) => {\r\n return ()\r\n}\r\n\r\nexport default ForgotPassword\r\n","import React, { useState } from \"react\";\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\nimport AccountCircle from '@material-ui/icons/MailOutline';\r\nimport { useUserStore } from \"../../Global/Stores/userStore\";\r\nimport http from '../../Global/Services/httpService';\r\nimport { Avatar, Button, TextField, FormControlLabel, Checkbox, Link, Grid, Box, Container, IconButton, InputAdornment, Typography } from \"@material-ui/core\";\r\n// import { useNotificationStore } from \"../../Global/Stores/notificationStore\";\r\nimport BackgroundHeader from \"./../../Images/bg_shipmanager.jpg\";\r\nimport CT_Logo from \"./../../Images/CT-logo-transparant.png\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n height: '100%',\r\n width: '100%',\r\n '& fieldset': {\r\n borderColor: '#dfe4ed !important',\r\n borderWidth: '5px',\r\n }\r\n },\r\n top: {\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: '45%',\r\n backgroundImage: `url(${BackgroundHeader})`,\r\n backgroundPosition: 'center',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n },\r\n bottom: {\r\n flexGrow: 1,\r\n flexShrink: 0,\r\n flexBasis: '55%',\r\n },\r\n logoContainer: {\r\n height: '100%',\r\n width: '100%',\r\n },\r\n logoText: {\r\n // flexGrow: 1,\r\n textTransform: 'uppercase',\r\n backgroundImage: `url(${CT_Logo})`,\r\n backgroundPosition: 'left',\r\n backgroundRepeat: 'no-repeat',\r\n // fontvariant: 'small-caps',\r\n fontSize: '5em',\r\n letterSpacing: '10px',\r\n color: '#e3e3e3',\r\n padding: '10px 20px 20px 120px',\r\n backgroundColor: 'rgba(255, 225, 255, 0.3)'\r\n },\r\n loginContainer: {\r\n marginTop: '2rem',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n color: '#C0C0C0',\r\n },\r\n loginText: {\r\n // textTransform: 'uppercase',\r\n fontVariant: 'small-caps',\r\n // letterSpacing: '10px',\r\n color: '#4d4d4d',\r\n },\r\n forgotPassword: {\r\n color: '#C0C0C0',\r\n textDecoration: 'underline',\r\n display: 'block',\r\n padding: '5px 0px',\r\n textAlign: 'right',\r\n '&:hover': {\r\n color: '#026b94',\r\n }\r\n },\r\n}));\r\n\r\nconst Login = () => {\r\n const [, actions] = useUserStore();\r\n\r\n const classes = useStyles();\r\n const [formState, setFormState] = useState({\r\n email: '',\r\n password: '',\r\n remember: false,\r\n showPassword: false,\r\n loading: false,\r\n });\r\n\r\n\r\n const handleChange = event => {\r\n\r\n const target = event.target;\r\n // console.log('event', target);\r\n\r\n if (!formState.loading)\r\n setFormState(() => ({ ...formState, [target.name]: (target.type === 'checkbox' ? target.checked : target.value) }));\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n if (!formState.loading)\r\n setFormState({ ...formState, showPassword: !formState.showPassword });\r\n };\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n\r\n const postData = {\r\n Username: formState.email,\r\n Password: formState.password,\r\n Remember: formState.remember\r\n };\r\n\r\n http.post('/api/auth', postData)\r\n .then(result => {\r\n\r\n const userData = { ...result.data, remember: formState.remember }\r\n actions.login(userData);\r\n })\r\n .catch((error) => {\r\n setFormState({\r\n ...formState,\r\n password: '',\r\n loading: false\r\n });\r\n });\r\n };\r\n\r\n\r\n const handleForgotPassword = (e) => {\r\n e.preventDefault();\r\n setFormState({ ...formState, loading: true });\r\n // console.log(formState.email);\r\n if(formState.email === \"\"){\r\n setFormState({ ...formState, loading: false });\r\n // We will just do nothing. They will eventually notice and have to enter an email. :D\r\n } else {\r\n const postData = {\r\n email: formState.email,\r\n };\r\n // const email = formState.mail;\r\n\r\n http.post('/api/account/users/resetpassword', postData)\r\n .then(result => {\r\n // actions.login(result.data);\r\n // history.push(\"/account/users\");\r\n window.location.href = \"/home\";\r\n })\r\n .catch(() => {\r\n // setCreating(() => false);\r\n setFormState({ ...formState, loading: false });\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 \r\n ship manager\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n enter your email address to reset passwword\r\n\r\n\r\n
\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n {/* \r\n \r\n {formState.showPassword ? : }\r\n \r\n \r\n ),\r\n }}\r\n /> */}\r\n {/* \r\n }\r\n label=\"REMEMBER ME?\"\r\n /> */}\r\n Get Password\r\n\r\n \r\n \r\n Return to Login\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n © Chart Track {new Date().getFullYear()}\r\n \r\n \r\n \r\n
\r\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 Login;\r\n","import React from 'react';\r\nimport ResetPassword from './ResetPassword';\r\n\r\nconst UserInvitation = (props) => {\r\n return ()\r\n}\r\n\r\nexport default UserInvitation\r\n","import React, {useState, useMemo, useEffect} from 'react';\r\nimport { Switch, Route, Redirect } from \"react-router-dom\";\r\n\r\n//If Logged in\r\nimport Mobile from './Mobile/Mobile';\r\nimport Desktop from './Desktop/Desktop';\r\n\r\n// If not logged in\r\nimport MobileLogin from './Mobile/AccountManagement/Mobile.Login';\r\nimport ForgotPassword from './Mobile/AccountManagement/ForgotPassword';\r\nimport ResetPassword from './Mobile/AccountManagement/ResetPassword';\r\nimport HelpPage from './Mobile/Help/HelpStatement'\r\n\r\nimport DesktopLogin from './Authentication/Login';\r\nimport DesktopNewUserPassword from './Authentication/NewUserPassword';\r\nimport DesktopForgotPassword from './Authentication/ForgotPassword';\r\nimport DesktopResetPassword from './Authentication/PasswordReset';\r\nimport UserInvitation from './Authentication/UserInvitation';\r\nimport MobileConfiguration from '../Global/Data/Config';\r\n\r\n\r\n// NOTE: The check for if user is logged in or not is decided per the value of props.authed sent in by call.\r\n// The check is not an actual authentication of credentials check \r\n// any error will allow people access without loggin in although without proper data.\r\nconst CheckScreen = ({authed}) => {\r\n //console.log(\"First Entry is: \", localStorage.getItem('isMobile'));\r\n //localStorage.clear()\r\n if(localStorage.getItem('isMobile') === null || localStorage.getItem('isMobile') === '' || localStorage.getItem('isMobile') === 'null')\r\n {\r\n let isMobile;\r\n (window.screen.width > 700 && window.screen.height > 1000 || window.screen.width > 1000 && window.screen.height > 700)? isMobile = \"desktop\": isMobile = \"mobile\";\r\n localStorage.setItem('isMobile', isMobile);\r\n }\r\n \r\n\r\n let MobileORDesktop = localStorage.getItem('isMobile');\r\n\r\n //console.log(\"MOBILE OR DESKTOP? \", MobileORDesktop);\r\n \r\n \r\n //return useMemo(() => {\r\n //console.log(\"should reload right now\");\r\n if( authed )\r\n { // For if user is logged in\r\n\r\n if( MobileORDesktop === \"desktop\" ){\r\n return( ); // For Desktop View\r\n } else {\r\n return ( ); // For Mobile View\r\n }\r\n }\r\n else\r\n { // For if user is not logged in\r\n if( MobileORDesktop === \"desktop\" ){\r\n return( // For Desktop view\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n );\r\n }\r\n else \r\n { // For Mobile View \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 //}, [window.screen.width, window.screen.height, MobileORDesktop, authed])\r\n}\r\n\r\n// const ShowView = () => {\r\n\r\n// const [isMobile, setIsMobile] = useState(true);\r\n\r\n// const switchView = () => {\r\n// setIsMobile(!isMobile)\r\n// }\r\n\r\n// return(\r\n// \r\n//

Click Me to switch view :)

\r\n// \r\n//
\r\n// )\r\n// }\r\n\r\nexport default CheckScreen;\r\n","import React, { useEffect } from 'react';\r\nimport { useSaleStore } from '../Global/Stores/saleStore';\r\nimport { useGlobalStore } from '../Global/Stores/globalStore';\r\nimport { useFleetStore } from '../Global/Stores/fleetStore';\r\nimport { useBasketStore } from '../Global/Stores/basketStore';\r\nimport { useMapStore } from '../Global/Stores/mapStore';\r\n// import { useUserStore } from '../Global/Stores/userStore';\r\nimport useAppSession from '../Global/Hooks/useAppSession';\r\nimport { useCatalogueStore } from '../Global/Stores/catalogueStore';\r\nimport { useAvcsoStore } from '../Global/Stores/avcsoStore';\r\nimport { useNotificationStore } from '../Global/Stores/notificationStore';\r\n\r\n//CheckScreen Component Loader\r\nimport CheckScreen from './CheckScreen';\r\n\r\nconst AppAuthenticated = (props) => {\r\n const [, globalActions] = useGlobalStore();\r\n const [, saleActions] = useSaleStore();\r\n const [, fleetActions] = useFleetStore();\r\n const [, basketActions] = useBasketStore();\r\n const [, mapActions] = useMapStore();\r\n const [, catalogueActions] = useCatalogueStore();\r\n const [, avcsoActions] = useAvcsoStore();\r\n const [, notificationActions] = useNotificationStore();\r\n // const [, userActions] = useUserStore();\r\n\r\n // Load/Clear initial data\r\n\r\n // Mobile / Tablet / Desktop\r\n\r\n // const onUnload = (event) => { // the method that will be used for both add and remove event\r\n // event.preventDefault();\r\n // const e = event;\r\n\r\n\r\n // console.log(\"AppAuthenticated\", props)\r\n // event.returnValue = true;\r\n // }\r\n\r\n useAppSession();\r\n\r\n\r\n useEffect(() => {\r\n\r\n // console.log('AppAuthenticated', true);\r\n //window.addEventListener(\"beforeunload\", onUnload);\r\n\r\n globalActions.loadData();\r\n saleActions.loadData();\r\n fleetActions.loadData();\r\n basketActions.loadData();\r\n mapActions.loadData();\r\n \r\n notificationActions.clearData();\r\n\r\n return () => {\r\n\r\n\r\n globalActions.clearData();\r\n saleActions.clearData();\r\n fleetActions.clearData();\r\n basketActions.clearData();\r\n mapActions.clearData();\r\n catalogueActions.clearData();\r\n avcsoActions.clearData();\r\n notificationActions.clearData();\r\n // userActions.logout(false);\r\n \r\n\r\n //window.removeEventListener(\"beforeunload\", onUnload);\r\n // console.log('AppAuthenticated', false);\r\n };\r\n }, []);\r\n\r\n return ();\r\n};\r\n\r\nexport default AppAuthenticated;\r\n","import React from 'react';\r\nimport ReactGA from 'react-ga';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst Analytics = ({ history }) => {\r\n history.listen(location => ReactGA.pageview(location.pathname));\r\n return ();\r\n};\r\n\r\nexport default withRouter(Analytics);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport green from '@material-ui/core/colors/green';\r\nimport amber from '@material-ui/core/colors/amber';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst useStyles1 = makeStyles(theme => ({\r\n success: {\r\n backgroundColor: green[600],\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.primary.dark,\r\n },\r\n warning: {\r\n backgroundColor: amber[700],\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(1),\r\n },\r\n message: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n}));\r\n\r\nfunction CustomSnackbarContentWrapper(props) {\r\n const classes = useStyles1();\r\n const { className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n const messageLines = message.split('|');\r\n\r\n return (\r\n \r\n \r\n {/* {message} */}\r\n \r\n {\r\n messageLines.map((M) => (
{M}
))\r\n }\r\n
\r\n\r\n\r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\n\r\nCustomSnackbarContentWrapper.propTypes = {\r\n className: PropTypes.string,\r\n message: PropTypes.node,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf(['success', 'warning', 'error', 'info']).isRequired,\r\n};\r\n\r\nexport default CustomSnackbarContentWrapper;","import React, { useEffect } from 'react';\r\nimport { useNotificationStore } from '../../Global/Stores/notificationStore';\r\nimport { Snackbar } from '@material-ui/core';\r\nimport CustomSnackbarContentWrapper from './CustomSnackbarContentWrapper';\r\nimport axios from './../../Global/Services/httpService';\r\nimport storage from 'store';\r\nimport _ from 'lodash';\r\n\r\nconst Notifications = () => {\r\n const [notificationState, notificationActions] = useNotificationStore();\r\n // console.log('AppNotification', notificationState);\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n axios.instance.interceptors.response.use(val => {\r\n\r\n const toast = _.get(val, 'data.toast', null);\r\n if (!!toast) {\r\n\r\n const { type, message } = toast;\r\n const variant = type.toLowerCase();\r\n notificationActions.showNotification({ variant: variant, message: message });\r\n }\r\n\r\n return Promise.resolve(val);\r\n\r\n }, error => {\r\n\r\n // console.log('interceptors message', error.response);\r\n\r\n // const resp = error.response;\r\n // console.log('interceptors response', resp);\r\n\r\n if (error.response && error.response.status === 401) {\r\n notificationActions.showNotification({ variant: 'error', message: 'Unauthorized' });\r\n }\r\n else if (error.response && error.response.status !== 401) {\r\n\r\n const toast = _.get(error.response, 'data.toast', null);\r\n // console.log('toast', toast);\r\n if (!!toast) {\r\n const { type, message } = toast;\r\n const variant = type.toLowerCase();\r\n notificationActions.showNotification({ variant: variant, message: message });\r\n }\r\n else {\r\n notificationActions.showNotification({ variant: 'error', message: error.message || 'Unable to perform the operation' });\r\n }\r\n }\r\n else if (!error.response) {\r\n notificationActions.showNotification({ variant: 'error', message: error.message || 'Could not access the remote server' });\r\n }\r\n\r\n return Promise.reject(error);\r\n });\r\n\r\n }, []);\r\n\r\n function handleClose(event, reason) {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n\r\n notificationActions.closeNotification();\r\n // setOpen(false);\r\n }\r\n\r\n if (notificationState.notifications && notificationState.notifications.length === 0) {\r\n // console.log('NULL')\r\n return null;\r\n }\r\n\r\n\r\n return (\r\n
\r\n {/* */}\r\n 0}\r\n autoHideDuration={notificationState.autoHideDuration}\r\n onClose={handleClose}\r\n >\r\n \r\n \r\n {/* {notificationState.open && } */}\r\n
\r\n );\r\n};\r\n\r\nexport default Notifications;\r\n","import React, { useMemo } from 'react';\r\nimport withRoot from './Global/MUI/withRoot';\r\nimport { Switch, Route, Redirect } from \"react-router-dom\";\r\nimport { useUserStore } from './Global/Stores/userStore';\r\n// import Login from './Components/Authentication/Login';\r\nimport AppAuthenticated from './Components/AppAuthenticated';\r\nimport Analytics from './Components/Helper/Analytics';\r\nimport Notifications from './Components/Helper/Notifications';\r\n// import NewUserPassword from './Components/Authentication/NewUserPassword';\r\n// import ForgotPassword from './Components/Authentication/ForgotPassword';\r\n// import UserInvitation from './Components/Authentication/UserInvitation';\r\n// import '../node_modules/leaflet-ais-tracksymbol/src/'\r\n\r\n// Load Checkscreen to determine which device/view version to load\r\nimport CheckScreen from \"./Components/CheckScreen\";\r\n\r\n/* \r\nNote: Inside the CheckScreen Component contains the condition to switch between mobile and desktop views through out the application\r\n\r\nTODO: In Checkscreen, allow option to switch to desktop view during browse.\r\n*/\r\nfunction App(props) {\r\n const [, userActions] = useUserStore();\r\n const isAuthenticated = userActions.isAuthenticated();\r\n\r\n return useMemo(() => {\r\n\r\n const content = isAuthenticated ? : (\r\n \r\n \r\n {/* IMPORTANT: In this componenet holds the condition to switch to mobile or desktop view. Please make view changes within the CheckScreen Component. */}\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {content}\r\n \r\n );\r\n\r\n }, [isAuthenticated]);\r\n}\r\n\r\nexport default withRoot(App);\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter as Router } from \"react-router-dom\";\r\nimport App from './App';\r\nimport ReactGA from 'react-ga';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { UserProvider } from './Global/Stores/userStore';\r\nimport './index.scss';\r\nimport { SaleProvider } from './Global/Stores/saleStore';\r\nimport { NotificationProvider } from './Global/Stores/notificationStore';\r\nimport { MapProvider } from './Global/Stores/mapStore';\r\nimport { FleetProvider } from './Global/Stores/fleetStore';\r\nimport { FolioProvider } from './Global/Stores/folioStore';\r\nimport { GlobalProvider } from './Global/Stores/globalStore';\r\nimport { BasketProvider } from './Global/Stores/basketStore';\r\nimport { ColumnProvider } from './Global/Stores/columnStore';\r\nimport { CatalogueProvider } from './Global/Stores/catalogueStore';\r\nimport { AvcsoProvider } from './Global/Stores/avcsoStore';\r\n\r\nReactGA.initialize('UA-141005571-1');\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"topNav\":\"MenuStyles_topNav__3AD3q\",\"tnUserName\":\"MenuStyles_tnUserName__1OKwq\",\"tnVesselName\":\"MenuStyles_tnVesselName__2Wvyl\",\"whiteIcons\":\"MenuStyles_whiteIcons__2Le9h\",\"breadcrumbs\":\"MenuStyles_breadcrumbs__3ndKq\",\"bottomNav\":\"MenuStyles_bottomNav__3zDYb\",\"bottomNavStyle\":\"MenuStyles_bottomNavStyle__20S-2\",\"floatRight\":\"MenuStyles_floatRight__18-vM\",\"floatRightDesktop\":\"MenuStyles_floatRightDesktop__1pnxD\",\"floatRightClose\":\"MenuStyles_floatRightClose__2tHuf\",\"mainDialog\":\"MenuStyles_mainDialog__3BFYP\",\"menuCategory\":\"MenuStyles_menuCategory__3Nk03\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"forms\":\"LoginStyles_forms__26PDX\",\"logoCenter\":\"LoginStyles_logoCenter__3lsFW\",\"leftText\":\"LoginStyles_leftText__15oze\",\"bottomLinks\":\"LoginStyles_bottomLinks__2MsiS\",\"form\":\"LoginStyles_form__2CrZC\",\"submit\":\"LoginStyles_submit__3Ir5p\"};","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAABkCAYAAABKHuhiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA2vSURBVHic7Z1tdFXVmcd/z7lJSEAJsTI1SkWnw0uJ0k47YPtBASt1nFXbWe0UWyA3STG5QaZJSEtdq4peq844RfMmktwEzBswnYw46qzWxctS15ppoYjjOG0AxyLiS3CsIwkRktyX88yHSFcmKyHnJuctcH+fspJ9nuef5H/32WfvZ+8DKVKkSJEiRYoUKVKMgngtwAuq65uvCRgyN4ExR2AuMBd0JjAdmAZMBWYAvcDHAr06+HU3qu+AHMXQI6YRODxr+pTjK1asSHj329jDRWGEuobtCxISXyLIEmAJcIWN4QcQDomyFzH2nuqadTAcXha3Mb4rXLBGqIo0X29grARWAle7lVeQHsV8UYWnZqTrrqKion63ck+EC8oI1c3NMyRqFAuSr+j1XusBTgE7VMxt60uK/tNrMefjgjBCVX3rVSJUiBACLvVazygcEuWhslDwORFRr8UMZ1IboTrSniuSeBCVfCDDaz3WkJcRNlaUBHd7rWQok9II4Y6OjJxTZysUuRf/9gDnRVT/LYFRWVkaPOS1FpiERqiLtHxNkcd18LFvshMXlU0S7X6grKxswEshk8YIzc3NmT0xI4yyATC81mMvetg0pahybcFBrxRMCiNUNbbkGSo7gYVea3GQBHBfeUnw770YTPreCLWRtpWKbgWyvNbiEtuNgZ473b5V+NoItY2t5apUccHdCsZAOUAg/a8rilf+j1spfWmEcPjFtOzcd54QtMRrLR7ylprmsvVri95yI5nvjBAOv5g2I/ftfwK+5bUWH3BMMW5cH8o/6XQiX3W54XDYyLninRZSJjjHZwVzz+bNrZ9yOpFvjKCqkp37p/UqusprLT7jukQGv4xEIlOdTOIbI9RF2h++yMcEo6KqXSdPnnR0FdMXY4TahtZvqvAv+ESPzzhiDAS+XFa2+rSTSTz/w9dsaZ9HwDzIYHWQHxgAjiO8CfKhKv0iegrVKYJMR5iuKrNB5+P8OsdHBrq4LFR4zOE8pDmd4HxsamubRp+5C29NcBzR3ZjsTxhyoLI4+IbVmb3HnnjyM2mBwBdNWCbCMuA67LvdxlW4o6zEeROAxz1CdUNrjQjlHqR+T9AWMWVX2dqCV+0K+vi2bVfG4+krRPUOhBuYwN9XhIrykoJau7SNmc+tRMOpqm9dbBj8Ggi4mHY/SHUWfc+EQqGYk4kea2ydm6ZapkgBcElSF6u2VJQWFjmjbGQ8MUIkEknvI/MQ7i0idSL6k4qSwudcyvdHPimfu0uQHyuaPeYFygEj2rP0olhrqGlovRvhERdS9Qt6f27O1Me8Ljl/NLLz8oDG7hVhLaNXU72nGIvcmEkcjutGeCQSyc4k803gModTvULCWFVxV/7rDudJirqG9s8nxGwV+PywH/WbJku8qklwfUIpi8wynDfBdvNM1o1+MwFAWWn+az05WYuBR4A/Pp2ISMlFU5jySW9wHMhxKofAfeWhggcnEuO2J9+YmYgOfBkx5it6Ncq0wdByRkXfFVNej5m6/6V1ee9PJE9tY1u+qm4VYXN5ScEPJxJrorg6j5BJ5jqcM4GCbCgPBR8bz8Vfq3/tT9RIy0dZFY9GvwAi6PDpBEUUECU9AMsbOn+nKj83CbS8sHbee8nmLC8Jttc2tRzOzZ7q+Z4H13qEcDhszMi99vfAtY4kUN1YUVr4ULKXDX76oxsV7mT8VVBRVNsSpIfHYwg/4NoYIfvKa2/GIROo0lEeKng42euW13cWxqPRowo/YGKlcBmI3GlI/MgtDZ0/QNXzqftkcc0IojgyQSLIb2dMMQuSKfhc2nw8c3lDZztCMzYOXAUuFahb3nj4mW9sOzqp9lu44txPBonvA5k2h46qmDcks6/wtro3psczYs+CLrVZy/9HeCUtPeO2578/5w+O5rEJV3qELMm8GftNgMI/JGOC73R0ZsQzok85bgIA5UuJWGzf0uZXZzieywbcuTWoLHcg6gfRtPimZC7o/l9pBJzQMiKqujB9IKNtMowZXBoj6FcdCPrg3WvW9FptvLz+cD6iBQ7oGIvbb2k84sUKa1I4boTNW3fMtnufoiA9sSxpttr+1q2dl4GOa37BDkT14b+sP3KNV/mt4LgRYvH4IrtjmqotG4LBM5bbx7kHYabdOpJgagINe5h/TBw3giF8zu6YYpg7rLb96uYjnwJCdmtIGtGVN28+PNtrGaPhuBHUfiP8obvrxCtWGwfSzVUMnpTmNelpAXW12CQZnB8sKvNtjrg7HA6bltMr37M5/7hR8Y+W4bjx1PBn9obT/7Da8pbIsWzA9jHKBJjr19uDo0bo6OgIYHfJtwZ+Z7mtDCzC3ZrIMUkL8BWvNYyEo0Z478wZ2+fb1YxZL+9OqN23pQljGjrPaw0j4agRjGjA9v0KmmF2W20rIrPszj9RRPmM1xpGwlEjJMS0vUc4/e5nLW/9UuzPbwN+1OSfTbBOIBi+O9jSrzhqhIAaltcCrDJ91jHLtxtRtT2/DfhRk7NGMDMStu/glahheVnXBN+VjanwjtcaRsJRI1w1bVovQ0q27SAQMKzPSwTkqJ257cAwxXcl9uCwET7ZXfSxnTETKtdZbTs1YPwG8NW7E+IJ9nutYSTcGCz+3s5gIvy51bbPrZnfi4pnm0aGo/D6C3+74ITXOkbCeSMIdnfPt4bDYcu6Ff1Hm/OPG4GdXmsYDeeNYOphmyPOnP7pa//CauNAOjux+fY0TmIqtHgtYjScX4bG/gGbBFhtte3uO/M+EmiwW0OyqNC+L5T3ttc6RsOFwhT779GGSvCJJzosHz6Rbib+DvjAbh1WUeg1zbT7vMpvBceNUB4Kvi3w33bGVDQ7HuizXOTxi7sWnlJhvZ0akuQev2+Fc2WKWZV9tscUNtbVbbc8y7gvlLdThSft1jEWCs/sCy3Y7HbeZHHHCGLsdSDsTDPT3JDMBTk5rAXZ44CWUZBD8QT5+PBlXsNxxQiBAXkB6LM9sOqP6+pbLc8r/POKvGhWuvE3wAu2axmO8nJMAre9tC7PD08sY+KKEcrKVp8WlacdCJ1hGrQ1Nzdb3k733Jr5vWnRjL8CJx/l5OmYyc0vheZ96FwOe3FxGdq0vCElSa7rHjBaNYltZc+XzRnYW5pXBOQDdv6zelTkrr2lC749WXqCc7hmhFPvv/UicNyJ2CKsqG1q35jsdXtL87YbacxTkWrA8oaZERgQpT6WYP6+0IL6CcTxDFc3Z9ZEWn8CJH2ghVVEdEN5SeGj47l2aeT1y9NIrBZTVyJ8ibE/JAq8BvpzQ4y23aEFSR+Jp6pS19S++lTXmzuSKdF3gtRhWiNw69bOy9TkBlUWiOosRS5VQcTkYzHkXdQ8GsiYcmAiZx90dHQEurrPRlBZo+jP1ocK756I5oni+nbtmoaWexGZ0D9qLERlR+JsZnFl5Qr7n1RsYMuWHTmxQKxVkdvPfU9EguUlwXavNLles2hE0+qAj5zMoaKrjGl9v6puarN93+VEqa5vXhoNxF8bagIAVW2sbmj1bM+DN0fwRlo3AD9zIVW/iv60p2v2pnB4macFKo9Gdl6eTjSsyFpG/wC+n4gnFv9w3fddL2fz7FDus2S+PMIxtE5xRIR7yoqDz7j9ltWqqo6swCVn16nKPYCVestXY1lyYzLb/u3AsyNdahqbF6HGflzckibCQZDqTO3b5fQx/dWR9lyDxDpFQsDlyVwrwlNlxcEVbprW07N9aiIt1SAVHqTuAlrE0KfLiwstb7Efi0cikewsyfoGan5HkVsZ/RT2sVH9aUVp4f12aRsLT42wqa1tWnqfHmDwFTieoHBClD1qyK8lLvu7Pzj2htVn+i1bduTEjNgXFW7CMG5C9SvAFLukieh3y0sKO2yKd148P+1r8E0nctDSSy3cYQB4C3hT4UOQPjC7DZE0NbkUYQZwFYPnQiXV5Y+Ds2LoTXb2WqPhuREAqhrabjdEn8UnenzGSdNkUeXaAkcLW3yx97GyNPivCkkfqH2RkGsY7EpmhXU8+MIIABUlwfsFmZQLNs6jJ0+cuMbReRBfdcWqKrVNrU2orPFai18Q2CcDPV93+mVfvukRAEREu7tmlwJOFLFMRv49k/5vuvHGN18ZASAcXhbvPnn1HUDEay2eIvyqn/6vh0Khs+6k8zG1ja3lqlThQ8M6iSodejar0M3VU18bAaC2se27qroNmOq1FhdQgfvLSoIPub0m4nsjAFQ3tX1OTN0JfMFrLU4hSA9ilrg1kzicSdHlri8OHsmif7HCA4CnJV1OoLAHWOiVCWCS9AhDqW5svUWUx8H2o3294DQiPyovzt/q9q1gOJOiRxjK+pKCfVn0LwT5kSA9XusZJ6ao7BDk+oqSYJPXJoBJ2CMMpaZp56cxYw8Ahdi36ucoKjyram6sDBX91mstQ5nURjhHdaQ9V8QsF5VSH61iDsUU5HmFBytCwd94LWYkLggjnKOubvt0c4pZrGi+i2Vw5+NthWYzntjmRR1iMlxQRhhKVWNLnqGyEvgeTr2GeGS6UN2jhnT0dB1P6t0SXnLBGmEoNVva50kgsUSRJcBS4Eobw58WOIjobhXZU1Fc8F82xnaNi8IIw6mNtF1tis5FdY7AXMGYo+gVwCUMvvbnEgYrjnuB00CvCKcV7RGVE4oeNqBTMY6Wh4K+PRcpRYoUKVKkSJEiRQpb+D8pMrte286yKQAAAABJRU5ErkJggg==\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"list\":\"HomeStyles_list__vGyLh\",\"noFormat\":\"HomeStyles_noFormat__3CIlr\",\"newsHeader\":\"HomeStyles_newsHeader__e0I84\",\"newsBody\":\"HomeStyles_newsBody__16h9t\",\"homeMenuHeader\":\"HomeStyles_homeMenuHeader__1Kq1P\",\"homeMenuBody\":\"HomeStyles_homeMenuBody__2NsdU\",\"homeButton\":\"HomeStyles_homeButton__KoQRs\"};","module.exports = __webpack_public_path__ + \"static/media/CT_TEXT.1c7cbe11.png\";"],"sourceRoot":""}