{"version":3,"sources":["enums/dialogTypes.tsx","components/shared/FadeInLetters.tsx","components/dialogs/setupParts.tsx","redux/actionTypes.tsx","redux/actions.tsx","redux/selectors.tsx","utils/addReduxProps.tsx","redux/reducers/setups.tsx","redux/reducers/parts.tsx","redux/reducers/modals.tsx","redux/reducers/vehicleOverview.tsx","redux/reducers/load.tsx","redux/reducers/models.tsx","redux/reducers/configuration.tsx","redux/reducers/toast.tsx","redux/reducers/views.tsx","redux/reducers/index.tsx","redux/store.tsx","utils/helpers.tsx","services/http/index.tsx","services/http/real.tsx","i18n.ts","components/dialogs/warnBeforeExit.tsx","components/dialogs/deleteConfiguration.tsx","utils/formatter.tsx","redux/async-actions/addPart.ts","components/dialogs/conflictingParts.tsx","redux/async-actions/removePart.ts","components/dialogs/removeConflictingParts.tsx","utils/FormManager.ts","components/dialogs/saveConfiguration.tsx","enums/transitionStates.tsx","components/dialogs/exportConfiguration.tsx","components/shared/DotsLoader.tsx","components/dialogs/shareConfiguration.tsx","components/dialogs/dialogRouter.tsx","components/vehicle-overview/VehicleSummary.tsx","utils/colors.tsx","components/vehicle-overview/VehicleImage.tsx","components/parts/Part.tsx","components/shared/CategoryName.tsx","components/parts/PartsList.tsx","components/parts/PartDetailDialog.tsx","components/shared/Toast.tsx","components/vehicle-overview/VehicleOverview.tsx","assets/icons/save.tsx","assets/icons/categories.tsx","assets/icons/exit.tsx","components/navigation/Navigation.tsx","components/categories/CategoryList.tsx","components/configuration/ConfigurationSummary.tsx","components/configuration/ConfigurationView.tsx","assets/icons/hills.tsx","assets/icons/mountains.tsx","assets/icons/motorway.tsx","components/preview/PreviewView.tsx","components/main/NoRecord.tsx","components/main/history/HistoryView.tsx","redux/async-actions/loadConfiguration.ts","components/main/history/historyStyles.tsx","components/main/motorcycles/MotorcycleMenu.tsx","components/main/motorcycles/Models.tsx","components/main/motorcycles/MotorcycleView.tsx","redux/async-actions/getModels.ts","components/main/overview/FastFact.tsx","components/main/overview/Overview.tsx","redux/async-actions/getOverview.ts","components/main/MainView.tsx","utils/RestrictedRoute.tsx","App.tsx","serviceWorker.ts","index.tsx","config.ts"],"names":["DialogTypes","FadeInLetters","_ref","text","_ref$speed","speed","textLength","length","_useState","useState","_useState2","Object","slicedToArray","substringArray","setSubstringArray","useEffect","timer","setInterval","clearInterval","toConsumableArray","concat","react_default","a","createElement","react_addons_css_transition_group_default","transitionName","transitionEnterTimeout","transitionLeaveTimeout","map","letter","idx","key","SetupPartsDialog","data","title","hideDialog","Dialog_default","open","onClose","aria-labelledby","DialogTitle_default","id","Grid_default","container","justify","direction","className","shared_FadeInLetters","IconButton_default","onClick","Clear_default","DialogContent_default","List_default","part","ListItem_default","Name","toUpperCase","EXIT_VEHICLE_CONFIGURATION","SELECT_SETUP","APPLY_SETUP","SHOW_MODAL","HIDE_MODAL","SET_CREATED_CONFIGURATION","SET_PERSPECTIVE","SET_PRICE","SET_IMAGE_TIMESTAMP","SET_CONFIGURATION_ID","SET_CONFIGURATION_IMAGES","SET_ENTRY_POINT_URL","CATEGORY_SCROLL_POSITION","PRESERVE_SAVE_DETAILS_DATA","SET_CONFIGURATION_IS_DIRTY","SET_CONFIGURATION_WAS_RECENTLY_CREATED","ADD_MOTORYCLE_MODELS","SELECT_PART","DESELECT_PART","APPLY_PARTS","REMOVE_ALL_PARTS","ADD_VEHICLE_OVERVIEW","SHOW_TOAST","HIDE_TOAST","SET_CULTURE","SET_COMPANY_ID","SET_COUNTRY","TOGGLE_CONFIG_SUMMARY","TOGGLE_PART_DETAIL","LOAD_CONFIGURATION","exitVehicleConfiguration","type","addVehicleOverview","payload","showDialog","contentType","addMotorcycleModels","addPrice","setImageTimestamp","setConfigurationImages","setConfigurationIsDirty","applyParts","selectSetup","showToast","hideToast","preserveSaveDetailsData","getAllSetups","store","vehicleOverviewState","Setups","getAppliedSetup","setups","applied","getSelectedSetup","selected","getDialogState","dialog","getPerspective","configurationState","perspective","getConfiguration","configuration","getPrice","price","getImageTimeStamp","imageTimestamp","getPreservedSaveDetailsDataSelector","preservableSaveDetails","getConfigurationWasRecentlyCreatedSelector","wasRecentlyCreated","getMotorcycleModels","modelsResponse","getPriceAvailability","ShowPricesInConfigurator","getSelectedModel","Vehicle","getOverview","getCategories","Categories","getSelectedPart","parts","getAllParts","Parts","getAppliedParts","getToastState","toast","getCulture","culture","getViews","views","mapStateToProps","appliedParts","dialogState","models","selectedModel","categories","selectedPart","appliedSetup","selectedSetup","totalPrice","overview","mapDispatchToProps","setPerspective","selectPart","deselectPart","applySetup","removeAllParts","addCreatedConfiguration","setConfigurationId","togglePartDetail","toggleSummary","initialState","undefined","SetupsReducer","state","arguments","action","objectSpread","PartsReducer","State","partIds","filter","includes","PartId","isOpen","none","DialogReducer","_action$payload","vehicleInitialState","ModelId","EngineType","Hero","Intro","Title","ImageUrl","Description","Price","CurrencySymbol","Value","FastFacts","getCategoryInformation","reduce","acc","current","CategoryName","sort","VehicleOverviewReducer","PartIds","Segments","MotorcycleReducer","initialConfigurationState","process","market","companyId","customer","name","surname","email","comment","entryPointUrl","categoryScrollPosition","isDirty","Vin","OrderNumber","Firstname","Lastname","Comment","ConfigurationReducer","ConfigurationId","FullImages","Date","now","visible","message","ToastMessageReducer","viewsInitialState","showPartDetail","showConfigurationSummary","ViewsReducer","initialReduxState","dialogInitialState","modelInitialState","partsInitialState","setupsInitialState","toastInitialState","middleware","thunkMiddleware","timeoutHolder","persistConfig","whitelist","storage","persistedReducer","persistReducer","_ref$Vehicle","AvailableParts","_ref$Configuration","Configuration","ClonedConfigurationId","TotalPrice","SelectedPartIds","heroImgUrl","_state$configurationS","emptyState","load","vehicleOverview","composeEnhancers","window","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","apply","persistor","persistStore","toastMessage","clearTimeout","dispatch","setTimeout","getConfigurationId","getState","getCultureSelector","getPreservedSaveDetailsData","getVehicleById","modelResponse","Vehicles","find","item","getPartById","getLocaleQuery","_store$getState$confi","sortAscendingByProperty","previous","next","Previous","Next","Environment","getModels","axios","get","modelId","addPart","SelectedParts","RemoveParts","post","removePart","createConfiguration","config","headers","AnonymousID","uuid","v4","deleteConfiguration","console","log","delete","dismissUnsavedChanges","saveConfiguration","saveAsNew","SaveAsNew","sendExport","sendPdfSummary","Email","CultureName","configId","getHistory","PROD","defaults","common","interceptors","request","use","url","error","Promise","reject","response","status","location","replace","origin","Languages","real","withNamespaces","t","DialogActions_default","react_router_dom","to","http","then","_ref$data","deleteAndReloadHistory","Formatter","pricesAreAvailable","toLocaleString","navigator","language","minimumFractionDigits","timeStamp","toLocaleDateString","date","year","month","day","React","Component","resources","en","translation","translationEN","de","translationDE","fr","translationFR","es","translationES","it","translationIT","i18n","LanguageDetector","reactI18nextModule","init","fallbackLng","interpolation","escapeValue","detection","order","lookupQuerystring","CanBeRendered","addPartPayload$","streamFalseValue","selectedPartIds$","catch","InvalidInputMessage","conflictWhileAddPart","RuleTypes","initialValue","BehaviorSubject","ConflictingPartsContent","_ref2","RulesResult","RuleType","Conflicting","conflictingParts_PartsToRemove","rule","conflictingParts_RequiredParts","RequiredParts","_ref3","deleteRule","_rule$Part","Part","PreviewImage","isSelectable","ChoosePart","selectable","Fragment","conflictingParts_RequiredSelectableParts","partKey","nonSelectable","conflictingParts_RequiredNonSelectableParts","xs","alignItems","src","alt","format","currency","RequiredSelectableParts","_ref4","Code","setSelected","defineProperty","subscription","subscribe","value","unsubscribe","values","getValue","partsInGrid","_ref5","higlighted","bind","style","visibility","Done_default","color","RequiredNonSelectableParts","_ref6","removeParts","partIdsSub","partPayloadSub","pipe","val","addPartAsync","closeDialog","ConflictingContent","disableBackdropClick","fullWidth","maxWidth","Required","selectedRequiredValues","requiredSelectedPartIds","keys","selectionKeys","getRequiredPartsIds","getPartsIdsFromRulesResult","index","self","indexOf","PartsToRemove","_ref7","spacing","conflictingParts_ReplacePart","replacing","ReplacePart","_ref8","_ref8$part","rulesResult","removeConflictingPart","DefaultValidators","removePartAsync","createControl","validators","required","pristine","SavingState","defaultValidators","_defaultValidators","notEmpty","control","trim","match","FormManager","customValidators","classCallCheck","this","controls","controlSetters","touched","createClass","validator","_this","forEach","setControl","addControl","addControlSetter","_this2","_controlIsValid","_this3","formName","controlSetter","_this4","every","validatorKey","hasOwnProperty","Error","_this5","TransitionState","VinControl","OrderNumberControl","FirstNameControl","Validators","LastNameControl","CommentControl","formManager","configurationWasRecentlyCreated","vin","setVin","_useState3","_useState4","orderNumber","setOrderNumber","_useState5","_useState6","firstName","setFirstName","_useState7","_useState8","lastName","setLastName","_useState9","_useState10","setComment","_useState11","_useState12","submitButtonSavingState","setSubmitButtonSavingState","_useState13","_useState14","saveNewButtonSavingState","setSaveNewButtonSavingState","_useState15","_useState16","setError","_getPreservedSaveDeta","preservedVin","preservedOrderNumber","preservedFirstname","preservedLastname","preservedComment","addAllControls","handleSubmit","e","preventDefault","formIsValid","setButtonSavingState","sending","getHashValues","success","reset","Message","touchControls","buttonType","getButtonContentFromSavingState","CircularProgress_default","size","onDialogClose","onSubmit","noValidate","formIsTouched","TextField_default","label","onChange","target","margin","autoFocus","controlIsValid","helperText","multiline","disabled","firstnameControl","lastnameControl","commentControl","emailControl","firstname","setFirstname","lastname","setLastname","setEmail","preservedName","preservedSurName","saveCustomerData","_getPreservedSaveDeta2","customerNameIsInvalid","emailError","assign","encodeURIComponent","href","getDownloadProps","download","DotsLoader","setValue","display","width","textAlign","Array","fill","EmailControl","generating","setGenerating","stopPropagation","shared_DotsLoader","DialogRouter","_React$Component","possibleConstructorReturn","getPrototypeOf","inherits","props","setupParts","warnBeforeExit","dialogs_warnBeforeExit","deleteConfiguraion","dialogs_deleteConfiguration","conflictingParts","removeConflictingParts","dialogs_saveConfiguration","exportConfiguration","shareConfiguration","dialogs_shareConfiguration","renderDialog","connect","withStyles","theme","priceClass","palette","primary","main","fontSize","lineHeight","addOnCountBackground","background","borderRadius","marginLeft","marginRight","position","top","addOn","textTransform","addOnsWrapper","count","model","hasPrices","_props$classes","classes","addOnCountStyles","uniqueAppliedParts","_","uniqBy","formatter","children","colors","VehicleImage","call","perspectives","imageStamp","loading","imageIsCached","getImageSrc","setState","change","newPosition","min","Math","max","newValue","image","Image","complete","getImageBase","Perspective","Url","mainColor","useDarkFont","Colors","fontColor","arrowMainColor","borderColor","arrowStyle","imageStyle","backgroundImage","backgroundSize","backgroundRepeat","backgroundPosition","vehicleImage","onLoad","handleImageLoad","onError","handleImageError","loader","getHeroImage","handleSwipe","ArrowRightAlt_default","Swipeable_default","trackMouse","onSwipedLeft","onSwipedRight","_props$part","Racing","fade","togglePart","isIncluded","selectedFromSummary","faded","partImageStyle","Images","Main","VisibilityOffOutlined_default","titleAccess","Info_default","alignContent","PartAction","PartList","sub","assertThisInitialized","hash","TranstitonStateValue","distinctUntilChanged","Exit","el","document","getElementById","substring","scrollIntoView","_this$props","categoryId","params","categoryName","categoryParts","shared_CategoryName","is","parts_Part","otherImages","Other","allImages","partAction","imageUrl","setImageUrl","itemAction","setItemAction","_operation","Apply","addPartAction","Remove","Close_default","dangerouslySetInnerHTML","__html","ApprovalInfo","Toast","Dialog","pathname","dialogProps","parts_PartDetailDialog","from","ZoomOutMap_default","vehicle_overview_VehicleImage","vehicle_overview_VehicleSummary","dialogRouter","shared_Toast","Save","aria-label","SvgIcon_default","stroke","strokeWidth","fillRule","transform","d","CategoryIcon","x","y","height","styles","verticalAlign","wrapper","padding","icon","left","navigationWrapper","link","textDecoration","withRouter","_ref$location","history","useHistory","linkToSetups","linkToCategories","index_es","align-items","push","exit","save","icons_categories","listItem","&:hover","list","listItemText","setScrollPosition","component","root","category","button","ListItemText_default","translate","hasRacingComponent","pathToPart","toString","imageClassName","_props$match","path","scrollElement","useRef","navigationProps","createNavigationProps","configurationExists","categoryProps","scrollTop","scrollTo","behavior","navigation_Navigation","vehicleOverviewProps","vehicle_overview_VehicleOverview","createVehicleOverview","components_configuration_ConfigurationSummary","createSummary","ref","react_router","exact","routerProps","CategoryList","PartsList","viewBox","preserveAspectRatio","points","mask","PreviewComponent","motorcycleBackground","vehicleSummaryProps","closePreviewUrl","headerGrid","rootIcons","bikeWrapper","contentWrapper","closePreviewBtn","iconWrapper","hills","mountains","motorway","Icon","handleBackgroundChanged","backgroundColor","flexDirection","justifyContent","& > h3","bottom","boxSizing","NoRecord","pagerInitialState","currentPage","perPage","items","modelName","dateFrom","dateTo","nameFilter","pager","loaded","HistoryView","filterRows","handleModelChange","handleDateChange","clearFilter","showConfirm","handleNameFilterChange","updateHistoryState","loadData","deleteItemAndReload","Configurations","_configuration$Custom","Customer","Fullname","setDates","_e$target","setPage","controlName","setHours","fitsModel","fitsFrom","fitsTo","fitsName","Model","toLowerCase","SavedOn","_this$props$classes","table","imagePreview","deleteClass","selectRoot","gap","noRecord","tableHeaderCell","tableBodyCell","imageCell","filterNameRoot","tableRow","minDateProps","disableFuture","maxDate","maxDateProps","minDate","modelNames","filtredItems","pageArray","ceil","Pager","KeyboardArrowLeft_default","KeyboardArrowRight_default","tableItems","row","_this3$state$pager","b","TableRow_default","historyItem","Id","HeroImageUrl","SaveDetails","reason","TableCell_default","body","scope","align","toDateLocaleString","DeleteOutline_default","autoComplete","FilterList_default","Delete_default","FormControl_default","InputLabel_default","htmlFor","Select_default","autoWidth","inputProps","MenuItem_default","material_ui_pickers_esm","Table_default","TableHead_default","head","TableBody_default","colSpan","main_NoRecord","maxHeight","minWidth","fontWeight","cursor","typeList","paddingTop","paddingBottom","navLink","paddingRight","menuWrapper","borderBottom","links","updateState","Models","selectHero","sortModels","isDefault","oldProps","newProps","str","spacedModelName","split","engineSize","firstSpace","lastSpace","lastIndexOf","slice","prev","extract","extractedPrevious","extractedNext","toLocaleLowerCase","localeCompare","modelLink","spacer","selectionWrapper","modelSelectionWrapper","previewWrapper","VehicleInformation","bikePreview","previewBoxWrapper","heroTitle","heroIntro","heroPrice","heroDescription","defaultPreviewStyles","paddingLeft","selectedPreviewStyles","_this$state$Hero","engineTypes","vehicle","version","filtered","onMouseEnter","onMouseLeave","hero","Format","marginBottom","overflowY","borderLeft","Motorcycles","hasModelData","JSON","stringify","alignCenter","segment","selectedSegment","menuProps","motorcycles","segmentData","motorcycles_MotorcycleMenu","motorcycles_Models","facts","fact","Text","FastFact_TextFact","FastFact_PictureFact","TextFact","test","PictureFact","Overview","hasOverviewData","resetAndGoToModels","firstSetup","vehicleOverviewData","goBack","_this$props$overview","imageProps","FastFact_FastFacts","MainView","tabSelected","some","resetVehicleConfiguration","History","RestrictedRoute","hasParam","checkStore","redirect","needLogin","render","paramOk","storeOk","canAccessComponent","TransitionState$","Subject","asObservable","checkConfigrationID","renderMain","parsed","queryString","parse","search","id_company","country","main_MainView","renderRoot","App","script","charset","setAttribute","appendChild","loadOneTrust","react_transition_group","classNames","timeout","enter","onEnter","Enter","onExited","utils_RestrictedRoute","Preview","Boolean","hostname","themeConfig","typography","fontFamily","join","light","orange","dark","secondary","yellow","red","createMuiTheme","ReactDOM","core_styles","integration_react","dist_es","utils","DateFnsUtils","locale","deLocale","src_App_0","serviceWorker","ready","registration","unregister","TagManager","initialize","gtmId","events","gtm.start","getTime","event"],"mappings":"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","file":"static/js/main.6ba524ef.chunk.js","sourcesContent":["export enum DialogTypes {\r\n\tnone = \"none\",\r\n\tsetupParts = \"setupParts\",\r\n\taddPart = \"addPart\",\r\n\tremovePart = \"removePart\",\r\n\tconfigurationSummary = \"configurationSummary\",\r\n\twarnBeforeExit = \"warnBeforeExit\",\r\n\tsaveConfiguration = \"saveConfiguration\",\r\n\tconflictWhileAddPart = \"conflictWhileAddPart\",\r\n\texportConfiguration = 'exportConfiguration',\r\n\tshareConfiguration = 'shareConfiguration',\r\n\tremoveConflictingPart = 'removeConflictingPart',\r\n\tdeleteConfiguraion = 'deleteConfiguraion',\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport ReactCSSTransitionGroup from 'react-addons-css-transition-group';\r\n\r\ninterface FadeInLettersProps {\r\n\ttext: string;\r\n\tspeed?: number\r\n}\r\n\r\nexport const FadeInLetters: React.FunctionComponent = ({ text, speed = 25 }) => {\r\n\tconst textLength = text.length;\r\n\tconst [substringArray, setSubstringArray] = useState>([]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst timer = setInterval(() => {\r\n\t\t\tsetSubstringArray((substringArray) => {\r\n\t\t\t\tif (substringArray.length === textLength) {\r\n\t\t\t\t\tclearInterval(timer)\r\n\t\t\t\t\treturn [...substringArray];\r\n\t\t\t\t}\r\n\t\t\t\treturn [...substringArray, text[substringArray.length]];\r\n\t\t\t});\r\n\t\t}, speed);\r\n\t}, [speed, text, textLength]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{substringArray.map((letter, idx) => {letter})}\r\n\t\t\r\n\r\n\t)\r\n}\r\n\r\nexport default FadeInLetters;\r\n","import React from 'react'\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Clear from '@material-ui/icons/Clear';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Product } from '../setups/SetupsList';\r\nimport { DialogProps } from './dialogRouter';\r\nimport FadeInLetters from '../shared/FadeInLetters';\r\n\r\nexport const SetupPartsDialog: React.FunctionComponent = ({ data, title, hideDialog }) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{data.map((part: Product, idx: number) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{part.Name.toUpperCase()}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default SetupPartsDialog;\r\n","export const EXIT_VEHICLE_CONFIGURATION = \"EXIT_VEHICLE_CONFIGURATION\";\r\n\r\n/* SETUPS */\r\nexport const SELECT_SETUP = \"SELECT_SETUP\";\r\nexport const APPLY_SETUP = \"APPLY_SETUP\";\r\n\r\n/* MODALS*/\r\nexport const SHOW_MODAL = \"SHOW_MODAL\";\r\nexport const HIDE_MODAL = \"HIDE_MODAL\";\r\n\r\n/* CONFIGURATION */\r\nexport const SET_CREATED_CONFIGURATION = \"SET_CREATED_CONFIGURATION_RESPONSE\";\r\nexport const SET_PERSPECTIVE = \"SET_BIKE_IMAGE_PERSPECTIVE\";\r\nexport const SET_PRICE = \"SET_PRICE\";\r\nexport const SET_IMAGE_TIMESTAMP = \"SET_IMAGE_TIMESTAMP\";\r\nexport const SET_CONFIGURATION_ID = \"SET_CONFIGURATION_ID\";\r\nexport const SET_CONFIGURATION_IMAGES = \"SET_CONFIGURATION_IMAGES\";\r\nexport const SET_ENTRY_POINT_URL = \"SET_ENTRY_POINT_URL\";\r\nexport const CATEGORY_SCROLL_POSITION = \"CATEGORY_SCROLL_POSITION\";\r\nexport const PRESERVE_SAVE_DETAILS_DATA = \"PRESERVE_SAVE_DETAILS_DATA\";\r\nexport const SET_CONFIGURATION_IS_DIRTY = \"SET_CONFIGURATION_IS_DIRTY\";\r\nexport const SET_CONFIGURATION_WAS_RECENTLY_CREATED =\r\n\t\"SET_CONFIGURATION_WAS_RECENTLY_CREATED\";\r\n\r\n/* MOTORCYCLES */\r\nexport const ADD_MOTORYCLE_MODELS = \"ADD_MOTORYCLE_MODELS\";\r\nexport const MODEL_SELECTED = \"MODEL_SELECTED\";\r\n\r\n/* PARTS */\r\nexport const SELECT_PART = \"SELECT_PART\";\r\nexport const DESELECT_PART = \"DESELECT_PART\";\r\nexport const APPLY_PARTS = \"APPLY_PARTS\";\r\nexport const REMOVE_ALL_PARTS = \"REMOVE_ALL_PARTS\";\r\n\r\n/* BIKE OVERVIEW */\r\nexport const ADD_VEHICLE_OVERVIEW = \"ADD_VEHICLE_OVERVIEW\";\r\n\r\n/* TOAST */\r\nexport const SHOW_TOAST = \"SHOW_TOAST\";\r\nexport const HIDE_TOAST = \"HIDE_TOAST\";\r\n\r\n/* CULTURE, COMPANY_ID, COUNTRY */\r\nexport const SET_CULTURE = \"SET_CULTURE\";\r\nexport const SET_COMPANY_ID = \"SET_COMPANY_ID\";\r\nexport const SET_COUNTRY = \"SET_COUNTRY\";\r\n\r\n/* VIEWS */\r\nexport const TOGGLE_CONFIG_SUMMARY = \"TOGGLE_CONFIG_SUMMARY\";\r\nexport const TOGGLE_PART_DETAIL = \"TOGGLE_PART_DETAIL\";\r\n\r\n/* LOAD */\r\nexport const LOAD_CONFIGURATION = \"LOAD_CONFIGURATION\";\r\n","import {\r\n\tEXIT_VEHICLE_CONFIGURATION,\r\n\tADD_VEHICLE_OVERVIEW,\r\n\tSHOW_MODAL,\r\n\tHIDE_MODAL,\r\n\tSET_PERSPECTIVE,\r\n\tADD_MOTORYCLE_MODELS,\r\n\tSELECT_PART,\r\n\tDESELECT_PART,\r\n\tSELECT_SETUP,\r\n\tAPPLY_SETUP,\r\n\tAPPLY_PARTS,\r\n\tSHOW_TOAST,\r\n\tHIDE_TOAST,\r\n\tREMOVE_ALL_PARTS,\r\n\tSET_PRICE,\r\n\tSET_CREATED_CONFIGURATION,\r\n\tSET_IMAGE_TIMESTAMP,\r\n\tSET_CONFIGURATION_ID,\r\n\tSET_CONFIGURATION_IMAGES,\r\n\tTOGGLE_CONFIG_SUMMARY,\r\n\tTOGGLE_PART_DETAIL,\r\n\tPRESERVE_SAVE_DETAILS_DATA,\r\n\tCATEGORY_SCROLL_POSITION,\r\n\tSET_CONFIGURATION_WAS_RECENTLY_CREATED,\r\n\tSET_CONFIGURATION_IS_DIRTY\r\n} from \"./actionTypes\";\r\nimport {\r\n\tMotorcycleModelResponse,\r\n\tPrice\r\n} from \"../components/main/motorcycles/MotorcycleView\";\r\nimport { Part } from \"../components/parts/PartsList\";\r\nimport { DialogTypes } from \"../enums/dialogTypes\";\r\nimport { Setup } from \"../components/setups/SetupsList\";\r\nimport { VehicleOverviewState } from \"./reducers/vehicleOverview\";\r\nimport {\r\n\tCreateConfigurationResponse,\r\n\tFullImage\r\n} from \"../components/configuration/ConfigurationView\";\r\nimport { SaveDetailsData } from \"../components/dialogs/saveConfiguration\";\r\n\r\nexport const exitVehicleConfiguration = () => ({\r\n\ttype: EXIT_VEHICLE_CONFIGURATION\r\n});\r\n\r\n/* BIKE OVERVIEW */\r\nexport const addVehicleOverview = (payload: VehicleOverviewState) => ({\r\n\ttype: ADD_VEHICLE_OVERVIEW,\r\n\tpayload\r\n});\r\n\r\nexport interface ShowDialogProps {\r\n\tcontentType: DialogTypes;\r\n\tdata: D;\r\n\ttitle: string;\r\n}\r\n\r\n/* MODALS */\r\nexport const showDialog = ({ contentType, data, title }: ShowDialogProps) => ({\r\n\ttype: SHOW_MODAL,\r\n\tpayload: {\r\n\t\tcontentType,\r\n\t\tdata,\r\n\t\ttitle\r\n\t}\r\n});\r\n\r\nexport const hideDialog = () => ({\r\n\ttype: HIDE_MODAL,\r\n\tpayload: null\r\n});\r\n\r\n/* MODELS */\r\nexport const addMotorcycleModels = (payload: MotorcycleModelResponse) => ({\r\n\ttype: ADD_MOTORYCLE_MODELS,\r\n\tpayload\r\n});\r\n\r\n/* CONFIGURATION */\r\nexport const setPerspective = (perspective: number) => ({\r\n\ttype: SET_PERSPECTIVE,\r\n\tpayload: perspective\r\n});\r\n\r\nexport const addCreatedConfiguration = (\r\n\tpayload: CreateConfigurationResponse\r\n) => ({\r\n\ttype: SET_CREATED_CONFIGURATION,\r\n\tpayload\r\n});\r\n\r\nexport const setConfigurationId = (payload: number) => ({\r\n\ttype: SET_CONFIGURATION_ID,\r\n\tpayload\r\n});\r\n\r\nexport const addPrice = (payload: Price) => ({\r\n\ttype: SET_PRICE,\r\n\tpayload\r\n});\r\n\r\nexport const setImageTimestamp = () => ({\r\n\ttype: SET_IMAGE_TIMESTAMP\r\n});\r\n\r\nexport const setConfigurationImages = (payload: FullImage[]) => ({\r\n\ttype: SET_CONFIGURATION_IMAGES,\r\n\tpayload\r\n});\r\n\r\nexport const setCategoryScrollPosition = (payload: number) => ({\r\n\ttype: CATEGORY_SCROLL_POSITION,\r\n\tpayload\r\n});\r\n\r\nexport const setConfigurationWasRecentlyCreated = (payload: boolean) => ({\r\n\ttype: SET_CONFIGURATION_WAS_RECENTLY_CREATED,\r\n\tpayload\r\n});\r\n\r\nexport const setConfigurationIsDirty = (payload: boolean) => ({\r\n\ttype: SET_CONFIGURATION_IS_DIRTY,\r\n\tpayload\r\n})\r\n\r\n/* PARTS */\r\nexport const selectPart = (payload: Part) => ({\r\n\ttype: SELECT_PART,\r\n\tpayload\r\n});\r\nexport const deselectPart = () => ({\r\n\ttype: DESELECT_PART\r\n});\r\n\r\nexport const applyParts = (payload: string[]) => ({\r\n\ttype: APPLY_PARTS,\r\n\tpayload\r\n});\r\n\r\nexport const removeAllParts = () => ({\r\n\ttype: REMOVE_ALL_PARTS\r\n});\r\n\r\n/* SETUPS */\r\nexport const selectSetup = (payload: Setup) => ({\r\n\ttype: SELECT_SETUP,\r\n\tpayload\r\n});\r\n\r\nexport const applySetup = (payload: Setup) => ({\r\n\ttype: APPLY_SETUP,\r\n\tpayload\r\n});\r\n\r\n/* TOAST */\r\nexport const showToast = (payload: string) => ({\r\n\ttype: SHOW_TOAST,\r\n\tpayload\r\n});\r\n\r\nexport const hideToast = () => ({\r\n\ttype: HIDE_TOAST\r\n});\r\n\r\n/* VIEWS */\r\n\r\nexport const toggleSummary = (payload: boolean) => ({\r\n\ttype: TOGGLE_CONFIG_SUMMARY,\r\n\tpayload\r\n});\r\n\r\nexport const togglePartDetail = (payload: boolean) => ({\r\n\ttype: TOGGLE_PART_DETAIL,\r\n\tpayload\r\n});\r\n\r\nexport const preserveSaveDetailsData = (payload: SaveDetailsData) => ({\r\n\ttype: PRESERVE_SAVE_DETAILS_DATA,\r\n\tpayload\r\n});\r\n","import { Store } from \"./reducers/index\";\r\nimport { DialogState } from \"./reducers/modals\";\r\nimport { Setup } from \"../components/setups/SetupsList\";\r\nimport { Part } from \"../components/parts/PartsList\";\r\nimport { CreateConfigurationResponse } from \"../components/configuration/ConfigurationView\";\r\nimport { Price } from \"../components/main/motorcycles/MotorcycleView\";\r\nimport { SaveDetailsData } from \"../components/dialogs/saveConfiguration\";\r\n\r\n/* SETUPS*/\r\nexport const getAllSetups = (store: Store): Setup[] => {\r\n\treturn store.vehicleOverviewState.Setups;\r\n};\r\n\r\nexport const getSetupById = (store: Store, setupId: string): Setup => {\r\n\treturn getAllSetups(store).find(\r\n\t\t(setup: Setup) => setup.Name === setupId\r\n\t) as Setup;\r\n};\r\n\r\nexport const getAppliedSetup = (store: Store) => store.setups.applied;\r\nexport const getSelectedSetup = (store: Store) => store.setups.selected;\r\n\r\n/* MODALS */\r\nexport const getDialogState = (store: Store): DialogState => {\r\n\treturn store.dialog;\r\n};\r\n\r\n/* CONFIGURATION */\r\nexport const getPerspective = (store: Store): number => {\r\n\treturn store.configurationState.perspective;\r\n};\r\n\r\nexport const getConfiguration = (store: Store): CreateConfigurationResponse => {\r\n\treturn store.configurationState.configuration;\r\n};\r\nexport const getPrice = (store: Store): Price => {\r\n\treturn store.configurationState.price;\r\n};\r\n\r\nexport const getImageTimeStamp = (store: Store): number =>\r\n\tstore.configurationState.imageTimestamp;\r\n\r\nexport const getPreservedSaveDetailsDataSelector = (\r\n\tstore: Store\r\n): SaveDetailsData => store.configurationState.preservableSaveDetails;\r\n\r\nexport const getCategoryScrollPosition = (store: Store): number =>\r\n\tstore.configurationState.categoryScrollPosition;\r\n\r\nexport const getConfigurationWasRecentlyCreatedSelector = (store: Store) =>\r\n\tstore.configurationState.wasRecentlyCreated;\r\n\r\nexport const getConfigurationIsDirtySelector = (store: Store) =>\r\n\tstore.configurationState.isDirty;\r\n\r\n/* MOTORCYCLES */\r\nexport const getMotorcycleModels = (store: Store) => store.modelsResponse;\r\nexport const getPriceAvailability = (store: Store) =>\r\n\tstore.modelsResponse.ShowPricesInConfigurator;\r\nexport const getSelectedModel = (store: Store) =>\r\n\tstore.vehicleOverviewState.Vehicle;\r\nexport const getOverview = (store: Store) => store.vehicleOverviewState;\r\n\r\n/* CATEGORIES */\r\nexport const getCategories = (store: Store) =>\r\n\tstore.vehicleOverviewState.Categories;\r\n\r\n/* PARTS */\r\nexport const getSelectedPart = (store: Store) => store.parts.selected as Part;\r\nexport const getAllParts = (store: Store) => store.vehicleOverviewState.Parts;\r\nexport const getAppliedParts = (store: Store) => store.parts.applied;\r\n\r\n/* TOAST */\r\nexport const getToastState = (store: Store) => store.toast;\r\n\r\n/* CULTURE */\r\nexport const getCulture = (store: Store) => store.configurationState.culture;\r\n\r\n/* VIEWS */\r\nexport const getViews = (store: Store) => store.views;\r\n","import {\r\n\thideDialog,\r\n\tshowDialog,\r\n\tsetPerspective,\r\n\tselectPart,\r\n\tdeselectPart,\r\n\taddVehicleOverview,\r\n\tselectSetup,\r\n\tapplySetup,\r\n\tapplyParts,\r\n\tremoveAllParts,\r\n\tshowToast,\r\n\thideToast,\r\n\tShowDialogProps,\r\n\tsetImageTimestamp,\r\n\taddCreatedConfiguration,\r\n\taddPrice,\r\n\tsetConfigurationId,\r\n\tsetConfigurationImages,\r\n\ttogglePartDetail,\r\n\ttoggleSummary\r\n} from \"../redux/actions\";\r\n\r\nimport {\r\n\tgetAllSetups,\r\n\tgetDialogState,\r\n\tgetSelectedModel,\r\n\tgetCategories,\r\n\tgetSelectedPart,\r\n\tgetPerspective,\r\n\tgetAppliedSetup,\r\n\tgetSelectedSetup,\r\n\tgetAllParts,\r\n\tgetAppliedParts,\r\n\tgetToastState,\r\n\tgetMotorcycleModels,\r\n\tgetConfiguration,\r\n\tgetPrice,\r\n\tgetImageTimeStamp,\r\n\tgetOverview,\r\n\tgetViews,\r\n\tgetConfigurationWasRecentlyCreatedSelector\r\n} from \"../redux/selectors\";\r\nimport { Setup } from \"../components/setups/SetupsList\";\r\nimport Action from \"../redux/reducers/models/action\";\r\nimport { DialogState } from \"../redux/reducers/modals\";\r\nimport {\r\n\tVehicleInformation,\r\n\tMotorcycleModelResponse,\r\n\tPrice\r\n} from \"../components/main/motorcycles/MotorcycleView\";\r\nimport { Part } from \"../components/parts/PartsList\";\r\nimport { Store as AppStore } from \"../redux/reducers\";\r\nimport { ToastMessageState } from \"../redux/reducers/toast\";\r\nimport { VehicleOverviewState } from \"../redux/reducers/vehicleOverview\";\r\nimport {\r\n\tCreateConfigurationResponse,\r\n\tFullImage\r\n} from \"../components/configuration/ConfigurationView\";\r\nimport { ViewsState } from \"../redux/reducers/views\";\r\n\r\nexport interface StateToProps {\r\n\tsetups: Setup[];\r\n\tmodels: MotorcycleModelResponse;\r\n\tparts: Part[];\r\n\tdialogState: DialogState;\r\n\tperspective: number;\r\n\tselectedModel: VehicleInformation;\r\n\tcategories: string[];\r\n\tselectedPart: Part;\r\n\tappliedSetup: Setup | undefined;\r\n\tselectedSetup: Setup;\r\n\tappliedParts: Part[];\r\n\ttoast: ToastMessageState;\r\n\tconfiguration: CreateConfigurationResponse;\r\n\ttotalPrice: Price;\r\n\twasRecentlyCreated: boolean;\r\n\timageTimestamp: number;\r\n\toverview: VehicleOverviewState;\r\n\tviews: ViewsState;\r\n}\r\n\r\nexport interface DispatchToProps {\r\n\taddVehicleOverview: (payload: VehicleOverviewState) => Action;\r\n\tshowDialog: (dialogProps: ShowDialogProps) => Action;\r\n\thideDialog: () => Action;\r\n\tsetPerspective: (perspective: number) => Action;\r\n\tselectSetup: (payload: Setup) => Action;\r\n\tapplySetup: (payload: Setup) => Action;\r\n\tselectPart: (part: Part) => Action;\r\n\tdeselectPart: () => Action;\r\n\tremoveAllParts: () => Action;\r\n\tapplyParts: (payload: string[]) => Action;\r\n\tshowToast: (payload: string) => Action;\r\n\thideToast: () => Action;\r\n\taddCreatedConfiguration: (config: CreateConfigurationResponse) => Action;\r\n\taddPrice: (price: Price) => Action;\r\n\tsetImageTimestamp: () => Action;\r\n\tsetConfigurationId: (configId: number) => Action;\r\n\tsetConfigurationImages: (images: FullImage[]) => Action;\r\n\ttogglePartDetail: (show: boolean) => Action;\r\n\ttoggleSummary: (show: boolean) => Action;\r\n}\r\n\r\nexport type StateManagementProps = StateToProps & DispatchToProps;\r\n\r\nexport const mapStateToProps = (store: AppStore): StateToProps => {\r\n\treturn {\r\n\t\tsetups: getAllSetups(store),\r\n\t\tparts: getAllParts(store),\r\n\t\tappliedParts: getAppliedParts(store),\r\n\t\tdialogState: getDialogState(store),\r\n\t\tmodels: getMotorcycleModels(store),\r\n\t\tperspective: getPerspective(store),\r\n\t\tselectedModel: getSelectedModel(store),\r\n\t\tcategories: getCategories(store),\r\n\t\tselectedPart: getSelectedPart(store),\r\n\t\tappliedSetup: getAppliedSetup(store),\r\n\t\tselectedSetup: getSelectedSetup(store),\r\n\t\ttoast: getToastState(store),\r\n\t\tconfiguration: getConfiguration(store),\r\n\t\ttotalPrice: getPrice(store),\r\n\t\twasRecentlyCreated: getConfigurationWasRecentlyCreatedSelector(store),\r\n\t\timageTimestamp: getImageTimeStamp(store),\r\n\t\toverview: getOverview(store),\r\n\t\tviews: getViews(store)\r\n\t};\r\n};\r\n\r\nexport const mapDispatchToProps: DispatchToProps = {\r\n\taddVehicleOverview,\r\n\thideDialog,\r\n\tshowDialog,\r\n\tsetPerspective,\r\n\tselectPart,\r\n\tdeselectPart,\r\n\tselectSetup,\r\n\tapplySetup,\r\n\tapplyParts,\r\n\tshowToast,\r\n\thideToast,\r\n\tremoveAllParts,\r\n\taddCreatedConfiguration,\r\n\taddPrice,\r\n\tsetImageTimestamp,\r\n\tsetConfigurationId,\r\n\tsetConfigurationImages,\r\n\ttogglePartDetail,\r\n\ttoggleSummary\r\n};\r\n","import { SELECT_SETUP, APPLY_SETUP, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport { Setup } from '../../components/setups/SetupsList'\r\nimport Action from './models/action'\r\n\r\n\r\nexport interface SetupsState {\r\n\tselected: Setup;\r\n\tapplied: Setup | undefined;\r\n}\r\n\r\nexport const initialState: SetupsState = {\r\n\tselected: {} as Setup,\r\n\tapplied: undefined,\r\n};\r\n\r\n\r\nexport default function SetupsReducer(state: SetupsState = initialState, action: Action): SetupsState {\r\n\tswitch (action.type) {\r\n\t\tcase SELECT_SETUP: {\r\n\t\t\tconst selected: Setup = action.payload;\r\n\t\t\treturn { ...state, selected };\r\n\t\t}\r\n\t\tcase APPLY_SETUP: {\r\n\t\t\tconst applied: Setup = action.payload;\r\n\t\t\treturn { ...state, applied };\r\n\t\t}\r\n\t\tcase EXIT_VEHICLE_CONFIGURATION: {\r\n\t\t\treturn {\r\n\t\t\t\t...initialState,\r\n\t\t\t};\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import { SELECT_PART, DESELECT_PART, APPLY_PARTS, REMOVE_ALL_PARTS, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from './models/action'\r\nimport { Part } from \"../../components/parts/PartsList\";\r\nimport { Store } from \".\";\r\nimport CategoryName from \"../../components/shared/CategoryName\";\r\nimport Categories from \"../../components/categories/CategoryList\";\r\n\r\nexport interface PartsState {\r\n\tselected: Part | null;\r\n\tapplied: Part[];\r\n}\r\n\r\nexport const initialState: PartsState = {\r\n\tselected: {} as Part,\r\n\tapplied: [],\r\n};\r\n\r\n\r\nexport default function PartsReducer(state: PartsState = initialState, action: Action, State: Store): PartsState {\r\n\tswitch (action.type) {\r\n\t\tcase SELECT_PART: {\r\n\t\t\tconst selected: Part = action.payload;\r\n\t\t\treturn { ...state, selected };\r\n\t\t}\r\n\t\tcase DESELECT_PART: {\r\n\t\t\treturn { ...state, selected: {} as Part };\r\n\t\t}\r\n\t\tcase APPLY_PARTS: {\r\n\t\t\tconst partIds: string[] = action.payload;\r\n\t\t\tconst parts = State.vehicleOverviewState.Parts.filter(\r\n\t\t\t\t(part: Part) => partIds.includes(part.PartId)\r\n\t\t\t\t);\r\n\t\t\treturn { ...state, applied: [...parts] };\r\n\t\t}\r\n\t\tcase REMOVE_ALL_PARTS: {\r\n\r\n\t\t\treturn { ...state, applied: [] };\r\n\t\t}\r\n\t\tcase EXIT_VEHICLE_CONFIGURATION: {\r\n\t\t\treturn {\r\n\t\t\t\t...initialState,\r\n\t\t\t};\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import { SHOW_MODAL, HIDE_MODAL, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from './models/action';\r\nimport { DialogTypes } from \"../../enums/dialogTypes\";\r\n\r\n\r\nexport interface DialogState {\r\n\tisOpen: boolean;\r\n\tcontentType: DialogTypes\r\n\ttitle: string;\r\n\tdata: D;\r\n}\r\n\r\n\r\nexport const initialState = {\r\n\tisOpen: false,\r\n\tcontentType: DialogTypes.none,\r\n\ttitle: '',\r\n\tdata: {},\r\n};\r\n\r\nexport default function DialogReducer(state: DialogState = initialState, action: Action): DialogState {\r\n\tswitch (action.type) {\r\n\t\tcase SHOW_MODAL: {\r\n\t\t\tconst { contentType, data, title } = action.payload;\r\n\t\t\treturn {\r\n\t\t\t\tisOpen: true,\r\n\t\t\t\tcontentType,\r\n\t\t\t\tdata,\r\n\t\t\t\ttitle,\r\n\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase EXIT_VEHICLE_CONFIGURATION:\r\n\t\tcase HIDE_MODAL: {\r\n\t\t\treturn {\r\n\t\t\t\t...initialState,\r\n\t\t\t};\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import { ADD_VEHICLE_OVERVIEW, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from './models/action';\r\nimport { VehicleInformation } from \"../../components/main/motorcycles/MotorcycleView\";\r\nimport { VehicleOverviewResponse } from \"../../components/main/overview/Overview\";\r\nimport { Part } from \"../../components/parts/PartsList\";\r\n\r\nexport interface VehicleOverviewState extends VehicleOverviewResponse {\r\n Vehicle: VehicleInformation;\r\n Categories: string[];\r\n};\r\n\r\nconst VehicleState: VehicleInformation = {\r\n Name: '',\r\n ModelId: '',\r\n EngineType: '',\r\n Hero: {\r\n Intro: '',\r\n Title: '',\r\n ImageUrl: '',\r\n Description: '',\r\n Price: {\r\n CurrencySymbol: '',\r\n Value: 0,\r\n }\r\n }\r\n}\r\n\r\nexport const vehicleInitialState: VehicleOverviewState = {\r\n Vehicle: VehicleState,\r\n FastFacts: [],\r\n Setups: [],\r\n Categories: [],\r\n Parts: [],\r\n}\r\n\r\nexport function getCategoryInformation(parts: Part[]): string[] {\r\n return parts.reduce((acc: string[], current: Part) => {\r\n return acc.includes(current.CategoryName) ? acc : [...acc, current.CategoryName];\r\n }, []).sort();\r\n}\r\n\r\nexport default function VehicleOverviewReducer(state: VehicleOverviewState = vehicleInitialState, action: Required): VehicleOverviewState {\r\n switch (action.type) {\r\n case ADD_VEHICLE_OVERVIEW: {\r\n return {\r\n ...action.payload,\r\n }\r\n }\r\n case EXIT_VEHICLE_CONFIGURATION: {\r\n return {\r\n ...vehicleInitialState,\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import { Store } from \"./index\";\r\nimport Action from \"./models/action\";\r\nimport { Part } from \"../../components/parts/PartsList\";\r\nimport { FullImage } from \"../../components/configuration/ConfigurationView\";\r\nimport { Price } from \"../../components/main/motorcycles/MotorcycleView\";\r\nimport { getCategoryInformation } from \"./vehicleOverview\";\r\nimport { initialReduxState as emptyState } from \"./index\";\r\nimport { SaveDetailsData } from \"../../components/dialogs/saveConfiguration\";\r\n\r\nexport interface LoadConfigurationResponse {\r\n\tVehicle: Vehicle;\r\n\tConfiguration: Configuration;\r\n}\r\n\r\ninterface Configuration {\r\n\tClonedConfigurationId: number;\r\n\tSaveDetails: SaveDetailsData;\r\n\tSelectedPartIds: string[];\r\n\tTotalPrice: Price;\r\n}\r\n\r\ninterface Vehicle {\r\n\tModelId: string;\r\n\tName: string;\r\n\tAvailableParts: Part[];\r\n\tFullImages: FullImage[];\r\n}\r\n\r\nexport default function LoadReducer(\r\n\tstate: Store,\r\n\taction: Action\r\n): Store {\r\n\tconst {\r\n\t\tVehicle: { AvailableParts: Parts, FullImages, Name, ModelId },\r\n\t\tConfiguration: {\r\n\t\t\tClonedConfigurationId,\r\n\t\t\tTotalPrice: price,\r\n\t\t\tSelectedPartIds\r\n\t\t},\r\n\t\theroImgUrl\r\n\t} = action.payload as LoadConfigurationResponse & { heroImgUrl: string };\r\n\r\n\tconst { culture, market, companyId } = state.configurationState;\r\n\r\n\treturn {\r\n\t\t...emptyState,\r\n\t\tparts: {\r\n\t\t\t...emptyState.parts,\r\n\t\t\tapplied: getAppliedParts(Parts, SelectedPartIds)\r\n\t\t},\r\n\t\tvehicleOverviewState: {\r\n\t\t\t...emptyState.vehicleOverviewState,\r\n\t\t\tParts,\r\n\t\t\tCategories: getCategoryInformation(Parts),\r\n\t\t\tVehicle: {\r\n\t\t\t\t...state.vehicleOverviewState.Vehicle,\r\n\t\t\t\tName,\r\n\t\t\t\tModelId,\r\n\t\t\t\tHero: {\r\n\t\t\t\t\t...state.vehicleOverviewState.Vehicle.Hero,\r\n\t\t\t\t\tImageUrl: heroImgUrl\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tconfigurationState: {\r\n\t\t\t...emptyState.configurationState,\r\n\t\t\tconfiguration: {\r\n\t\t\t\tConfigurationId: ClonedConfigurationId,\r\n\t\t\t\tFullImages\r\n\t\t\t},\r\n\t\t\tprice,\r\n\t\t\tculture,\r\n\t\t\tmarket,\r\n\t\t\tcompanyId,\r\n\t\t\twasRecentlyCreated: false\r\n\t\t},\r\n\t\tviews: {\r\n\t\t\t...emptyState.views,\r\n\t\t\t// this will take user to the summary\r\n\t\t\tshowConfigurationSummary: true\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction getAppliedParts(Parts: Part[], PartIds: string[]) {\r\n\treturn Parts.filter((part: Part) => PartIds.includes(part.PartId));\r\n}\r\n","import { ADD_MOTORYCLE_MODELS } from \"../actionTypes\";\r\nimport Action from './models/action';\r\nimport { MotorcycleModelResponse, VehicleInformation } from '../../components/main/motorcycles/MotorcycleView';\r\n\r\nexport const initialState: MotorcycleModelResponse = {\r\n\tSegments: [],\r\n\tShowPricesInConfigurator: true,\r\n}\r\n\r\nexport function getVehicleInformation(modelResponse: MotorcycleModelResponse) {\r\n\treturn modelResponse.Segments.reduce((acc, current): VehicleInformation[] => {\r\n\t\treturn [...acc, ...current.Vehicles]\r\n\t}, [] as VehicleInformation[])\r\n}\r\n\r\nexport default function MotorcycleReducer(state: MotorcycleModelResponse = initialState, action: Action): MotorcycleModelResponse {\r\n\tswitch (action.type) {\r\n\t\tcase ADD_MOTORYCLE_MODELS: {\r\n\t\t\treturn {\r\n\t\t\t\t...action.payload\r\n\t\t\t}\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import {\r\n\tSET_PERSPECTIVE,\r\n\tSET_CREATED_CONFIGURATION,\r\n\tSET_IMAGE_TIMESTAMP,\r\n\tSET_PRICE,\r\n\tSET_CULTURE,\r\n\tEXIT_VEHICLE_CONFIGURATION,\r\n\tSET_CONFIGURATION_ID,\r\n\tSET_CONFIGURATION_IMAGES,\r\n\tSET_COMPANY_ID,\r\n\tSET_COUNTRY,\r\n\tPRESERVE_SAVE_DETAILS_DATA,\r\n\tSET_ENTRY_POINT_URL,\r\n\tCATEGORY_SCROLL_POSITION,\r\n\tSET_CONFIGURATION_WAS_RECENTLY_CREATED,\r\n\tSET_CONFIGURATION_IS_DIRTY\r\n} from \"../actionTypes\";\r\nimport Action from \"./models/action\";\r\nimport { CreateConfigurationResponse } from \"../../components/configuration/ConfigurationView\";\r\nimport { Price } from \"../../components/main/motorcycles/MotorcycleView\";\r\nimport { SaveDetailsData } from \"../../components/dialogs/saveConfiguration\";\r\n\r\nconst initialCustomerData: CustomerData = {\r\n\tname: \"\",\r\n\tsurname: \"\",\r\n\temail: \"@\",\r\n\tcomment: \"\"\r\n};\r\n\r\nconst initialSaveDetailsData: SaveDetailsData = {\r\n\tVin: \"\",\r\n\tOrderNumber: \"\",\r\n\tFirstname: \"\",\r\n\tLastname: \"\",\r\n\tComment: \"\"\r\n};\r\n\r\nexport interface ConfigurationState {\r\n\tconfiguration: CreateConfigurationResponse;\r\n\tperspective: number;\r\n\tprice: Price;\r\n\timageTimestamp: number;\r\n\tculture: string;\r\n\tmarket: string;\r\n\tcompanyId: string;\r\n\tcustomer: CustomerData;\r\n\tentryPointUrl: string;\r\n\tcategoryScrollPosition: number;\r\n\twasRecentlyCreated: boolean;\r\n\tisDirty: boolean;\r\n\tpreservableSaveDetails: SaveDetailsData;\r\n}\r\n\r\nexport interface CustomerData {\r\n\tname?: string;\r\n\tsurname?: string;\r\n\temail?: string;\r\n\tcomment?: string;\r\n}\r\n\r\nexport const initialConfigurationState: ConfigurationState = {\r\n\tconfiguration: {} as CreateConfigurationResponse,\r\n\tperspective: 0,\r\n\tprice: {\r\n\t\tCurrencySymbol: \"\",\r\n\t\tValue: 0\r\n\t},\r\n\timageTimestamp: 0,\r\n\tculture: process.env.REACT_APP_DEFAULT_CULTURE as string,\r\n\tmarket: \"\",\r\n\tcompanyId: \"\",\r\n\tcustomer: { ...initialCustomerData },\r\n\tentryPointUrl: \"\",\r\n\tcategoryScrollPosition: 0,\r\n\twasRecentlyCreated: true,\r\n\tisDirty: false,\r\n\tpreservableSaveDetails: { ...initialSaveDetailsData }\r\n};\r\n\r\nexport default function ConfigurationReducer(\r\n\tstate: ConfigurationState = initialConfigurationState,\r\n\taction: Action\r\n): ConfigurationState {\r\n\tswitch (action.type) {\r\n\t\tcase SET_PERSPECTIVE: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tperspective: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CREATED_CONFIGURATION: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tconfiguration: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CONFIGURATION_ID: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tconfiguration: {\r\n\t\t\t\t\t...state.configuration,\r\n\t\t\t\t\tConfigurationId: action.payload\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CONFIGURATION_IMAGES: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tconfiguration: {\r\n\t\t\t\t\t...state.configuration,\r\n\t\t\t\t\tFullImages: action.payload\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_PRICE: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tprice: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_IMAGE_TIMESTAMP: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\timageTimestamp: Date.now()\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CULTURE: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tculture: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_COMPANY_ID: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tcompanyId: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_COUNTRY: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tmarket: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase EXIT_VEHICLE_CONFIGURATION: {\r\n\t\t\treturn {\r\n\t\t\t\t...initialConfigurationState,\r\n\t\t\t\tculture: state.culture,\r\n\t\t\t\tmarket: state.market,\r\n\t\t\t\tcompanyId: state.companyId,\r\n\t\t\t\tentryPointUrl: state.entryPointUrl\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_ENTRY_POINT_URL: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tentryPointUrl: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase CATEGORY_SCROLL_POSITION: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tcategoryScrollPosition: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase PRESERVE_SAVE_DETAILS_DATA: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tpreservableSaveDetails: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CONFIGURATION_WAS_RECENTLY_CREATED: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\twasRecentlyCreated: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tcase SET_CONFIGURATION_IS_DIRTY: {\r\n\t\t\treturn {\r\n\t\t\t\t...state,\r\n\t\t\t\tisDirty: action.payload\r\n\t\t\t};\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import { SHOW_TOAST, HIDE_TOAST, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from './models/action';\r\n\r\nexport interface ToastMessageState {\r\n\tvisible: boolean;\r\n\tmessage: string\r\n}\r\n\r\nexport const initialState: ToastMessageState = {\r\n\tvisible: false,\r\n\tmessage: '',\r\n};\r\n\r\n\r\nexport default function ToastMessageReducer(state: ToastMessageState = initialState, action: Action): ToastMessageState {\r\n\tswitch (action.type) {\r\n\t\tcase SHOW_TOAST: {\r\n\t\t\tconst message: string = action.payload;\r\n\t\t\treturn { visible: true, message };\r\n\t\t}\r\n\t\tcase HIDE_TOAST: {\r\n\t\t\treturn { ...state, visible: false };\r\n\t\t}\r\n\t\tcase EXIT_VEHICLE_CONFIGURATION: {\r\n\t\t\treturn {\r\n\t\t\t\t...initialState,\r\n\t\t\t};\r\n\t\t}\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}\r\n","import { TOGGLE_PART_DETAIL, TOGGLE_CONFIG_SUMMARY, EXIT_VEHICLE_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from './models/action';\r\n\r\nexport interface ViewsState {\r\n showPartDetail: boolean;\r\n showConfigurationSummary: boolean;\r\n}\r\n\r\nexport const viewsInitialState: ViewsState = {\r\n showPartDetail: false,\r\n showConfigurationSummary: false,\r\n}\r\n\r\nexport default function ViewsReducer(state: ViewsState = viewsInitialState, action: Action): ViewsState {\r\n switch (action.type) {\r\n case TOGGLE_CONFIG_SUMMARY: {\r\n return {\r\n ...state,\r\n showConfigurationSummary: action.payload,\r\n }\r\n }\r\n case TOGGLE_PART_DETAIL: {\r\n return {\r\n ...state,\r\n showPartDetail: action.payload,\r\n }\r\n }\r\n case EXIT_VEHICLE_CONFIGURATION: {\r\n return {\r\n ...viewsInitialState,\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import setups, { SetupsState } from \"./setups\";\r\nimport parts, { PartsState } from \"./parts\";\r\nimport dialog, { DialogState } from \"./modals\";\r\nimport load from \"./load\";\r\nimport models from \"./models\";\r\nimport configuration, {\r\n\tConfigurationState,\r\n\tinitialConfigurationState\r\n} from \"./configuration\";\r\nimport vehicleOverview, {\r\n\tVehicleOverviewState,\r\n\tvehicleInitialState\r\n} from \"./vehicleOverview\";\r\nimport { MotorcycleModelResponse } from \"../../components/main/motorcycles/MotorcycleView\";\r\nimport toast, { ToastMessageState } from \"./toast\";\r\nimport views, { ViewsState, viewsInitialState } from \"./views\";\r\nimport { LOAD_CONFIGURATION } from \"../actionTypes\";\r\nimport Action from \"./models/action\";\r\nimport { initialState as modelInitialState } from \"./models\";\r\nimport { initialState as dialogInitialState } from \"./modals\";\r\nimport { initialState as partsInitialState } from \"./parts\";\r\nimport { initialState as setupsInitialState } from \"./setups\";\r\nimport { initialState as toastInitialState } from \"./toast\";\r\n\r\nexport interface Store {\r\n\tdialog: DialogState;\r\n\tconfigurationState: ConfigurationState;\r\n\tviews: ViewsState;\r\n\tmodelsResponse: MotorcycleModelResponse;\r\n\tvehicleOverviewState: VehicleOverviewState;\r\n\tparts: PartsState;\r\n\tsetups: SetupsState;\r\n\ttoast: ToastMessageState;\r\n}\r\n\r\nexport const initialReduxState: Store = {\r\n\tdialog: { ...dialogInitialState },\r\n\tconfigurationState: {\r\n\t\t...initialConfigurationState\r\n\t},\r\n\tviews: { ...viewsInitialState },\r\n\tmodelsResponse: { ...modelInitialState },\r\n\tvehicleOverviewState: { ...vehicleInitialState },\r\n\tparts: { ...partsInitialState },\r\n\tsetups: { ...setupsInitialState },\r\n\ttoast: { ...toastInitialState }\r\n};\r\n\r\nexport default function rootReducer(\r\n\tstate: Store = initialReduxState,\r\n\taction: Action\r\n): Store {\r\n\tif (action.type === LOAD_CONFIGURATION) {\r\n\t\treturn load(state, action);\r\n\t}\r\n\r\n\treturn {\r\n\t\tdialog: dialog(state.dialog, action),\r\n\t\tconfigurationState: configuration(state.configurationState, action),\r\n\t\tviews: views(state.views, action),\r\n\t\tmodelsResponse: models(state.modelsResponse, action),\r\n\t\tvehicleOverviewState: vehicleOverview(\r\n\t\t\tstate.vehicleOverviewState,\r\n\t\t\taction as Required\r\n\t\t),\r\n\t\tparts: parts(state.parts, action, state),\r\n\t\tsetups: setups(state.setups, action),\r\n\t\ttoast: toast(state.toast, action)\r\n\t};\r\n}\r\n","import { createStore, applyMiddleware, compose } from \"redux\";\r\nimport { persistStore, persistReducer } from 'redux-persist';\r\nimport storage from 'redux-persist/lib/storage';\r\nimport thunkMiddleware from \"redux-thunk\";\r\nimport * as Redux from \"redux\";\r\nimport loggerMiddleware from \"redux-logger\";\r\nimport rootReducer from \"./reducers\";\r\n\r\nlet middleware: Redux.Middleware[] = [thunkMiddleware];\r\n\r\nif (process.env.REACT_APP_ENVIRONMENT === \"DEV\") {\r\n\t//middleware = [...middleware, loggerMiddleware];\r\n\tmiddleware = [...middleware];\r\n}\r\n\r\n// === Persist Redux State ===\r\nconst persistConfig = {\r\n\tkey: 'root',\r\n\twhitelist: [\"\"], // Disables redux persist\r\n\tstorage,\r\n}\r\n\r\nconst persistedReducer = persistReducer(persistConfig, rootReducer)\r\n// === Persist Redux State ===\r\n\r\nconst composeEnhancers =\r\n\t(window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\n\r\nexport const store = createStore(\r\n\tpersistedReducer,\r\n\tcomposeEnhancers(applyMiddleware(...middleware))\r\n);\r\n\r\nexport const persistor = persistStore(store)\r\n\r\nexport default store;\r\n","import store from \"../redux/store\";\r\nimport {\r\n\tgetCulture as getCultureSelector,\r\n\tgetPreservedSaveDetailsDataSelector,\r\n\tgetMotorcycleModels,\r\n\tgetPriceAvailability,\r\n\tgetConfigurationWasRecentlyCreatedSelector,\r\n\tgetConfigurationIsDirtySelector\r\n} from \"../redux/selectors\";\r\nimport { Setup } from \"../components/setups/SetupsList\";\r\nimport {\r\n\tPrice,\r\n\tVehicleInformation\r\n} from \"../components/main/motorcycles/MotorcycleView\";\r\nimport { Part } from \"../components/parts/PartsList\";\r\nimport { hideToast, showToast } from \"../redux/actions\";\r\nimport { getVehicleInformation } from \"../redux/reducers/models\";\r\nimport { SaveDetailsData } from \"../components/dialogs/saveConfiguration\";\r\n\r\nlet timeoutHolder: NodeJS.Timeout;\r\n\r\nexport function getSetupParts(setup: Setup): Part[] {\r\n\treturn getAllParts().filter((part: Part) =>\r\n\t\tsetup.PartIds.includes(part.PartId)\r\n\t);\r\n}\r\n\r\nexport function toastMessage(message: string) {\r\n\t// make sure no previous toasts are visible\r\n\ttimeoutHolder && clearTimeout(timeoutHolder);\r\n\tstore.dispatch(hideToast());\r\n\tstore.dispatch(showToast(message));\r\n\ttimeoutHolder = setTimeout(() => store.dispatch(hideToast()), 1900);\r\n}\r\n\r\nexport function calculateSetupPrice(selected: Setup): Price {\r\n\tconst pricesAreAvailable = getPriceAvailability(store.getState());\r\n\r\n\tif (!pricesAreAvailable) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst bareSetupPrice = store.getState().vehicleOverviewState.Vehicle.Hero\r\n\t\t.Price;\r\n\r\n\tif (!bareSetupPrice) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn {\r\n\t\t...bareSetupPrice,\r\n\t\tValue: bareSetupPrice.Value + getPartsValue(getSetupParts(selected))\r\n\t};\r\n}\r\n\r\nexport function getConfigurationId(): number {\r\n\treturn store.getState().configurationState.configuration.ConfigurationId;\r\n}\r\n\r\nexport function getEntryPointUrl() {\r\n\treturn store.getState().configurationState.entryPointUrl;\r\n}\r\n\r\nexport function getCulture(): string {\r\n\treturn getCultureSelector(store.getState());\r\n}\r\n\r\nexport function getPreservedSaveDetailsData(): SaveDetailsData {\r\n\treturn getPreservedSaveDetailsDataSelector(store.getState());\r\n}\r\n\r\nexport const getConfigurationWasRecentlyCreated = () =>\r\n\tgetConfigurationWasRecentlyCreatedSelector(store.getState());\r\n\r\nexport const getConfigurationIsDirty = () =>\r\n\tgetConfigurationIsDirtySelector(store.getState());\r\n\r\nfunction getPartsValue(parts: Part[]) {\r\n\treturn parts.reduce((acc: number, part: Part) => {\r\n\t\treturn acc + (part.Price === null ? 0 : part.Price.Value);\r\n\t}, 0);\r\n}\r\n\r\nfunction getAllParts(): Part[] {\r\n\treturn store.getState().vehicleOverviewState.Parts;\r\n}\r\n\r\nexport function getVehicleById(id: string): VehicleInformation | undefined {\r\n\treturn getVehicleInformation(getMotorcycleModels(store.getState())).find(\r\n\t\t(item: VehicleInformation) => item.ModelId === id\r\n\t);\r\n}\r\n\r\nexport function getPartById(id: string) {\r\n\treturn getAllParts().find((part: Part) => part.PartId === id) as Part;\r\n}\r\n\r\nexport function getLocaleQuery() {\r\n\tconst { culture, market, companyId } = store.getState().configurationState;\r\n\treturn `?cid=${companyId}&c=${culture}&m=${market}`;\r\n}\r\n\r\nexport function sortAscendingByProperty(\r\n\tkey: keyof T\r\n) {\r\n\treturn (previous: T, next: T) => {\r\n\t\tconst Previous = previous[key].toUpperCase();\r\n\t\tconst Next = next[key].toUpperCase();\r\n\t\treturn Previous > Next ? 1 : Previous < Next ? -1 : 0;\r\n\t};\r\n}\r\n","import * as real from './real';\r\nimport * as mock from './mock';\r\nimport { getEntryPointUrl } from '../../utils/helpers';\r\nimport axios, { AxiosRequestConfig } from 'axios';\r\n\r\nexport enum Environment {\r\n\tPROD = 'PROD',\r\n\tDEV = 'DEV',\r\n}\r\nconst isProd = process.env.REACT_APP_ENVIRONMENT === Environment.PROD;\r\nconst isMock = process.env.REACT_APP_USE_MOCK_DATA === 'true';\r\nconst publicUrl = process.env.PUBLIC_URL;\r\n\r\naxios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\r\naxios.interceptors.request.use(function (config: AxiosRequestConfig) {\r\n\tconst { url } = config;\r\n\r\n\t// make sure to prefix url as needed\r\n\tconfig = {\r\n\t\t...config,\r\n\t\turl: isProd && isMock ? publicUrl + url : url,\r\n\t}\r\n\treturn config;\r\n}, function (error) {\r\n\tconsole.error('The following HTTP request error occured: ', error);\r\n\treturn Promise.reject(error);\r\n});\r\n\r\naxios.interceptors.response.use(function (response) {\r\n\treturn response;\r\n\r\n}, function (error: any) {\r\n\tconsole.log('logging error response', error);\r\n\r\n\tif ([401, 403].includes(+error.response.status as number)) {\r\n\t\twindow.location.replace(window.location.origin + \"/Account/Login?ReturnUrl=\" + \"/main\"); // it would be better to use window.location.pathname here, but some pages crash\r\n\t}\r\n\r\n\tconsole.log('A server error occured with the following signature:', error);\r\n\treturn Promise.reject(error);\r\n});\r\n\r\nconst data = process.env.REACT_APP_USE_MOCK_DATA === 'true' ? mock : real;\r\n\r\nexport default data;\r\n","import axios, { AxiosPromise, AxiosRequestConfig } from \"axios\";\r\nimport { MotorcycleModelResponse } from \"../../components/main/motorcycles/MotorcycleView\";\r\nimport { VehicleOverviewResponse } from \"../../components/main/overview/Overview\";\r\nimport { TogglePartResponse } from \"../../components/parts/PartsList\";\r\nimport { CreateConfigurationResponse } from \"../../components/configuration/ConfigurationView\";\r\nimport {\r\n\tgetConfigurationId,\r\n\tgetLocaleQuery,\r\n\tgetCulture\r\n} from \"../../utils/helpers\";\r\nimport uuid from \"uuid\";\r\nimport { SaveDetailsData } from \"../../components/dialogs/saveConfiguration\";\r\nimport { ExportConfigurationValueNames } from \"../../components/dialogs/exportConfiguration\";\r\nimport { LoadConfigurationResponse } from \"../../redux/reducers/load\";\r\nimport { HistoryResponseItem } from \"../../components/main/history/HistoryView\";\r\n\r\nexport interface AddPartPayload {\r\n\tPartId: string;\r\n\tSelectedParts: string[];\r\n\tRemoveParts: string[];\r\n}\r\n\r\nexport interface RemovePartPayload {\r\n\tPartId: string;\r\n\tRemoveParts: string[];\r\n}\r\n\r\nexport function getModels(): AxiosPromise {\r\n\treturn axios.get(\r\n\t\t`/api/posconfigurator/vehicles${getLocaleQuery()}`\r\n\t);\r\n}\r\n\r\nexport function getOverview(\r\n\tmodelId: string\r\n): AxiosPromise {\r\n\treturn axios.get(\r\n\t\t`/api/posconfigurator/vehicles/${modelId}${getLocaleQuery()}`\r\n\t);\r\n}\r\n\r\nexport function addPart(\r\n\tpayload: string | AddPartPayload\r\n): AxiosPromise {\r\n\tlet data: AddPartPayload;\r\n\r\n\tif (typeof payload === \"string\") {\r\n\t\tdata = {\r\n\t\t\tPartId: payload,\r\n\t\t\tSelectedParts: [],\r\n\t\t\tRemoveParts: []\r\n\t\t};\r\n\t} else {\r\n\t\tdata = { ...payload };\r\n\t}\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${getConfigurationId()}/add-part${getLocaleQuery()}`,\r\n\t\tdata\r\n\t);\r\n}\r\n\r\nexport function removePart(\r\n\tpayload: string | RemovePartPayload\r\n): AxiosPromise {\r\n\tlet data: RemovePartPayload;\r\n\tif (typeof payload === \"string\") {\r\n\t\tdata = {\r\n\t\t\tPartId: payload,\r\n\t\t\tRemoveParts: []\r\n\t\t};\r\n\t} else {\r\n\t\tdata = { ...payload };\r\n\t}\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${getConfigurationId()}/remove-part${getLocaleQuery()}`,\r\n\t\tdata\r\n\t);\r\n}\r\n\r\nexport function createConfiguration(\r\n\tmodelId: string\r\n): AxiosPromise {\r\n\tconst data = {\r\n\t\tModelId: modelId\r\n\t};\r\n\tconst config: AxiosRequestConfig = {\r\n\t\theaders: {\r\n\t\t\tAnonymousID: uuid.v4()\r\n\t\t}\r\n\t};\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/create${getLocaleQuery()}`,\r\n\t\tdata,\r\n\t\tconfig\r\n\t);\r\n}\r\n\r\nexport function deleteConfiguration(\r\n\tid: number | undefined = undefined\r\n): AxiosPromise {\r\n\tconsole.log(\"configuration reset request sent\");\r\n\tid = id || getConfigurationId();\r\n\treturn axios.delete(\r\n\t\t`/api/posconfigurator/configuration/${id}${getLocaleQuery()}`\r\n\t);\r\n}\r\n\r\nexport function dismissUnsavedChanges(\r\n\tid: number | undefined = undefined\r\n): AxiosPromise {\r\n\tconsole.log(\"configuration reset request sent\");\r\n\tid = id || getConfigurationId();\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${id}/dismiss-unsaved-changes${getLocaleQuery()}`\r\n\t);\r\n}\r\n\r\nexport function saveConfiguration(\r\n\tdata: SaveDetailsData,\r\n\tsaveAsNew: boolean\r\n): AxiosPromise {\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${getConfigurationId()}/save-configuration${getLocaleQuery()}`,\r\n\t\t{ ...data, SaveAsNew: saveAsNew }\r\n\t);\r\n}\r\n\r\nexport function sendExport(\r\n\tdata: ExportConfigurationValueNames\r\n): AxiosPromise {\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${getConfigurationId()}/send-export${getLocaleQuery()}`,\r\n\t\tdata\r\n\t);\r\n}\r\n\r\nexport function sendPdfSummary(email: string): AxiosPromise {\r\n\treturn axios.post(\r\n\t\t`/api/posconfigurator/configuration/${getConfigurationId()}/send${getLocaleQuery()}`,\r\n\t\t{\r\n\t\t\tEmail: email,\r\n\t\t\tCultureName: getCulture()\r\n\t\t}\r\n\t);\r\n}\r\n\r\nexport function getConfiguration(\r\n\tconfigId: number\r\n): AxiosPromise {\r\n\treturn axios.get(\r\n\t\t`/api/posconfigurator/configuration/${configId}${getLocaleQuery()}`\r\n\t);\r\n}\r\n\r\nexport function getHistory(): AxiosPromise {\r\n\treturn axios.get(\r\n\t\t`/api/posconfigurator/dealer/history${getLocaleQuery()}`\r\n\t);\r\n}\r\n","import i18n from \"i18next\";\r\nimport { reactI18nextModule } from \"react-i18next\";\r\nimport translationEN from './locales/en/translation.json';\r\nimport translationDE from './locales/de/translation.json';\r\nimport translationFR from './locales/fr/translation.json';\r\nimport translationES from './locales/es/translation.json';\r\nimport translationIT from './locales/it/translation.json';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\n\r\nexport enum Languages {\r\n en = 'en',\r\n de = 'de',\r\n fr = 'fr',\r\n es = 'es',\r\n it = 'it'\r\n}\r\n\r\nconst resources: { [index in Languages]: any } = {\r\n en: {\r\n translation: translationEN,\r\n },\r\n de: {\r\n translation: translationDE,\r\n },\r\n fr: {\r\n translation: translationFR,\r\n },\r\n es: {\r\n translation: translationES,\r\n },\r\n it: {\r\n translation: translationIT,\r\n },\r\n};\r\n\r\nconst detectorOptions = {\r\n order: ['querystring'],\r\n lookupQuerystring: 'culture',\r\n}\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(reactI18nextModule)\r\n .init({\r\n resources,\r\n fallbackLng: \"en\",\r\n\r\n interpolation: {\r\n escapeValue: false\r\n },\r\n detection: detectorOptions,\r\n })\r\n\r\nexport default i18n;","import React from \"react\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport store from \"../../redux/store\";\r\nimport { exitVehicleConfiguration } from \"../../redux/actions\";\r\nimport http from \"../../services/http\";\r\nimport FadeInLetters from \"../shared/FadeInLetters\";\r\n\r\nexport const WarnBeforeExit: React.FunctionComponent = ({ title, hideDialog, t, data }) => {\r\n\tconst handleConfigurationExit = () => {\r\n\t\tconsole.log(\"reseting configuration\");\r\n\r\n\t\t// Since configurations are stored in the database when starting the configuration\r\n\t\t// we need to delete from the database again if the user decides to leave without saving.\r\n\t\thttp.dismissUnsavedChanges().then(() => {\r\n\t\t\tconsole.log(\"configuration reset\");\r\n\t\t});\r\n\r\n\t\tstore.dispatch(exitVehicleConfiguration());\r\n\t};\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t{data}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(WarnBeforeExit);\r\n","import React from 'react'\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Clear from '@material-ui/icons/Clear';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { DialogProps } from './dialogRouter';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport FadeInLetters from '../shared/FadeInLetters';\r\n\r\nexport type DeleteConfigurationProps = DialogProps<\r\n\t{ text: string, deleteAndReloadHistory: (id: number) => void, id: number }\r\n> & WithNamespaces\r\n\r\nexport const DeleteConfiguration: React.FunctionComponent = (\r\n\t{\r\n\t\ttitle,\r\n\t\thideDialog,\r\n\t\tt,\r\n\t\tdata: {\r\n\t\t\ttext,\r\n\t\t\tdeleteAndReloadHistory,\r\n\t\t\tid,\r\n\t\t}\r\n\t}\r\n) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{text}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default withNamespaces()(DeleteConfiguration);\r\n","import React from 'react';\r\nimport { Price } from '../components/main/motorcycles/MotorcycleView';\r\nimport { getCulture } from './helpers';\r\nimport { store } from '../redux/store';\r\nimport { getPriceAvailability } from '../redux/selectors';\r\n\r\nexport default class Formatter extends React.Component {\r\n\r\n\tstatic currency(price: Price) {\r\n\t\tconst pricesAreAvailable = getPriceAvailability(store.getState());\r\n\t\tif (!price || !pricesAreAvailable) return null;\r\n\t\tconst formattedNumber = price.CurrencySymbol + ' ' + price.Value.toLocaleString(navigator.language, { minimumFractionDigits: 2 });\r\n\t\treturn formattedNumber;\r\n\t}\r\n\r\n\tstatic toDateLocaleString(timeStamp: number) {\r\n\t\tconst options = { date: 'number', year: 'numeric', month: 'numeric', day: 'numeric' };\r\n\t\treturn new Date(timeStamp).toLocaleDateString(getCulture(), options);\r\n\t}\r\n}\r\n","import { AxiosResponse, AxiosRequestConfig } from \"axios\";\r\nimport http from \"../../services/http\";\r\nimport { Store as AppState } from \"../reducers\";\r\nimport { ThunkDispatch, ThunkAction } from \"redux-thunk\";\r\nimport { TogglePartResponse } from \"../../components/parts/PartsList\";\r\nimport {\r\n\tConflictingPartErrorResponse,\r\n\taddPartPayload$,\r\n\tselectedPartIds$,\r\n\tinitialValue as streamFalseValue\r\n} from \"../../components/dialogs/conflictingParts\";\r\nimport {\r\n\tapplyParts,\r\n\tsetConfigurationImages,\r\n\taddPrice,\r\n\tsetImageTimestamp,\r\n\tshowDialog,\r\n\thideDialog,\r\n\tsetConfigurationIsDirty\r\n} from \"../actions\";\r\nimport { DialogTypes } from \"../../enums/dialogTypes\";\r\nimport {} from \"react-i18next\";\r\nimport { AddPartPayload } from \"../../services/http/real\";\r\nimport i18n from \"../../i18n\";\r\nimport { toastMessage, getPartById } from \"../../utils/helpers\";\r\nimport Action from \"../reducers/models/action\";\r\n\r\n// implement custom error interface to support data types\r\nexport interface CustormAxiosError {\r\n\tconfig: AxiosRequestConfig;\r\n\trequest: any;\r\n\tresponse: AxiosResponse;\r\n}\r\n\r\nexport default function addPart(\r\n\tpayload: string | AddPartPayload\r\n): ThunkAction, AppState, {}, Action> {\r\n\treturn function(dispatch: ThunkDispatch) {\r\n\t\treturn http\r\n\t\t\t.addPart(payload)\r\n\t\t\t.then(function addPartOnSuccess(\r\n\t\t\t\tresponse: AxiosResponse\r\n\t\t\t) {\r\n\t\t\t\tdispatch(applyParts(response.data.PartIds));\r\n\t\t\t\tdispatch(setConfigurationImages(response.data.FullImages));\r\n\t\t\t\tdispatch(addPrice(response.data.Price));\r\n\t\t\t\tdispatch(hideDialog());\r\n\t\t\t\tdispatch(setConfigurationIsDirty(true));\r\n\t\t\t\tconst partId = typeof payload === \"string\" ? payload : payload.PartId;\r\n\t\t\t\tif (getPartById(partId).CanBeRendered) {\r\n\t\t\t\t\t// force image reload\r\n\t\t\t\t\tdispatch(setImageTimestamp());\r\n\t\t\t\t\ttoastMessage(i18n.t(\"toasts.partAdded\"));\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttoastMessage(\r\n\t\t\t\t\t\t`${i18n.t(\"toasts.partAdded\")} (${i18n.t(\r\n\t\t\t\t\t\t\t\"configuration.parts.notVisualized\"\r\n\t\t\t\t\t\t)})`\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\t// reset streams\r\n\t\t\t\taddPartPayload$.next(streamFalseValue);\r\n\t\t\t\tselectedPartIds$.next(streamFalseValue);\r\n\t\t\t})\r\n\t\t\t.catch(function handeErrorResponse(\r\n\t\t\t\terror: CustormAxiosError\r\n\t\t\t) {\r\n\t\t\t\tif (error.response.status === 400) {\r\n\t\t\t\t\tconst { data } = error.response;\r\n\t\t\t\t\tif (data.InvalidInputMessage) {\r\n\t\t\t\t\t\tconsole.error(\"A rule exception occured on the server\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdispatch(\r\n\t\t\t\t\t\tshowDialog({\r\n\t\t\t\t\t\t\tcontentType: DialogTypes.conflictWhileAddPart,\r\n\t\t\t\t\t\t\tdata,\r\n\t\t\t\t\t\t\ttitle: \"\"\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// assumes error code 500\r\n\t\t\t\tconsole.log(\"Server responded with status code 500\");\r\n\t\t\t});\r\n\t};\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport format from \"../../utils/formatter\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { Price } from '../main/motorcycles/MotorcycleView';\r\nimport { AddPartPayload } from \"../../services/http/real\";\r\nimport store from '../../redux/store';\r\nimport addPartAsync from '../../redux/async-actions/addPart';\r\nimport i18n from '../../i18n';\r\nimport Done from '@material-ui/icons/Done';\r\nimport { getPartById } from \"../../utils/helpers\";\r\nimport FadeInLetters from '../shared/FadeInLetters';\r\n\r\nexport interface ConflictingPartErrorResponse {\r\n\tValidationResultType: number; // 0 invalid input, 1 rule exception\r\n\tInvalidInputMessage?: any; // if defined show error in a diferrent toast\r\n\tRulesResult: RulesResult;\r\n}\r\n\r\nexport interface RulesResult {\r\n\tRuleType: RuleTypes;\r\n\tPart: ResponsePart;\r\n\tParts: ResponsePart[];\r\n\tChoosePart: boolean;\r\n}\r\n\r\nexport enum RuleTypes {\r\n\tRequired = 1,\r\n\tConflicting = 0,\r\n}\r\n\r\nexport interface ResponsePart {\r\n\tCode: string;\r\n\tTitle: string;\r\n\tPrice: Price;\r\n\tPreviewImageId: number;\r\n\tPreviewImage: string;\r\n}\r\n\r\nexport interface RequiredPartsProps {\r\n\trule: RulesResult;\r\n\tdeleteRule?: true;\r\n\r\n}\r\n\r\nexport interface ConflictingPartsProps {\r\n\trule: RulesResult;\r\n}\r\n\r\nexport interface RequiredSelectablePartsProps {\r\n\trule: RulesResult;\r\n\tpartKey: string;\r\n}\r\n\r\ntype selectedPartIdsType = { [key: string]: string };\r\n\r\nexport const initialValue = false;\r\n\r\nexport const selectedPartIds$ = new BehaviorSubject(initialValue);\r\n\r\nexport const addPartPayload$ = new BehaviorSubject(initialValue);\r\n\r\nexport const ConflictingParts: React.FunctionComponent & WithNamespaces> = ({ hideDialog, t, data }) => {\r\n\r\n\t// @todo add or remove selector\r\n\tconst removeParts: boolean = data.RulesResult.RuleType === 0;\r\n\tconst title = t(`dialogs.conflictingParts.${removeParts ? \"conflicting\" : \"required\"}.title`);\r\n\tconst { Part: { Code } } = data.RulesResult;\r\n\r\n\t//use effect to subscribe and unsubsrcibe observable of selectable required parts\r\n\tuseEffect(() => {\r\n\r\n\t\t// subscribe to the required streams\r\n\t\tconst partIdsSub = selectedPartIds$.subscribe();\r\n\r\n\t\t// when this stream emits send values to the server\r\n\t\tconst partPayloadSub = addPartPayload$\r\n\t\t\t.pipe(filter((val): val is AddPartPayload => !!val))\r\n\t\t\t.subscribe(val => {\r\n\t\t\t\tstore.dispatch(addPartAsync(val) as any);\r\n\t\t\t});\r\n\r\n\t\treturn function cleanup() {\r\n\t\t\t// values in this stream need reset during unmounting\r\n\t\t\tselectedPartIds$.next(initialValue);\r\n\r\n\t\t\t// cancel subscriptions\r\n\t\t\tpartIdsSub.unsubscribe();\r\n\t\t\tpartPayloadSub.unsubscribe();\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst addPart = () => {\r\n\t\t// initialize the value of the payload with the value of observable (when not false) or the default\r\n\t\tlet payload: AddPartPayload = addPartPayload$.getValue() || {\r\n\t\t\tPartId: Code,\r\n\t\t\tSelectedParts: [],\r\n\t\t\tRemoveParts: [],\r\n\t\t}\r\n\r\n\t\tif (data.RulesResult.RuleType === RuleTypes.Required) {\r\n\t\t\t// get all required selectable parts from the last value of the stream\r\n\t\t\tconst selectedRequiredValues = selectedPartIds$.getValue();\r\n\r\n\t\t\t// if required selectable parts are not falsy add them otherwise provide empty array\r\n\t\t\tconst requiredSelectedPartIds = selectedRequiredValues ? getRequiredPartsIds(selectedRequiredValues) : [];\r\n\r\n\t\t\t// if required non selectable parts are inside rules result add them otherwise provide empty array\r\n\t\t\tconst requiredPreselectedIds = !data.RulesResult.ChoosePart ? getPartsIdsFromRulesResult(data.RulesResult) : [];\r\n\r\n\t\t\t// accumulates: required preselected, required selected and previously selected parts\r\n\t\t\tconst SelectedParts = requiredPreselectedIds\r\n\t\t\t\t.concat(requiredSelectedPartIds)\r\n\t\t\t\t.concat(payload.SelectedParts)\r\n\t\t\t\t.filter((value, index, self) => self.indexOf(value) === index) // Contained duplicated Part codes which caused bug KPC-248; TODO: is most efficient solution?\r\n\t\t\t\t;\r\n\r\n\t\t\tif (SelectedParts.length) {\r\n\t\t\t\tpayload = {\r\n\t\t\t\t\t...payload,\r\n\t\t\t\t\tSelectedParts,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// assumes RuleType.Conflicting\r\n\r\n\t\t\t// combines Remove part ids from this call and the previous one if any\r\n\t\t\tconst RemoveParts = getPartsIdsFromRulesResult(data.RulesResult).concat(payload.RemoveParts);\r\n\t\t\tif (RemoveParts.length) {\r\n\t\t\t\tpayload = {\r\n\t\t\t\t\t...payload,\r\n\t\t\t\t\tRemoveParts,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// emit next value to trigger server call\r\n\t\taddPartPayload$.next(payload);\r\n\t};\r\n\r\n\tconst closeDialog = () => {\r\n\t\t// when user chooses to close dialog reset streams\r\n\t\taddPartPayload$.next(initialValue);\r\n\t\tselectedPartIds$.next(initialValue);\r\n\t\thideDialog();\r\n\t}\r\n\r\n\tconst ConflictingContent = withNamespaces()(ConflictingPartsContent);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport const ConflictingPartsContent: React.FunctionComponent = ({ RulesResult, t }) => {\r\n\tconst remove = RulesResult.RuleType === RuleTypes.Conflicting;\r\n\treturn (\r\n\t\tremove ? \r\n\t\t\t: \r\n\t)\r\n}\r\n\r\nexport const RequiredParts: React.FunctionComponent = ({ rule, deleteRule }) => {\r\n\tconst { Part: { Title, PreviewImage, Price } } = rule;\r\n\tconst { ChoosePart: isSelectable } = rule;\r\n\tconst selectable = <>\r\n\t\t{i18n.t(\"dialogs.conflictingParts.required.selectRequired\")}\r\n\t\t\r\n\t;\r\n\r\n\tconst nonSelectable = <>\r\n\t\t{i18n.t(`dialogs.conflictingParts.required.${deleteRule ? 'delete' : 'requiredNonSelectable'}`)}\r\n\t\t\r\n\t\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

{Title}

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{format.currency(Price)}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{isSelectable ? selectable : nonSelectable}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport const RequiredSelectableParts: React.FunctionComponent = ({ rule, partKey }) => {\r\n\tconst { Parts } = rule;\r\n\tconst [{ Code }] = Parts;\r\n\tconst [selected, setSelected] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tselectedPartIds$.next({ [partKey]: Code });\r\n\t\tconst subscription = selectedPartIds$.subscribe((value) => {\r\n\t\t\t// when stream emits make sure to refresh component\r\n\t\t\tsetSelected((value as selectedPartIdsType)[partKey]);\r\n\t\t})\r\n\t\treturn function cleanup() {\r\n\t\t\t// unsubscribe on component destruction\r\n\t\t\tsubscription.unsubscribe()\r\n\t\t}\r\n\t}, [partKey, Code]);\r\n\r\n\tconst selectPart = (Code: string) => {\r\n\t\tconst values = selectedPartIds$.getValue();\r\n\t\tselectedPartIds$.next({\r\n\t\t\t...values,\r\n\t\t\t[partKey]: Code,\r\n\t\t});\r\n\t}\r\n\r\n\tconst partsInGrid = Parts.map(({ PreviewImage, Title, Price, Code }: ResponsePart, idx: number) => {\r\n\t\tconst higlighted = Code === selected;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

{Title}

\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{format.currency(Price)}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t)\r\n\t})\r\n\r\n\treturn <>{partsInGrid};\r\n}\r\n\r\nexport const RequiredNonSelectableParts: React.FunctionComponent<{ parts: ResponsePart[] }> = ({ parts }) => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{parts.map((part: ResponsePart, idx: number) => {\r\n\t\t\t\tconst { PreviewImage, Title, Price } = part;\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\"part\"\r\n\t\t\t\t\t\r\n\t\t\t\t\t

{Title}

\r\n\t\t\t\t\t{format.currency(Price)}\r\n\t\t\t\t
\r\n\t\t\t\t)\r\n\t\t\t})}\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport default withNamespaces()(ConflictingParts);\r\n\r\nexport const PartsToRemove: React.FunctionComponent = ({ rule }) => {\r\n\t//old parts\r\n\tconst { Parts }: RulesResult = rule;\r\n\r\n\t// the part to replace old parts\r\n\tconst { Part } = rule;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t{Parts.map((part: ResponsePart, idx: number) => )}\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport interface ReplacePartsProps {\r\n\tpart: ResponsePart;\r\n\treplacing: boolean;\r\n}\r\n\r\nexport const ReplacePart: React.FunctionComponent = ({ part: { Title, PreviewImage, Price, Code }, replacing }) => {\r\n\tconst message = i18n.t(`dialogs.conflictingParts.conflicting.${replacing ? 'replaceBy' : 'currentlySelected'}`);\r\n\treturn (\r\n\t\t\r\n\t\t\t
{message}
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\"part\"\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t

{Title}

\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{format.currency(Price ? Price : getPartById(Code).Price)}\r\n\t\t\t\r\n\t\t
\r\n\t)\r\n}\r\n\r\nfunction getPartsIdsFromRulesResult(rulesResult: RulesResult): string[] {\r\n\treturn rulesResult.Parts.reduce((acc: string[], part: ResponsePart) => [...acc, part.Code], []);\r\n}\r\n\r\nfunction getRequiredPartsIds(selectedRequiredValues: selectedPartIdsType | false) {\r\n\tif (!selectedRequiredValues) {\r\n\t\treturn [];\r\n\t}\r\n\treturn Object\r\n\t\t.keys(selectedRequiredValues)\r\n\t\t.reduce((acc: string[], selectionKeys: string) => [...acc, selectedRequiredValues[selectionKeys]], []);\r\n}\r\n","import { AxiosResponse, AxiosRequestConfig } from \"axios\";\r\nimport http from \"../../services/http\";\r\nimport { Store as appState } from \"../reducers\";\r\nimport { ThunkDispatch, ThunkAction } from \"redux-thunk\";\r\nimport { TogglePartResponse } from \"../../components/parts/PartsList\";\r\nimport { ConflictingPartErrorResponse } from \"../../components/dialogs/conflictingParts\";\r\nimport {\r\n\tapplyParts,\r\n\tsetConfigurationImages,\r\n\taddPrice,\r\n\tsetImageTimestamp,\r\n\tshowDialog,\r\n\thideDialog,\r\n\tsetConfigurationIsDirty\r\n} from \"../actions\";\r\nimport { DialogTypes } from \"../../enums/dialogTypes\";\r\nimport {} from \"react-i18next\";\r\nimport { RemovePartPayload } from \"../../services/http/real\";\r\nimport i18n from \"../../i18n\";\r\nimport { toastMessage } from \"../../utils/helpers\";\r\n\r\n// implement custom error interface to support data types\r\nexport interface CustormAxiosError {\r\n\tconfig: AxiosRequestConfig;\r\n\trequest: any;\r\n\tresponse: AxiosResponse;\r\n}\r\n\r\nexport default function addPart(\r\n\tpayload: RemovePartPayload | string\r\n): ThunkAction, appState, {}, any> {\r\n\treturn function(dispatch: ThunkDispatch) {\r\n\t\treturn http\r\n\t\t\t.removePart(payload)\r\n\t\t\t.then(function addPartOnSuccess(\r\n\t\t\t\tresponse: AxiosResponse\r\n\t\t\t) {\r\n\t\t\t\tdispatch(applyParts(response.data.PartIds));\r\n\t\t\t\tdispatch(setConfigurationImages(response.data.FullImages));\r\n\t\t\t\tdispatch(addPrice(response.data.Price));\r\n\t\t\t\tdispatch(setImageTimestamp());\r\n\t\t\t\ttoastMessage(i18n.t(\"configuration.parts.toastPartRemoved\"));\r\n\t\t\t\tdispatch(hideDialog());\r\n\t\t\t\tdispatch(setConfigurationIsDirty(true));\r\n\t\t\t})\r\n\t\t\t.catch(function handeErrorResponse(\r\n\t\t\t\terror: CustormAxiosError\r\n\t\t\t) {\r\n\t\t\t\tif (error.response.status === 400) {\r\n\t\t\t\t\tconst { data } = error.response;\r\n\t\t\t\t\tif (data.InvalidInputMessage) {\r\n\t\t\t\t\t\tconsole.error(\"A rule exception occured on the server\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdispatch(\r\n\t\t\t\t\t\tshowDialog({\r\n\t\t\t\t\t\t\tcontentType: DialogTypes.removeConflictingPart,\r\n\t\t\t\t\t\t\tdata,\r\n\t\t\t\t\t\t\ttitle: i18n.t(\"dialogs.conflictingParts.required.delete-title\")\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// assumes error code 500\r\n\t\t\t\tconsole.log(\"Server responded with status code 500\");\r\n\t\t\t});\r\n\t};\r\n}\r\n","import React from \"react\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport { RequiredParts, ConflictingPartErrorResponse } from './conflictingParts';\r\nimport { RemovePartPayload } from \"../../services/http/real\";\r\nimport store from '../../redux/store';\r\nimport removePartAsync from '../../redux/async-actions/removePart';\r\nimport FadeInLetters from \"../shared/FadeInLetters\";\r\n\r\nconst RemoveConflictingParts: React.FunctionComponent & WithNamespaces> = ({ hideDialog, t, data, title }) => {\r\n\tconst rulesResult = data.RulesResult;\r\n\tconst removePart = () => {\r\n\t\tconst payload: RemovePartPayload = {\r\n\t\t\tPartId: rulesResult.Part.Code,\r\n\t\t\tRemoveParts: rulesResult.Parts.map((part) => part.Code),\r\n\t\t}\r\n\t\tstore.dispatch(removePartAsync(payload) as any);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport default withNamespaces()(RemoveConflictingParts);\r\n","export interface FormControlState {\r\n\tvalue: V;\r\n\tpristine: boolean;\r\n\tvalidators: Validators;\r\n\trequired: boolean;\r\n\tname: string;\r\n}\r\n\r\nexport type Validator = (value: FormControlState) => boolean;\r\n\r\nexport type Validators = (DefaultValidators | string)[];\r\n\r\nexport type ValidatorType = { [key: string]: Validator };\r\n\r\nexport function createControl(name: string, value: any, validators: Validators = [], required = false): FormControlState {\r\n\treturn { name, value, validators, required, pristine: true };\r\n}\r\n\r\nexport enum DefaultValidators {\r\n\tnotEmpty = 'notEmpty',\r\n\temail = 'email',\r\n}\r\n\r\ntype SetStateType = React.Dispatch>;\r\n\r\nconst defaultValidators: ValidatorType = {\r\n\t[DefaultValidators.notEmpty]: (control: FormControlState) => {\r\n\t\treturn !!control.value.trim().length;\r\n\t},\r\n\t[DefaultValidators.email]: (control: FormControlState) => {\r\n\t\t// eslint-disable-next-line\r\n\t\tconst pattern = /^(([^<>()\\[\\]\\\\.,;:\\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,}))$/i;\r\n\t\treturn !!control.value.match(pattern);\r\n\t},\r\n}\r\n\r\nexport class FormManager {\r\n\tprivate validators: ValidatorType = { ...defaultValidators };\r\n\tprivate controls: { [key: string]: FormControlState } = {};\r\n\tprivate controlSetters: { [key: string]: SetStateType } = {};\r\n\tprivate touched = false;\r\n\r\n\tconstructor(customValidators: ValidatorType = {}) {\r\n\t\tthis.validators = { ...this.validators, ...customValidators };\r\n\t}\r\n\r\n\tpublic addValidator(validator: ValidatorType) {\r\n\t\tthis.validators = { ...this.validators, ...validator };\r\n\t}\r\n\r\n\tpublic addAllControls(controls: Array<[FormControlState, SetStateType]>) {\r\n\t\tcontrols.forEach(\r\n\t\t\t([control, setControl]: [FormControlState, SetStateType]) => {\r\n\t\t\t\tthis.addControl(control);\r\n\t\t\t\tthis.addControlSetter({ [control.name]: setControl });\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n\r\n\tpublic get formIsValid(): boolean {\r\n\t\treturn Object.keys(this.controls).every((name: string) => {\r\n\t\t\tconst control = this.controls[name];\r\n\t\t\tif (!control.required || control.validators.length === 0) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn this._controlIsValid(control);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic touchControls(controls: FormControlState[] = []) {\r\n\t\t// touch only selected otherwise all controls\r\n\t\tconst controlNames = !controls.length ? Object.keys(this.controls) : controls.map(control => control.name);\r\n\t\tcontrolNames.forEach((name) => this.controlSetters[name]({ ...this.controls[name], pristine: false }));\r\n\t\tthis.touched = true;\r\n\t}\r\n\r\n\tpublic controlIsValid(control: FormControlState): boolean {\r\n\t\treturn this._controlIsValid(this.controls[control.name]);\r\n\r\n\t}\r\n\r\n\tpublic getHashValues(): T {\r\n\t\treturn Object\r\n\t\t\t.keys(this.controls)\r\n\t\t\t.reduce((acc, formName) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...acc,\r\n\t\t\t\t\t[formName]: this.controls[formName].value,\r\n\t\t\t\t}\r\n\t\t\t}, {} as T);\r\n\r\n\t}\r\n\r\n\tpublic get formIsTouched() {\r\n\t\treturn this.touched;\r\n\t}\r\n\r\n\tpublic reset() {\r\n\t\tthis.touched = false;\r\n\t}\r\n\r\n\tprivate addControlSetter(controlSetter: { [key: string]: SetStateType }) {\r\n\t\tthis.controlSetters = {\r\n\t\t\t...this.controlSetters,\r\n\t\t\t...controlSetter\r\n\t\t};\r\n\t}\r\n\r\n\tprivate addControl(control: FormControlState) {\r\n\t\tthis.controls = {\r\n\t\t\t...this.controls,\r\n\t\t\t[control.name]: control\r\n\t\t};\r\n\t}\r\n\r\n\tprivate _controlIsValid(control: FormControlState): boolean {\r\n\t\treturn control.validators.every((validatorKey: string) => {\r\n\t\t\tif (!(this.validators as Object).hasOwnProperty(validatorKey)) {\r\n\t\t\t\tthrow new Error(`A validator with key: ${validatorKey} does not exist in FormManager validators!`);\r\n\t\t\t}\r\n\t\t\treturn this.validators[validatorKey](control);\r\n\t\t});\r\n\t}\r\n}\r\n","import React, { FormEvent, useEffect, useState, SyntheticEvent } from \"react\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport {\r\n\tFormManager,\r\n\tcreateControl,\r\n\tFormControlState,\r\n\tDefaultValidators as Validators\r\n} from \"../../utils/FormManager\";\r\nimport http from \"../../services/http\";\r\nimport { AxiosResponse, AxiosError } from \"axios\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { toastMessage, getPreservedSaveDetailsData } from \"../../utils/helpers\";\r\nimport Action from \"../../redux/reducers/models/action\";\r\nimport store from \"../../redux/store\";\r\nimport {\r\n\tpreserveSaveDetailsData,\r\n\tsetConfigurationWasRecentlyCreated,\r\n\tsetConfigurationIsDirty\r\n} from \"../../redux/actions\";\r\nimport FadeInLetters from \"../shared/FadeInLetters\";\r\n\r\nexport interface SaveDetailsData {\r\n\tVin: string;\r\n\tOrderNumber: string;\r\n\tFirstname: string;\r\n\tLastname: string;\r\n\tComment: string;\r\n}\r\n\r\nexport enum SavingState {\r\n\tnone = \"none\",\r\n\tsending = \"sending\",\r\n\tsuccess = \"success\",\r\n\terror = \"error\"\r\n}\r\n\r\ntype SubmitButtonType = \"default\" | \"save-new\";\r\n\r\nexport interface SaveConfigurationProps {\r\n\tsetConfigurationId: (id: number) => Action;\r\n\tconfigurationWasRecentlyCreated: boolean;\r\n}\r\n\r\nconst VinControl = createControl(\"Vin\", \"\");\r\nconst OrderNumberControl = createControl(\"OrderNumber\", \"\");\r\nconst FirstNameControl = createControl(\r\n\t\"Firstname\",\r\n\t\"\",\r\n\t[Validators.notEmpty],\r\n\ttrue\r\n);\r\nconst LastNameControl = createControl(\r\n\t\"Lastname\",\r\n\t\"\",\r\n\t[Validators.notEmpty],\r\n\ttrue\r\n);\r\nconst CommentControl = createControl(\"Comment\", \"\");\r\nconst formManager = new FormManager();\r\n\r\nexport const SaveConfiguration: React.FunctionComponent<\r\n\tSaveConfigurationProps & DialogProps & WithNamespaces\r\n> = ({\r\n\ttitle,\r\n\thideDialog,\r\n\tt,\r\n\tsetConfigurationId,\r\n\tconfigurationWasRecentlyCreated\r\n}) => {\r\n\tconst [vin, setVin] = useState(VinControl);\r\n\tconst [orderNumber, setOrderNumber] = useState(\r\n\t\tOrderNumberControl\r\n\t);\r\n\tconst [firstName, setFirstName] = useState(\r\n\t\tFirstNameControl\r\n\t);\r\n\tconst [lastName, setLastName] = useState(LastNameControl);\r\n\tconst [comment, setComment] = useState(CommentControl);\r\n\tconst [submitButtonSavingState, setSubmitButtonSavingState] = useState<\r\n\t\tSavingState\r\n\t>(SavingState.none);\r\n\tconst [saveNewButtonSavingState, setSaveNewButtonSavingState] = useState<\r\n\t\tSavingState\r\n\t>(SavingState.none);\r\n\tconst [error, setError] = useState(\"\");\r\n\tconst {\r\n\t\tVin: preservedVin,\r\n\t\tOrderNumber: preservedOrderNumber,\r\n\t\tFirstname: preservedFirstname,\r\n\t\tLastname: preservedLastname,\r\n\t\tComment: preservedComment\r\n\t} = getPreservedSaveDetailsData();\r\n\r\n\t// load form control values from redux store\r\n\tuseEffect(() => {\r\n\t\tsetVin({ ...vin, value: preservedVin });\r\n\t\tsetOrderNumber({ ...orderNumber, value: preservedOrderNumber });\r\n\t\tsetFirstName({ ...firstName, value: preservedFirstname });\r\n\t\tsetLastName({ ...lastName, value: preservedLastname });\r\n\t\tsetComment({ ...comment, value: preservedComment });\r\n\t\t// eslint-disable-next-line\r\n\t}, []);\r\n\r\n\t// make sure to sync controls on every render\r\n\tformManager.addAllControls([\r\n\t\t[vin, setVin],\r\n\t\t[orderNumber, setOrderNumber],\r\n\t\t[firstName, setFirstName],\r\n\t\t[lastName, setLastName],\r\n\t\t[comment, setComment]\r\n\t]);\r\n\r\n\tconst isFormDirty = () =>\r\n\t\tvin.value !== preservedVin ||\r\n\t\torderNumber.value !== preservedOrderNumber ||\r\n\t\tfirstName.value !== preservedFirstname ||\r\n\t\tlastName.value !== preservedLastname ||\r\n\t\tcomment.value !== preservedComment;\r\n\r\n\tconst handleSubmit = (e: FormEvent, saveAsNew: boolean = false) => {\r\n\t\te.preventDefault();\r\n\r\n\t\tif (!formManager.formIsValid) {\r\n\t\t\tformManager.touchControls();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//inform UI and send request\r\n\t\tsetButtonSavingState(\r\n\t\t\tsaveAsNew ? \"save-new\" : \"default\",\r\n\t\t\tSavingState.sending\r\n\t\t);\r\n\r\n\t\tconst values = formManager.getHashValues>();\r\n\r\n\t\tstore.dispatch(\r\n\t\t\tpreserveSaveDetailsData({\r\n\t\t\t\t...values,\r\n\t\t\t\tVin: values.Vin || \"\",\r\n\t\t\t\tOrderNumber: values.OrderNumber || \"\"\r\n\t\t\t} as SaveDetailsData)\r\n\t\t);\r\n\r\n\t\thttp\r\n\t\t\t.saveConfiguration(values, saveAsNew)\r\n\t\t\t.then((response: AxiosResponse<{ ConfigurationId: number }>) => {\r\n\t\t\t\tsetButtonSavingState(\r\n\t\t\t\t\tsaveAsNew ? \"save-new\" : \"default\",\r\n\t\t\t\t\tSavingState.success\r\n\t\t\t\t);\r\n\t\t\t\tsetConfigurationId(response.data.ConfigurationId);\r\n\t\t\t\thideDialog();\r\n\t\t\t\ttoastMessage(t(\"toasts.configurationSaved\"));\r\n\t\t\t\tformManager.reset();\r\n\t\t\t\tstore.dispatch(setConfigurationWasRecentlyCreated(false));\r\n\t\t\t\tstore.dispatch(setConfigurationIsDirty(false));\r\n\t\t\t})\r\n\t\t\t.catch((error: AxiosError) => {\r\n\t\t\t\t// this assumes network error\r\n\t\t\t\tif (!error.response) {\r\n\t\t\t\t\tsetError(t(\"errors.networkError\"));\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// show error message if available\r\n\t\t\t\t\tif (error.response.data && error.response.data.Message) {\r\n\t\t\t\t\t\tsetError(error.response.data.Message);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// log error if nothing else applies\r\n\t\t\t\t\t\tconsole.log(\"Error\", error);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// show the retry button\r\n\t\t\t\tsetButtonSavingState(\r\n\t\t\t\t\tsaveAsNew ? \"save-new\" : \"default\",\r\n\t\t\t\t\tSavingState.error\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst setButtonSavingState = (\r\n\t\tbuttonType: SubmitButtonType,\r\n\t\tstate: SavingState\r\n\t) =>\r\n\t\tbuttonType === \"save-new\"\r\n\t\t\t? setSaveNewButtonSavingState(state)\r\n\t\t\t: setSubmitButtonSavingState(state);\r\n\r\n\tconst getButtonContentFromSavingState = (\r\n\t\tstate: SavingState,\r\n\t\tbuttonType: SubmitButtonType\r\n\t) => {\r\n\t\tswitch (state) {\r\n\t\t\tcase SavingState.none:\r\n\t\t\t\treturn buttonType === \"save-new\"\r\n\t\t\t\t\t? t(\"buttons.save-as-new\")\r\n\t\t\t\t\t: t(\"buttons.submit\");\r\n\t\t\tcase SavingState.sending:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t);\r\n\t\t\tcase SavingState.success:\r\n\t\t\t\treturn t(\"buttons.success\");\r\n\t\t\tcase SavingState.error:\r\n\t\t\t\treturn t(\"buttons.retry\");\r\n\t\t\tdefault:\r\n\t\t\t\treturn buttonType === \"save-new\"\r\n\t\t\t\t\t? t(\"buttons.save-as-new\")\r\n\t\t\t\t\t: t(\"buttons.submit\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst onDialogClose = () => {\r\n\t\tformManager.reset();\r\n\t\thideDialog();\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
handleSubmit(e)} noValidate>\r\n\t\t\t\t
\r\n\t\t\t\t\t{formManager.formIsTouched && !formManager.formIsValid && (\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t{t(\"errors.saveConfigurationErrorsMsg\")}\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{submitButtonSavingState === SavingState.error && (\r\n\t\t\t\t\t\t

{error}

\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetVin({ ...vin, value, pristine: false })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetOrderNumber({ ...orderNumber, value, pristine: false })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetFirstName({ ...firstName, value, pristine: false })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={\r\n\t\t\t\t\t\t\t!firstName.pristine &&\r\n\t\t\t\t\t\t\t!formManager.controlIsValid(FirstNameControl)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thelperText={t(\"errors.required\")}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetLastName({ ...lastName, value, pristine: false })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={\r\n\t\t\t\t\t\t\t!lastName.pristine && !formManager.controlIsValid(LastNameControl)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thelperText={t(\"errors.required\")}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetComment({ ...comment, value, pristine: false })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{!configurationWasRecentlyCreated && (\r\n\t\t\t\t\t\t handleSubmit(e, true)}\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclassName=\"secondary\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{getButtonContentFromSavingState(\r\n\t\t\t\t\t\t\t\tsaveNewButtonSavingState,\r\n\t\t\t\t\t\t\t\t\"save-new\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{getButtonContentFromSavingState(\r\n\t\t\t\t\t\t\tsubmitButtonSavingState,\r\n\t\t\t\t\t\t\t\"default\"\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(SaveConfiguration);\r\n","export enum TransitionState {\r\n\tEnter = 'Enter',\r\n\tExit = 'Exit',\r\n\tNone = 'None',\r\n}\r\n","import React, { FormEvent, useState, useEffect } from \"react\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport http from \"../../services/http\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport {\r\n\tFormManager,\r\n\tFormControlState,\r\n\tcreateControl,\r\n\tDefaultValidators as Validators\r\n} from \"../../utils/FormManager\";\r\nimport {\r\n\tgetPreservedSaveDetailsData,\r\n\ttoastMessage,\r\n\tgetConfigurationId,\r\n\tgetLocaleQuery\r\n} from \"../../utils/helpers\";\r\nimport store from \"../../redux/store\";\r\nimport { preserveSaveDetailsData } from \"../../redux/actions\";\r\nimport FadeInLetters from \"../shared/FadeInLetters\";\r\nimport { SaveDetailsData } from \"./saveConfiguration\";\r\n\r\nconst firstnameControl = createControl(\r\n\t\"Firstname\",\r\n\t\"\",\r\n\t[Validators.notEmpty],\r\n\ttrue\r\n);\r\nconst lastnameControl = createControl(\r\n\t\"Lastname\",\r\n\t\"\",\r\n\t[Validators.notEmpty],\r\n\ttrue\r\n);\r\nconst commentControl = createControl(\"Comment\", \"\");\r\nconst emailControl = createControl(\"Email\", \"@\", [Validators.email], true);\r\nconst formManager = new FormManager();\r\n\r\nexport interface ExportConfigurationValueNames {\r\n\tFirstname: string;\r\n\tLastname: string;\r\n\tComment: string;\r\n\tEmail: string;\r\n}\r\n\r\nexport const ExportConfiguration: React.FunctionComponent<\r\n\tDialogProps & WithNamespaces\r\n> = ({ title, hideDialog, t }) => {\r\n\t// intialize state\r\n\tconst [firstname, setFirstname] = useState(\r\n\t\tfirstnameControl\r\n\t);\r\n\tconst [lastname, setLastname] = useState(lastnameControl);\r\n\tconst [comment, setComment] = useState(commentControl);\r\n\tconst [email, setEmail] = useState(emailControl);\r\n\r\n\t// load form control values from redux store\r\n\tuseEffect(() => {\r\n\t\tconst {\r\n\t\t\tFirstname: preservedName,\r\n\t\t\tLastname: preservedSurName,\r\n\t\t\tComment: preservedComment\r\n\t\t} = getPreservedSaveDetailsData();\r\n\r\n\t\tsetFirstname({ ...firstname, value: preservedName });\r\n\t\tsetLastname({ ...lastname, value: preservedSurName });\r\n\t\tsetComment({ ...comment, value: preservedComment });\r\n\t\t// eslint-disable-next-line\r\n\t}, []);\r\n\r\n\tconst saveCustomerData = (values: ExportConfigurationValueNames) => {\r\n\t\tconst { Vin, OrderNumber } = getPreservedSaveDetailsData();\r\n\r\n\t\tstore.dispatch(\r\n\t\t\tpreserveSaveDetailsData({\r\n\t\t\t\t...values,\r\n\t\t\t\tVin,\r\n\t\t\t\tOrderNumber\r\n\t\t\t} as SaveDetailsData)\r\n\t\t);\r\n\t};\r\n\r\n\tconst customerNameIsInvalid = () =>\r\n\t\t!formManager.controlIsValid(firstnameControl) ||\r\n\t\t!formManager.controlIsValid(lastnameControl);\r\n\r\n\tconst getDownloadProps = () => {\r\n\t\tif (customerNameIsInvalid()) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tconst values = formManager.getHashValues();\r\n\t\tconst firstname = encodeURIComponent(values.Firstname);\r\n\t\tconst lastname = encodeURIComponent(values.Lastname);\r\n\t\tconst comment = encodeURIComponent(values.Comment);\r\n\t\tconst href = `/api/posconfigurator/configuration/${getConfigurationId()}/export${getLocaleQuery()}&firstname=${firstname}&lastname=${lastname}&comment=${comment}`;\r\n\t\treturn { href };\r\n\t};\r\n\r\n\tconst handleSend = (e: FormEvent) => {\r\n\t\te.preventDefault();\r\n\r\n\t\tif (!formManager.formIsValid) {\r\n\t\t\tformManager.touchControls();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst values = formManager.getHashValues();\r\n\r\n\t\tsaveCustomerData(values);\r\n\r\n\t\thttp\r\n\t\t\t.sendExport(values)\r\n\t\t\t.then(() => {\r\n\t\t\t\ttoastMessage(t(\"toasts.exportSent\"));\r\n\r\n\t\t\t\thideDialog();\r\n\t\t\t})\r\n\t\t\t.catch(error => console.log(`an error occured: ${error}.`));\r\n\t};\r\n\r\n\tconst saveAndClose = () => {\r\n\t\tsaveCustomerData(\r\n\t\t\tformManager.getHashValues()\r\n\t\t);\r\n\t\thideDialog();\r\n\t};\r\n\r\n\t// update controls on every render\r\n\tformManager.addAllControls([\r\n\t\t[firstname, setFirstname],\r\n\t\t[lastname, setLastname],\r\n\t\t[comment, setComment],\r\n\t\t[email, setEmail]\r\n\t]);\r\n\r\n\tconst emailError =\r\n\t\t!email.pristine && !formManager.controlIsValid(emailControl);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetFirstname({ ...firstname, value })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={\r\n\t\t\t\t\t\t\t!firstname.pristine &&\r\n\t\t\t\t\t\t\t!formManager.controlIsValid(firstnameControl)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thelperText={t(\"errors.required\")}\r\n\t\t\t\t\t\tautoFocus\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetLastname({ ...lastname, value })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={\r\n\t\t\t\t\t\t\t!lastname.pristine && !formManager.controlIsValid(lastnameControl)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thelperText={t(\"errors.required\")}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\tsetComment({ ...comment, value })\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\tmultiline\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t setEmail({ ...email, value })}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={emailError}\r\n\t\t\t\t\t\thelperText={emailError ? t(\"errors.invalidEmail\") : \"\"}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{t(\"buttons.download\")}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(ExportConfiguration);\r\n","import React, { useState, useEffect } from 'react';\r\n\r\ntype DotType = 1 | 2 | 3 | 4 | 5;\r\n\r\nexport const DotsLoader: React.FunctionComponent<{}> = () => {\r\n const [value, setValue] = useState(1);\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n setValue((value) => value === 5 ? 1 : ++value as DotType);\r\n }, 1000);\r\n return () => {\r\n clearInterval(timer);\r\n }\r\n }, []);\r\n\r\n const style: React.CSSProperties = {\r\n display: 'inline-block',\r\n width: '20px',\r\n textAlign: 'left',\r\n };\r\n console.log('value:', value);\r\n\r\n return (\r\n {new Array(value).fill('item').map((item, idx) => .)}\r\n )\r\n}\r\n\r\nexport default DotsLoader;","import React, { FormEvent, useState } from \"react\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Clear from \"@material-ui/icons/Clear\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport DialogActions from \"@material-ui/core/DialogActions\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { DialogProps } from \"./dialogRouter\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport http from \"../../services/http\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport {\r\n\tFormManager,\r\n\tFormControlState,\r\n\tcreateControl,\r\n\tDefaultValidators as Validators\r\n} from \"../../utils/FormManager\";\r\nimport { toastMessage } from \"../../utils/helpers\";\r\nimport DotsLoader from \"../shared/DotsLoader\";\r\nimport FadeInLetters from \"../shared/FadeInLetters\";\r\n\r\nconst EmailControl = createControl(\"Email\", \"@\", [Validators.email], true);\r\nconst formManager = new FormManager();\r\n\r\nexport const ShareConfiguration: React.FunctionComponent<\r\n\tDialogProps & WithNamespaces\r\n> = ({ title, hideDialog, t }) => {\r\n\tconst [email, setEmail] = useState(EmailControl);\r\n\tconst [error, setError] = useState(false);\r\n\tconst [generating, setGenerating] = useState(false);\r\n\r\n\tconst handleSubmit = (e: FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (!formManager.formIsValid) {\r\n\t\t\tformManager.touchControls();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetGenerating(true);\r\n\r\n\t\thttp\r\n\t\t\t.sendPdfSummary(email.value)\r\n\t\t\t.then(() => {\r\n\t\t\t\tsetGenerating(false);\r\n\t\t\t\ttoastMessage(t(\"toasts.summarySent\"));\r\n\t\t\t\thideDialog();\r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\tsetGenerating(false);\r\n\t\t\t\tsetError(true);\r\n\t\t\t\tconsole.log(`an error occured: ${error}.`);\r\n\t\t\t});\r\n\t};\r\n\r\n\t// update controls on every render\r\n\tformManager.addAllControls([[email, setEmail]]);\r\n\r\n\tconst emailError =\r\n\t\t!email.pristine && !formManager.controlIsValid(EmailControl);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t

{t(\"errors.sendingEmail\")}

\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t setEmail({ ...email, value })}\r\n\t\t\t\t\t\tmargin=\"normal\"\r\n\t\t\t\t\t\trequired={true}\r\n\t\t\t\t\t\terror={emailError}\r\n\t\t\t\t\t\thelperText={emailError ? t(\"errors.invalidEmail\") : \"\"}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{t(`buttons.${generating ? \"generating\" : \"send\"}`)}\r\n\t\t\t\t\t\t{generating && }\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(ShareConfiguration);\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { DialogTypes } from \"../../enums/dialogTypes\";\r\nimport SetupPartsDialog from \"./setupParts\";\r\nimport {\r\n\tmapStateToProps,\r\n\tmapDispatchToProps,\r\n\tStateManagementProps\r\n} from \"../../utils/addReduxProps\";\r\nimport { DialogState } from \"../../redux/reducers/modals\";\r\nimport Action from \"../../redux/reducers/models/action\";\r\nimport WarnBeforeExit from \"./warnBeforeExit\";\r\nimport DeleteConfiguration from \"./deleteConfiguration\";\r\nimport ConflictingParts from \"./conflictingParts\";\r\nimport RemoveConflictingParts from \"./removeConflictingParts\";\r\nimport \"./dialog.scss\";\r\nimport SaveConfiguration from \"./saveConfiguration\";\r\n\r\nimport ExportConfiguration from \"./exportConfiguration\";\r\nimport ShareConfiguration from \"./shareConfiguration\";\r\n\r\nexport interface DialogProps extends DialogState {\r\n\thideDialog: () => Action;\r\n}\r\n\r\nexport const defaultMessage = \"Something went wrong, we are working on it.\";\r\n\r\nexport class DialogRouter extends React.Component {\r\n\trenderDialog() {\r\n\t\tconst { contentType } = this.props.dialogState;\r\n\t\tconst props: DialogProps = {\r\n\t\t\t...this.props.dialogState,\r\n\t\t\thideDialog: this.props.hideDialog\r\n\t\t};\r\n\r\n\t\tswitch (contentType) {\r\n\t\t\tcase DialogTypes.setupParts:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.warnBeforeExit:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.deleteConfiguraion:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.conflictWhileAddPart:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.removeConflictingPart:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.saveConfiguration:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\tcase DialogTypes.exportConfiguration:\r\n\t\t\t\treturn ;\r\n\t\t\tcase DialogTypes.shareConfiguration:\r\n\t\t\t\treturn ;\r\n\t\t\tdefault:\r\n\t\t\t\treturn
{defaultMessage}
;\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (!this.props.dialogState.isOpen) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.renderDialog();\r\n\t}\r\n}\r\n\r\nexport default connect(\r\n\tmapStateToProps,\r\n\tmapDispatchToProps\r\n)(DialogRouter);\r\n","import React from 'react';\r\nimport formatter from '../../utils/formatter';\r\nimport { withStyles, WithStyles, Theme } from '@material-ui/core/styles';\r\nimport { Setup } from '../setups/SetupsList';\r\nimport { VehicleInformation, Price } from '../main/motorcycles/MotorcycleView';\r\nimport { Part } from '../parts/PartsList';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport _ from 'lodash';\r\n\r\nexport interface VehicleSummaryProps {\r\n\tappliedSetup: Setup | undefined;\r\n\tappliedParts: Part[];\r\n\tmodel: VehicleInformation;\r\n\ttotalPrice: Price;\r\n\thasPrices: boolean;\r\n}\r\n\r\nexport const classes = (theme: Theme) => {\r\n\treturn {\r\n\t\tpriceClass: {\r\n\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\tfontSize: '1.5em',\r\n\t\t\tdisplay: 'inline' as \"inline\",\r\n\t\t},\r\n\t\tname: {\r\n\t\t\tcolor: 'white',\r\n\t\t\tfontSize: 35,\r\n\t\t\tlineHeight: '50px',\r\n\t\t},\r\n\t\taddOnCountBackground: {\r\n\t\t\tdisplay: 'inline-block',\r\n\t\t\tbackground: theme.palette.primary.main,\r\n\t\t\tborderRadius: '50%',\r\n\t\t\twidth: '26px',\r\n\t\t\tlineHeight: '26px',\r\n\t\t\tfontSize: '22px',\r\n\t\t\ttextAlign: 'center' as \"center\",\r\n\t\t\tcolor: 'white',\r\n\t\t\tmarginLeft: '1em',\r\n\t\t\tmarginRight: '0.5em',\r\n\t\t\tposition: 'relative' as \"relative\",\r\n\t\t\ttop: '-2px'\r\n\r\n\t\t},\r\n\t\taddOn: {\r\n\t\t\tcolor: 'white',\r\n\t\t\ttextTransform: 'initial' as \"initial\",\r\n\t\t\tfontSize: 'smaller' as \"smaller\",\r\n\t\t},\r\n\t\taddOnsWrapper: {\r\n\t\t\tdisplay: 'inline-block',\r\n\t\t},\r\n\t\tcount: {\r\n\t\t\tposition: 'relative' as \"relative\",\r\n\t\t\ttop: '1px',\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\nexport const VehicleSummary: React.FunctionComponent = props => {\r\n\tconst { appliedParts, model, t, totalPrice, hasPrices } = props;\r\n\tconst { priceClass, addOnCountBackground, addOn, name, addOnsWrapper, count } = props.classes;\r\n\tconst addOnCountStyles: Record = {\r\n\t\tstyle: hasPrices ? {} : { marginLeft: 'initial' }\r\n\t}\r\n\r\n\tconst uniqueAppliedParts = _.uniqBy(appliedParts, 'PartId')\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{/* REVERT WHEN SETUPS ARE ACTIVE */}\r\n\t\t\t\t{/* {appliedSetup && */}\r\n\t\t\t\t{true &&\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{hasPrices && {t('configurationDetail.total')} {true /*appliedSetup*/ && formatter.currency(totalPrice)}}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{uniqueAppliedParts.length}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{t('configurationDetail.addOns')}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t

}\r\n\t\t\t\t\r\n\t\t\t\t\t

{model.Name}

\r\n\t\t\t\t\t
{props.children}
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default withNamespaces()(withStyles(classes)(VehicleSummary));\r\n","export default {\r\n grayBackground: '#454545',\r\n darkBackground: '#151515',\r\n black: '#000000',\r\n white: '#ffffff',\r\n darkGrey: '#878787',\r\n mediumGreyOne: '#C6C6C6',\r\n mediumGreyTwho: '#D0D0D0',\r\n lightGrey: '#ECECEC',\r\n ktmFreerideEBlue: '#00A1E4',\r\n orangeGradientTop: '#FF6600',\r\n orangeGradientBottom: '#FF1500',\r\n ktmFreerideEBlueGradientTop: '#00BEEC',\r\n ktmFreerideEBlueGradientBottom: '#0082DB',\r\n}","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { mapDispatchToProps, mapStateToProps, StateManagementProps } from '../../utils/addReduxProps';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Swipeable from 'react-swipeable';\r\nimport { WithNamespaces, withNamespaces } from 'react-i18next';\r\nimport Colors from '../../utils/colors';\r\nimport { FullImage } from '../configuration/ConfigurationView';\r\nimport ArrowRight from '@material-ui/icons/ArrowRightAlt';\r\nexport interface VehicleImageProps {\r\n\tuseDarkFont?: boolean;\r\n\timageClassName?: string;\r\n\tarrowStyle?: object;\r\n}\r\n\r\nexport interface VehicleImageState {\r\n\tloading: boolean;\r\n\terror: boolean;\r\n}\r\n\r\nexport type VehicleImageAllprops = VehicleImageProps & StateManagementProps & WithNamespaces;\r\n\r\nexport class VehicleImage extends React.Component {\r\n\r\n\tprivate readonly perspectives = [0, 1, 2];\r\n\r\n\tprivate imageStamp: number;\r\n\r\n\tconstructor(props: VehicleImageAllprops) {\r\n\t\tsuper(props);\r\n\t\tthis.state = { error: false, loading: true };\r\n\t\tthis.imageStamp = props.imageTimestamp;\r\n\t}\r\n\r\n\r\n\tcomponentDidMount() {\r\n\t\t!this.imageIsCached(this.getImageSrc()) && this.setState({ loading: true });\r\n\t}\r\n\r\n\tcomponentDidUpdate() {\r\n\t\tif (this.imageStamp !== this.props.imageTimestamp) {\r\n\t\t\tthis.imageStamp = this.props.imageTimestamp;\r\n\t\t\tthis.setState({ loading: true });\r\n\t\t}\r\n\t}\r\n\r\n\thandleSwipe(change: number) {\r\n\t\tlet newPosition: number;\r\n\t\tthis.imageStamp = Date.now();\r\n\t\tconst min = Math.min(...this.perspectives);\r\n\t\tconst max = Math.max(...this.perspectives);\r\n\t\tconst newValue = this.props.perspective + change;\r\n\t\tnewPosition = newValue < min ? max : newValue > max ? min : newValue;\r\n\t\tthis.props.setPerspective(newPosition);\r\n\t\tthis.setState({ loading: true });\r\n\t\tconsole.log(newPosition);\r\n\t}\r\n\r\n\thandleImageLoad() {\r\n\t\tthis.setState({ loading: false });\r\n\t}\r\n\r\n\thandleImageError() {\r\n\t\tthis.setState({ error: true });\r\n\t}\r\n\r\n\tprivate imageIsCached(src: string) {\r\n\t\tvar image = new Image();\r\n\t\timage.src = src;\r\n\t\treturn image.complete;\r\n\t}\r\n\r\n\tprivate getImageSrc() {\r\n\t\treturn `${this.getImageBase()}&stamp=${this.props.imageTimestamp}`\r\n\t}\r\n\r\n\tgetHeroImage() {\r\n\t\treturn `${this.props.selectedModel.Hero.ImageUrl}`\r\n\t}\r\n\r\n\tprivate getImageBase() {\r\n\t\treturn this.props.configuration.FullImages.find((image: FullImage) => {\r\n\t\t\treturn image.Perspective === this.props.perspective\r\n\t\t})!.Url\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tconst { t } = this.props;\r\n\t\tconst mainColor = this.props.useDarkFont ? Colors.black : Colors.white\r\n\t\tconst fontColor = { color: mainColor };\r\n\t\tconst arrowMainColor = {\r\n\t\t\t...fontColor,\r\n\t\t\tborderColor: mainColor,\r\n\r\n\t\t}\r\n\t\tconst arrowStyle = this.props.arrowStyle || {};\r\n\t\tconst imageStyle: React.CSSProperties = {\r\n\t\t\tbackgroundImage: `url(${this.getImageSrc()})`,\r\n\t\t\tbackgroundSize: 'contain',\r\n\t\t\tbackgroundRepeat: 'no-repeat',\r\n\t\t\twidth: '100%',\r\n\t\t\tbackgroundPosition: 'center',\r\n\t\t}\r\n\r\n\t\tconst vehicleImage = \r\n\r\n\t\tconst loader =\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{t('vehicleImage.loaderText')}\r\n\t\t\t\r\n\t\tconst error =
\r\n\t\t\t\"error\"\r\n\t\t\t
Oops! Something went wrong while loading the image...
\r\n\t\t
\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{!this.state.loading &&
\r\n\t\t\t\t\t
this.handleSwipe(-1)} id=\"left-arrow-wrapper\" style={arrowMainColor} className=\"arrow-wrapper clickable\">\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
}\r\n\t\t\t\t this.handleSwipe(1)}\r\n\t\t\t\t\tonSwipedRight={() => this.handleSwipe(-1)}>\r\n\t\t\t\t\t{this.state.loading && !this.state.error && loader}\r\n\t\t\t\t\t{this.state.loading && this.state.error && error}\r\n\t\t\t\t\t{vehicleImage}\r\n\t\t\t\t\r\n\t\t\t\t{!this.state.loading &&
\r\n\t\t\t\t\t
this.handleSwipe(1)} id=\"right-arrow-wrapper\" style={arrowMainColor} className=\"arrow-wrapper clickable\">\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport default withNamespaces()((connect(mapStateToProps, mapDispatchToProps)(VehicleImage)));\r\n","import React from 'react';\r\nimport { Part } from './PartsList';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Info from '@material-ui/icons/Info';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport format from '../../utils/formatter';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport NoPartPreviewIcon from '@material-ui/icons/VisibilityOffOutlined';\r\n\r\nexport interface PartProps {\r\n\tpart: Part\r\n\tfade: boolean;\r\n\ttogglePart: (part: Part) => void;\r\n\tisIncluded: boolean,\r\n\tshowDialog: (part: Part) => void;\r\n\tselectedFromSummary: boolean;\r\n}\r\n\r\nexport const PartItem: React.FunctionComponent = (props) => {\r\n\r\n\tconst { part, part: { CanBeRendered, Racing, PartId }, t, fade, togglePart, isIncluded, showDialog, selectedFromSummary: selected } = props;\r\n\tconst faded = fade ? 'faded' : '';\r\n\tconst partImageStyle: React.CSSProperties = {\r\n\t\tbackground: `url(${part.Images.Main})`,\r\n\t\tbackgroundSize: 'contain',\r\n\t\tbackgroundRepeat: 'no-repeat',\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{part.Name.toUpperCase()}\r\n\t\t\t\t\t\t{Racing && \r\n\t\t\t\t\t\t\t{t('configuration.summary.ece')}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t{!CanBeRendered && }\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

{part.PartId}

\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
{format.currency(part.Price)}
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(PartItem);\r\n","import React from 'react';\r\nexport const CategoryName: React.FunctionComponent<{ text: string }> = ({ text }) => {\r\n\treturn !text.includes('/') ? <>{text} : <>{text.replace(/\\//g, ' / ')}\r\n}\r\n\r\nexport default CategoryName;\r\n","import React from \"react\";\r\nimport { Price } from \"../main/motorcycles/MotorcycleView\";\r\nimport Part, { PartProps } from \"./Part\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n\tmapStateToProps,\r\n\tStateManagementProps,\r\n\tmapDispatchToProps\r\n} from \"../../utils/addReduxProps\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport \"./parts.scss\";\r\nimport { sortAscendingByProperty } from \"../../utils/helpers\";\r\nimport { FullImage } from \"../configuration/ConfigurationView\";\r\nimport { WithNamespaces, withNamespaces } from \"react-i18next\";\r\nimport addPart from '../../redux/async-actions/addPart';\r\nimport removePartAsync from '../../redux/async-actions/removePart';\r\nimport store from '../../redux/store';\r\nimport CategoryName from '../shared/CategoryName';\r\nimport { Subscription } from \"rxjs\";\r\nimport { TransitionState } from \"../../enums/transitionStates\";\r\nimport { TranstitonStateValue } from '../../App';\r\nimport { distinctUntilChanged, filter } from \"rxjs/operators\";\r\n\r\nexport interface Part {\r\n\tPartId: string;\r\n\tName: string;\r\n\tPrice: Price;\r\n\tRacing: boolean;\r\n\tDescription: html;\r\n\tImages: PartImages;\r\n\tCategoryName: string;\r\n\tApprovalInfo: string;\r\n\tCanBeRendered: boolean;\r\n}\r\n\r\n\r\n// final don't touch\r\nexport interface TogglePartResponse {\r\n\tPrice: Price;\r\n\tPartIds: string[];\r\n\tFullImages: FullImage[];\r\n}\r\n\r\nexport interface Rule {\r\n\tRuleType: number;\r\n\tPart: Part;\r\n}\r\n\r\nexport interface PartImages {\r\n\tMain: url;\r\n\tOther: url[];\r\n}\r\n\r\ntype html = string;\r\ntype url = string;\r\n\r\n\r\nexport enum PartAction {\r\n\tApply = \"Apply\",\r\n\tRemove = \"Remove\"\r\n}\r\n\r\nexport type PartListAllProps =\r\n\tRouteComponentProps<{ categoryId: string }> &\r\n\tStateManagementProps &\r\n\tWithNamespaces;\r\n\r\nexport interface PartListState { }\r\n\r\nexport class PartList extends React.Component {\r\n\tsub: Subscription | undefined = undefined;\r\n\tconstructor(props: PartListAllProps) {\r\n\t\tsuper(props);\r\n\t\tthis.togglePart = this.togglePart.bind(this);\r\n\t\tthis.addPart = this.addPart.bind(this);\r\n\t\tthis.removePart = this.removePart.bind(this);\r\n\t\tthis.showDialog = this.showDialog.bind(this);\r\n\t}\r\n\r\n\ttogglePart(part: Part) {\r\n\t\tthis.props.appliedParts.includes(part)\r\n\t\t\t? this.removePart(part)\r\n\t\t\t: this.addPart(part);\r\n\t}\r\n\r\n\taddPart(part: Part) {\r\n\t\tstore.dispatch(addPart(part.PartId) as any);\r\n\r\n\t}\r\n\tremovePart(part: Part) {\r\n\t\tstore.dispatch(removePartAsync(part.PartId) as any);\r\n\t}\r\n\r\n\tshowDialog(part: Part) {\r\n\t\tthis.props.selectPart(part);\r\n\t\tthis.props.togglePartDetail(true);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tif (this.props.location.hash) {\r\n\t\t\tthis.sub = TranstitonStateValue.pipe(\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\tfilter((item: TransitionState) => item === TransitionState.Exit),\r\n\t\t\t).subscribe(() => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t// @todo find better solution (investigate why refs not working ok)\r\n\t\t\t\t\tconst el = document.getElementById(this.props.location.hash.substring(1))\r\n\t\t\t\t\tif (el) {\r\n\t\t\t\t\t\tel.scrollIntoView();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis.sub && this.sub.unsubscribe();\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tparts,\r\n\t\t\tselectedPart,\r\n\t\t\tappliedParts,\r\n\t\t\tcategories,\r\n\t\t\tmatch: {\r\n\t\t\t\tparams: { categoryId },\r\n\t\t\t},\r\n\t\t\tlocation: {\r\n\t\t\t\thash,\r\n\t\t\t}\r\n\t\t} = this.props;\r\n\t\tconst categoryName = categories[+categoryId];\r\n\t\tconst categoryParts = parts.filter(\r\n\t\t\t(part: Part) => part.CategoryName === categoryName\r\n\t\t);\r\n\t\tif (!categoryParts) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{categoryParts\r\n\t\t\t\t\t\t.sort(sortAscendingByProperty>('Name'))\r\n\t\t\t\t\t\t.map((part: Part, index: number) => {\r\n\t\t\t\t\t\t\tlet props: PartProps = {\r\n\t\t\t\t\t\t\t\tisIncluded: appliedParts.includes(part),\r\n\t\t\t\t\t\t\t\ttogglePart: this.togglePart,\r\n\t\t\t\t\t\t\t\tpart: part,\r\n\t\t\t\t\t\t\t\tselectedFromSummary: false,\r\n\t\t\t\t\t\t\t\tshowDialog: this.showDialog,\r\n\t\t\t\t\t\t\t\tfade: \"PartId\" in selectedPart && !Object.is(part, selectedPart)\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tif (hash && part.PartId === hash.substring(1)) {\r\n\t\t\t\t\t\t\t\tprops = {\r\n\t\t\t\t\t\t\t\t\t...props,\r\n\t\t\t\t\t\t\t\t\tselectedFromSummary: true,\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn ;\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withNamespaces()(\r\n\tconnect(\r\n\t\tmapStateToProps,\r\n\t\tmapDispatchToProps\r\n\t)(PartList)\r\n);\r\n","import React from \"react\";\r\nimport { Part, PartAction } from \"./PartsList\";\r\nimport Action from \"../../redux/reducers/models/action\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Close from \"@material-ui/icons/Close\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\nimport format from \"../../utils/formatter\";\r\nimport { FullImage } from \"../configuration/ConfigurationView\";\r\nimport store from \"../../redux/store\";\r\nimport addPartAction from '../../redux/async-actions/addPart';\r\nimport removePartAsync from '../../redux/async-actions/removePart';\r\n\r\nexport interface PartDetailDialogProps {\r\n\tselectedPart: Part;\r\n\tcloseDialog: () => void;\r\n\tapplyParts: (parts: string[]) => Action;\r\n\tsetImageTimestamp: () => Action;\r\n\tsetConfigurationImages: (images: FullImage[]) => Action;\r\n\tappliedParts: Part[];\r\n}\r\n\r\ntype PartDetailAllProps = PartDetailDialogProps & WithNamespaces;\r\n\r\nexport const PartDetailDialog: React.FunctionComponent = ({\r\n\tt,\r\n\tapplyParts,\r\n\tselectedPart,\r\n\tcloseDialog,\r\n\tappliedParts,\r\n\tsetImageTimestamp,\r\n}) => {\r\n\tconst otherImages = selectedPart.Images.Other;\r\n\tconst allImages = [selectedPart.Images.Main, ...selectedPart.Images.Other];\r\n\tconst partAction = PartAction;\r\n\tconst isIncluded = appliedParts.includes(selectedPart);\r\n\tconst [imageUrl, setImageUrl] = useState(selectedPart.Images.Main);\r\n\tconst [itemAction, setItemAction] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!itemAction) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst addPart = (part: Part) => {\r\n\t\t\tstore.dispatch(addPartAction(part.PartId) as any);\r\n\t\t};\r\n\t\tconst removePart = (part: Part) => {\r\n\t\t\tstore.dispatch(removePartAsync(part.PartId) as any);\r\n\t\t};\r\n\t\tconst operation = {\r\n\t\t\t[partAction.Apply]: addPart.bind(null, selectedPart, false),\r\n\t\t\t[partAction.Remove]: removePart.bind(null, selectedPart, false),\r\n\t\t};\r\n\r\n\t\toperation[itemAction]();\r\n\t}, [\r\n\t\titemAction,\r\n\t\tapplyParts,\r\n\t\tselectedPart,\r\n\t\tpartAction.Apply,\r\n\t\tpartAction.Remove,\r\n\t\tsetImageTimestamp\r\n\t]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t{selectedPart.Name}\r\n\t\t\t\t\t\t\t{selectedPart.Racing && {t('configuration.summary.ece')}}\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t

{selectedPart.PartId}

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/* main image */}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{/* other images */}\r\n\t\t\t\t\t\t\t{otherImages.length > 0 &&\r\n\t\t\t\t\t\t\t\tallImages.map((url: string, idx: number) => {\r\n\t\t\t\t\t\t\t\t\tconst selected = url === imageUrl ? \"selected\" : \"\";\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t setImageUrl(url)}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={url}\r\n\t\t\t\t\t\t\t\t\t\t\t\talt=\"other\"\r\n\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* description */}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{!!selectedPart.ApprovalInfo && (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t

Approval

{/* TODO: move into language file */}\r\n\t\t\t\t\t\t\t\t\t

{selectedPart.ApprovalInfo}

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{/* price & action */}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{format.currency(selectedPart.Price)}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tsetItemAction(\r\n\t\t\t\t\t\t\t\t\t\t\t\tisIncluded ? partAction.Remove : partAction.Apply\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tclassName={isIncluded ? \"remove\" : \"primary\"}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{isIncluded\r\n\t\t\t\t\t\t\t\t\t\t\t? t(\"configuration.parts.remove\")\r\n\t\t\t\t\t\t\t\t\t\t\t: t(\"configuration.parts.add\")}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(PartDetailDialog);\r\n","import React from 'react'\r\nimport { ToastMessageState } from '../../redux/reducers/toast'\r\n\r\nexport const Toast: React.FunctionComponent = ({ visible, message }) => (\r\n\t

{message.toUpperCase()}

\r\n)\r\n\r\nexport default Toast;\r\n\r\n","import React from 'react'\r\nimport DialogRouter from '../dialogs/dialogRouter';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport VehicleSummary from './VehicleSummary';\r\nimport VehicleImage from './VehicleImage';\r\nimport ShowPreviewIcon from '@material-ui/icons/ZoomOutMap';\r\nimport { Link } from 'react-router-dom';\r\nimport { Location } from 'history';\r\nimport './vehicle-overview.scss';\r\nimport { mapStateToProps, mapDispatchToProps, StateManagementProps } from '../../utils/addReduxProps';\r\nimport { connect } from 'react-redux';\r\nimport PartDetailDialog, { PartDetailDialogProps } from '../parts/PartDetailDialog';\r\nimport Toast from '../shared/Toast';\r\n\r\nexport interface VehicleOverviewProps {\r\n\tlocation: Location;\r\n};\r\n\r\nexport type VehicleOverviewAllProps = VehicleOverviewProps & WithNamespaces & StateManagementProps;\r\n\r\nexport const VehicleOverview: React.FunctionComponent =\r\n\t({\r\n\t\tt,\r\n\t\tselectedModel,\r\n\t\tviews: { showPartDetail },\r\n\t\ttoast,\r\n\t\tappliedSetup,\r\n\t\tapplyParts,\r\n\t\tappliedParts,\r\n\t\tlocation: { pathname },\r\n\t\ttotalPrice,\r\n\t\tmodels,\r\n\t\tsetImageTimestamp,\r\n\t\tselectedPart,\r\n\t\ttogglePartDetail,\r\n\t\ttoggleSummary,\r\n\t\tdeselectPart,\r\n\t\tsetConfigurationImages,\r\n\t}) => {\r\n\r\n\t\tlet Dialog: React.ReactNode;\r\n\r\n\r\n\t\tif (!selectedModel) {\r\n\t\t\t//@todo return page not found\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tif (showPartDetail) {\r\n\t\t\t// show part detail dialog\r\n\t\t\tconst dialogProps: PartDetailDialogProps = {\r\n\t\t\t\tsetImageTimestamp,\r\n\t\t\t\tselectedPart,\r\n\t\t\t\tcloseDialog: () => {\r\n\t\t\t\t\ttogglePartDetail(false);\r\n\t\t\t\t\tdeselectPart();\r\n\t\t\t\t},\r\n\t\t\t\tsetConfigurationImages,\r\n\t\t\t\tapplyParts,\r\n\t\t\t\tappliedParts,\r\n\t\t\t};\r\n\t\t\tDialog = ;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{/* central component section */}\r\n\t\t\t\t\r\n\t\t\t\t\t{showPartDetail ? Dialog : }\r\n\t\t\t\t\r\n\t\t\t\t{/* summary section */}\r\n\t\t\t\t\r\n\t\t\t\t\t{!showPartDetail && \r\n\t\t\t\t\t\t{/* REVERT BUTTON'S DISABLED PROP WHEN SETUPS BECOME ACTIVE */}\r\n\t\t\t\t\t\t{/* disabled={!appliedSetup} */}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{showPartDetail &&
}\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withNamespaces()(VehicleOverview));\r\n","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\n\r\nconst Save: React.FunctionComponent = () => {\r\n return (\r\n \r\n \r\n Save Icon\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Save;","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\nconst CategoryIcon: React.FunctionComponent = () => {\r\n return (\r\n \r\n \r\n Categories Icon\r\n \r\n \r\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 CategoryIcon;","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\n\r\nconst Exit: React.FunctionComponent = () => {\r\n return (\r\n \r\n \r\n Exit Icon\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default Exit;","import React from \"react\";\r\nimport { Grid, withStyles } from \"@material-ui/core\";\r\nimport { WithStyles } from \"@material-ui/core/styles\";\r\nimport { CSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport { WithNamespaces, withNamespaces } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport color from \"../../utils/colors\";\r\nimport SaveIcon from \"../../assets/icons/save\";\r\n// do not remove the following (needed for setups)\r\n// import SetupIcon from '../../assets/icons/trim';\r\nimport CategoriesIcon from \"../../assets/icons/categories\";\r\nimport ExitIcon from \"../../assets/icons/exit\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { RouteComponentProps, useHistory } from \"react-router\";\r\nimport { store } from \"../../redux/store\";\r\nimport { exitVehicleConfiguration } from \"../../redux/actions\";\r\nimport { getConfigurationIsDirty } from \"../../utils/helpers\";\r\nimport http from \"../../services/http\";\r\n\r\nexport interface NavigationProps {\r\n\twarnBeforeExit: () => void;\r\n\tsaveConfiguration: () => void;\r\n}\r\n\r\nconst styles: Record = {\r\n\ttext: {\r\n\t\tfontSize: \"1.3rem\",\r\n\t\tlineHeight: \"60px\",\r\n\t\tverticalAlign: \"middle\"\r\n\t},\r\n\twrapper: {\r\n\t\tpadding: \"0 10px 0 10px\"\r\n\t},\r\n\ticon: {\r\n\t\tposition: \"relative\" as \"relative\",\r\n\t\tleft: -4,\r\n\t\ttop: 2\r\n\t},\r\n\tnavigationWrapper: {\r\n\t\tbackground: color.darkBackground,\r\n\t\tcolor: \"white\"\r\n\t},\r\n\tlink: {\r\n\t\tcolor: \"white\",\r\n\t\ttextDecoration: \"none\",\r\n\t\tmarginRight: \"2.5em\"\r\n\t}\r\n};\r\n\r\ntype NavigationCombinedProps = NavigationProps &\r\n\tWithNamespaces &\r\n\tWithStyles &\r\n\tRouteComponentProps<{ modelId: string }>;\r\n\r\nexport const Navigation: React.FunctionComponent = ({\r\n\tclasses,\r\n\tt,\r\n\tmatch: {\r\n\t\tparams: { modelId }\r\n\t},\r\n\tlocation: { pathname, hash },\r\n\twarnBeforeExit,\r\n\tsaveConfiguration\r\n}) => {\r\n\tconst history = useHistory();\r\n\tconst linkToSetups = `/configuration/${modelId}`;\r\n\tconst linkToCategories = `/configuration/${modelId}/categories`;\r\n\r\n\t// don't show categories link on the setups screen, keep layout\r\n\tconst visibility =\r\n\t\tpathname === linkToSetups\r\n\t\t\t? (\"hidden\" as \"hidden\")\r\n\t\t\t: (\"visible\" as \"visible\");\r\n\r\n\tconst handleConfigurationExitRequest = () => {\r\n\t\tif (getConfigurationIsDirty()) {\r\n\t\t\twarnBeforeExit();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\thttp.dismissUnsavedChanges().then(() => {\r\n\t\t\tconsole.log(\"configuration reset\");\r\n\t\t});\r\n\r\n\t\tstore.dispatch(exitVehicleConfiguration());\r\n\t\thistory.push(\"/main\");\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{/* Not the best solution, but sufficent for now: https://stackoverflow.com/questions/38378258/how-to-dispatch-an-action-when-clicking-on-link-when-using-react-router-redux */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{t(\"navigation.exit\")}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{t(\"navigation.save\")}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{/* TEMPORARILY HIDE SETUPS SECTION */}\r\n\t\t\t\t\t\t\t{/* \r\n {t('navigation.setups')}\r\n */}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{t(\"navigation.categories\")}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default withRouter(\r\n\twithNamespaces()(withStyles(styles)(Navigation)) as any\r\n);\r\n","import React from 'react';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport { withStyles, WithStyles } from '@material-ui/core';\r\nimport { Theme } from '@material-ui/core/styles';\r\nimport color from '../../utils/colors';\r\nimport { Link, RouteComponentProps } from 'react-router-dom';\r\nimport CategoryName from '../shared/CategoryName';\r\n\r\nexport const styles = (theme: Theme) => {\r\n\treturn ({\r\n\t\tlistItem: {\r\n\t\t\tbackground: color.darkBackground,\r\n\t\t\tcolor: theme.palette.primary.main,\r\n\t\t\t'&:hover': {\r\n\t\t\t\tbackground: color.darkBackground,\r\n\t\t\t},\r\n\t\t},\r\n\t\tlist: {\r\n\t\t\tbackground: color.darkBackground,\r\n\t\t\theight: '100%',\r\n\t\t\tpadding: 'initial',\r\n\t\t},\r\n\t\tlistItemText: {\r\n\t\t\tbackground: color.darkBackground,\r\n\t\t\tcolor: 'white',\r\n\t\t\tfontSize: 30,\r\n\t\t\ttextTransform: 'uppercase' as \"uppercase\",\r\n\t\t}\r\n\t});\r\n}\r\n\r\n\r\nexport interface CategoryListProps {\r\n\tsetScrollPosition: () => void\r\n\tcategories: string[];\r\n}\r\n\r\nexport type CategoryListAllProps = CategoryListProps\r\n\t& WithStyles\r\n\t& RouteComponentProps;\r\n\r\nexport const CategoryListComponent: React.FunctionComponent = (\r\n\t{\r\n\t\tcategories,\r\n\t\tclasses,\r\n\t\tlocation: { pathname },\r\n\t\tsetScrollPosition,\r\n\t}\r\n) => {\r\n\r\n\tif (!categories.length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{categories.map((category: string, index: number) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t} />\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default withStyles(styles)(CategoryListComponent);\r\n","import React from 'react';\r\nimport { StateManagementProps } from '../../utils/addReduxProps';\r\nimport { translate, WithNamespaces } from 'react-i18next';\r\nimport formatter from '../../utils/formatter';\r\nimport './ConfigurationSummary.scss';\r\nimport { Grid, } from '@material-ui/core';\r\nimport { Link } from 'react-router-dom';\r\nimport Close from '@material-ui/icons/Close';\r\nimport VehicleImage from '../vehicle-overview/VehicleImage';\r\nimport { Part } from '../parts/PartsList';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { Setup } from '../setups/SetupsList';\r\nimport { ShowDialogProps } from '../../redux/actions';\r\nimport { DialogTypes } from '../../enums/dialogTypes';\r\nimport DialogRouter from '../dialogs/dialogRouter';\r\nimport { sortAscendingByProperty } from '../../utils/helpers';\r\nimport NotVisualizedIcon from '@material-ui/icons/VisibilityOffOutlined';\r\nimport _ from 'lodash';\r\n\r\nexport type ConfigurationSummaryProps = StateManagementProps & WithNamespaces & RouteComponentProps<{ modelId: string }>;\r\n\r\nexport const ConfigurationSummary: React.FunctionComponent = (props) => {\r\n\tconst {\r\n\t\tt,\r\n\t\tappliedSetup,\r\n\t\tselectedModel,\r\n\t\ttotalPrice,\r\n\t\tmodels: { ShowPricesInConfigurator: hasPrices },\r\n\t\tmatch: { params: { modelId } },\r\n\t\tshowDialog, \r\n\t\tcategories\r\n\t} = props;\r\n\tconst hasRacingComponent = props.appliedParts.find(part => part.Racing);\r\n\t// open export dialog\r\n\tconst showExportDialog = () => {\r\n\t\tconst dialogProps: ShowDialogProps = {\r\n\t\t\ttitle: t('dialogs.exportConfiguration.title'),\r\n\t\t\tdata: {},\r\n\t\t\tcontentType: DialogTypes.exportConfiguration,\r\n\t\t}\r\n\t\tshowDialog(dialogProps);\r\n\t}\r\n\r\n\tconst shareConfiguration = () => {\r\n\t\tconst dialogProps: ShowDialogProps = {\r\n\t\t\ttitle: t('dialogs.shareConfiguration.title'),\r\n\t\t\tdata: {},\r\n\t\t\tcontentType: DialogTypes.shareConfiguration,\r\n\t\t}\r\n\t\tshowDialog(dialogProps);\r\n\t}\r\n\r\n\tconst parts = _.uniqBy(props.appliedParts, 'PartId')\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t { props.toggleSummary(false) }} />\r\n\t\t\t\t

{selectedModel.Name}

\r\n\t\t\t\t{hasRacingComponent &&

{t('configuration.summary.racingInfo')}\r\n\t\t\t\t\t \r\n\t\t\t\t{t('configuration.summary.ece')}\r\n\t\t\t\t

}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{appliedSetup &&

{(appliedSetup as Setup).Name}

}\r\n\t\t\t\t\t\t{props.appliedParts.length > 0 &&\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t{t('configuration.summary.powerParts')}\r\n\t\t\t\t\t\t\t\t {t('configuration.summary.addedParts')}\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{parts\r\n\t\t\t\t\t\t\t\t.sort(sortAscendingByProperty>('Name'))\r\n\t\t\t\t\t\t\t\t.map((part: Part, index: number) => {\r\n\t\t\t\t\t\t\t\t\tconst pathToPart = `/configuration/${modelId}/categories/${categories.indexOf(part.CategoryName).toString()}#${part.PartId}`\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\t\t{part.Name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n {part.PartId}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{part.Racing && {t('configuration.summary.ece')}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!part.CanBeRendered && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{formatter.currency(part.Price)}\r\n\t\t\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{hasPrices &&\r\n\t\t\t\t\t\t\t\t\t<>

{t('configuration.summary.total')} { /*appliedSetup */ true ? formatter.currency(totalPrice) : \"-\"}

\r\n\t\t\t\t\t\t\t\t\t\t

{t('configuration.summary.piceInfo')}

\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t)\r\n}\r\n\r\nexport default translate()(ConfigurationSummary);\r\n","import React, { useRef } from \"react\";\r\nimport VehicleOverview, {\r\n\tVehicleOverviewProps\r\n} from \"../vehicle-overview/VehicleOverview\";\r\n// keep SetupsList, needed for setups\r\n// import SetupsList, { SetuplListProps } from '../setups/SetupsList';\r\n// import { Setup } from '../setups/SetupsList';\r\nimport { connect } from \"react-redux\";\r\nimport { DialogTypes } from \"../../enums/dialogTypes\";\r\nimport Navigation from \"../navigation/Navigation\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { RouteComponentProps, Route } from \"react-router-dom\";\r\nimport {\r\n\tmapDispatchToProps,\r\n\tmapStateToProps,\r\n\tStateManagementProps\r\n} from \"../../utils/addReduxProps\";\r\nimport Categories from \"../categories/CategoryList\";\r\nimport Parts from \"../parts/PartsList\";\r\nimport { withNamespaces, WithNamespaces } from \"react-i18next\";\r\n// do not remove next line needed for setups\r\n// import PartDetailDialog, { PartDetailDialogProps } from '../parts/PartDetailDialog';\r\nimport { Location } from \"history\";\r\n// do not remove next line, needed for setups\r\n// import { getSetupParts } from '../../utils/helpers';\r\nimport ConfigurationSummary from \"./ConfigurationSummary\";\r\nimport {\r\n\tShowDialogProps,\r\n\tsetCategoryScrollPosition\r\n} from \"../../redux/actions\";\r\nimport { useEffect } from \"react\";\r\nimport http from \"../../services/http\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { store } from \"../../redux/store\";\r\nimport { getCategoryScrollPosition } from \"../../redux/selectors\";\r\n\r\nexport interface CreateConfigurationResponse {\r\n\tConfigurationId: number;\r\n\tFullImages: FullImage[];\r\n}\r\n\r\nexport interface FullImage {\r\n\tPerspective: number;\r\n\tUrl: string;\r\n}\r\n\r\nexport type ConfigurationAllProps = StateManagementProps &\r\n\tWithNamespaces &\r\n\tRouteComponentProps<{ modelId: string }>;\r\n\r\nexport const Configuration: React.FunctionComponent<\r\n\tConfigurationAllProps\r\n> = props => {\r\n\tconst {\r\n\t\tmatch: {\r\n\t\t\tpath,\r\n\t\t\tparams: { modelId }\r\n\t\t},\r\n\t\tconfiguration,\r\n\t\taddCreatedConfiguration,\r\n\t\tviews,\r\n\t\tcategories\r\n\t} = props;\r\n\r\n\tconst scrollElement = useRef(null);\r\n\tconst navigationProps = createNavigationProps(props);\r\n\t// keep the next line for setups\r\n\t// const setuplistProps = createSetupProps(props);\r\n\tconst configurationExists = configuration.hasOwnProperty(\"ConfigurationId\");\r\n\r\n\tconst categoryProps = {\r\n\t\tcategories,\r\n\t\tsetScrollPosition: () => {\r\n\t\t\tif (scrollElement.current) {\r\n\t\t\t\tconst position = scrollElement.current.scrollTop;\r\n\t\t\t\tstore.dispatch(setCategoryScrollPosition(position));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!configurationExists) {\r\n\t\t\thttp\r\n\t\t\t\t.createConfiguration(modelId)\r\n\t\t\t\t.then((response: AxiosResponse) => {\r\n\t\t\t\t\taddCreatedConfiguration(response.data);\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tif (scrollElement.current) {\r\n\t\t\tconst position = getCategoryScrollPosition(store.getState());\r\n\t\t\tconsole.log(`scrolling to position at: ${position}`);\r\n\t\t\tscrollElement.current!.scrollTo({\r\n\t\t\t\ttop: position,\r\n\t\t\t\tbehavior: \"smooth\"\r\n\t\t\t});\r\n\t\t}\r\n\t}, [modelId, addCreatedConfiguration, configurationExists, scrollElement]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{createVehicleOverview(props.location, configurationExists)}\r\n\t\t\t\t
\r\n\t\t\t\t{views.showConfigurationSummary && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{views.showConfigurationSummary && createSummary(props)}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{/* TEMPORARILY HIDE SETUPS PATH */}\r\n\t\t\t\t\t{/* {\r\n return \r\n }}>\r\n */}\r\n\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\treturn ;\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t) => {\r\n\t\t\t\t\t\t\treturn ;\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withNamespaces()(\r\n\tconnect(\r\n\t\tmapStateToProps,\r\n\t\tmapDispatchToProps\r\n\t)(Configuration)\r\n);\r\n\r\nfunction createSummary(props: ConfigurationAllProps): React.ReactNode {\r\n\treturn ;\r\n}\r\n\r\nfunction createVehicleOverview(\r\n\tlocation: Location,\r\n\tconfigurationExists: boolean\r\n): React.ReactNode {\r\n\t// make sure not to render anything before configuration becomes available\r\n\tif (!configurationExists) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tlet vehicleOverviewProps: VehicleOverviewProps = { location };\r\n\r\n\treturn ;\r\n}\r\n\r\nfunction createNavigationProps({ showDialog, t }: ConfigurationAllProps) {\r\n\t// last warning before reset\r\n\tconst warnBeforeExit = () => {\r\n\t\tconst dialogProps: ShowDialogProps = {\r\n\t\t\ttitle: t(\"dialogs.warnBeforeExit.title\"),\r\n\t\t\tdata: t(\"dialogs.warnBeforeExit.text\"),\r\n\t\t\tcontentType: DialogTypes.warnBeforeExit\r\n\t\t};\r\n\t\tshowDialog(dialogProps);\r\n\t};\r\n\r\n\t// open save configuration dialog\r\n\tconst saveConfiguration = () => {\r\n\t\tconst dialogProps: ShowDialogProps = {\r\n\t\t\ttitle: t(\"dialogs.saveConfiguration.title\"),\r\n\t\t\tdata: {},\r\n\t\t\tcontentType: DialogTypes.saveConfiguration\r\n\t\t};\r\n\t\tshowDialog(dialogProps);\r\n\t};\r\n\r\n\treturn {\r\n\t\twarnBeforeExit,\r\n\t\tsaveConfiguration\r\n\t};\r\n}\r\n\r\n// keep the following for setups\r\n\r\n// function createSetupProps(\r\n// \t{\r\n// \t\tshowDialog,\r\n// \t\tremoveAllParts,\r\n// \t\tapplyParts,\r\n// \t\tsetups,\r\n// \t\tselectedSetup: selected,\r\n// \t\tappliedSetup: applied,\r\n// \t\tselectSetup: selectSetupDispatcher,\r\n// \t\tapplySetup: applySetupDispatcher\r\n// \t}\r\n// \t\t: ConfigurationAllProps) {\r\n\r\n// \t// setup parts dialog\r\n// \tconst openDetail = (setup: Setup) => {\r\n// \t\tconst dialogProps: ShowDialogProps = {\r\n// \t\t\ttitle: `${setup.Name} parts`,\r\n// \t\t\tdata: setup.PartIds,\r\n// \t\t\tcontentType: DialogTypes.setupParts,\r\n// \t\t};\r\n// \t\tshowDialog(dialogProps);\r\n// \t};\r\n\r\n// \tconst selectSetup = (setup: Setup) => {\r\n// \t\tselectSetupDispatcher(setup);\r\n// \t};\r\n\r\n// \tconst applySetup = (setup: Setup) => {\r\n// \t\tapplySetupDispatcher(setup);\r\n// \t\t// scrap all previous parts on setup change\r\n// \t\tremoveAllParts();\r\n// \t\tapplyParts(setup.PartIds);\r\n// \t};\r\n\r\n// \tconst setuplistProps: SetuplListProps = {\r\n// \t\tsetups,\r\n// \t\topenDetail,\r\n// \t\tselectSetup,\r\n// \t\tselected,\r\n// \t\tapplied,\r\n// \t\tapplySetup\r\n// \t};\r\n\r\n// \treturn setuplistProps;\r\n// }\r\n","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\n\r\n\r\nconst Hills: React.FunctionComponent = ({ t }) => {\r\n return (\r\n \r\n \r\n {t('icons.hills')}\r\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 withNamespaces()(Hills);","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\n\r\n\r\nconst Mountains: React.FunctionComponent = ({ t }) => {\r\n return (\r\n \r\n \r\n {t('icons.mountains')}\r\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 withNamespaces()(Mountains);","import React from 'react';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\n\r\nconst Exit: React.FunctionComponent = ({ t }) => {\r\n return (\r\n \r\n \r\n {t('icons.motorway')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\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 withNamespaces()(Exit);","import React from 'react';\r\nimport { mapStateToProps, mapDispatchToProps, StateManagementProps } from '../../utils/addReduxProps';\r\nimport { connect } from 'react-redux';\r\nimport { withStyles, WithStyles, Theme } from '@material-ui/core';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport colors from '../../utils/colors';\r\nimport { Grid } from '@material-ui/core';\r\nimport VehicleSummary, { VehicleSummaryProps } from '../vehicle-overview/VehicleSummary';\r\nimport VehicleImage from '../vehicle-overview/VehicleImage';\r\nimport HillsIcon from '../../assets/icons/hills';\r\nimport MountainsIcon from '../../assets/icons/mountains';\r\nimport MotorwayIcon from '../../assets/icons/motorway';\r\nimport { Link, RouteProps } from 'react-router-dom';\r\nimport { Location } from 'history';\r\nimport Exit from '@material-ui/icons/Close';\r\nimport { CSSProperties } from '@material-ui/core/styles/withStyles';\r\n\r\nexport interface PreviewComponentProps {\r\n\r\n}\r\n\r\nexport interface PreviewComponentState {\r\n\tbackground: number;\r\n}\r\n\r\nexport const classes: (theme: Theme) => Record = (theme: Theme) => {\r\n\treturn {\r\n\t\twrapper: {\r\n\t\t\tbackgroundColor: colors.grayBackground,\r\n\t\t\theight: '100%',\r\n\t\t\tbackground: 'white',\r\n\t\t},\r\n\r\n\t\tbikeWrapper: {\r\n\t\t\theight: '80%',\r\n\t\t\tposition: 'relative' as \"relative\",\r\n\t\t},\r\n\r\n\t\tbackground: {\r\n\t\t\twidth: '100%',\r\n\t\t},\r\n\t\trootIcons: {\r\n\t\t\tdisplay: 'flex',\r\n\t\t\tflexDirection: 'row' as \"row\",\r\n\t\t\tjustifyContent: 'center',\r\n\t\t\tcolor: 'white',\r\n\t\t\t'& > h3': {\r\n\t\t\t\tlineHeight: '48px',\r\n\t\t\t}\r\n\t\t},\r\n\t\tcontentWrapper: {\r\n\t\t\twidth: '100%',\r\n\t\t\tposition: 'absolute' as \"absolute\",\r\n\t\t\tbottom: '15px',\r\n\t\t\tpadding: '15px',\r\n\t\t\tboxSizing: 'border-box' as \"border-box\",\r\n\t\t\theight: 'calc(100% - 60px)',\r\n\t\t\ttop: '-10px',\r\n\t\t},\r\n\t\theaderGrid: {\r\n\t\t\tpadding: '15px',\r\n\t\t},\r\n\t\tclosePreviewBtn: {\r\n\t\t\tcolor: 'white',\r\n\t\t},\r\n\t\tselected: {\r\n\t\t\tbackground: theme.palette.primary.main,\r\n\t\t\tborderRadius: '4px',\r\n\t\t},\r\n\t\ticonWrapper: {\r\n\t\t\tmarginLeft: '5px',\r\n\t\t}\r\n\t}\r\n};\r\n\r\ntype PreviewProps = PreviewComponentProps & StateManagementProps & WithStyles & WithNamespaces & RouteProps;\r\n\r\nclass PreviewComponent extends React.Component {\r\n\tstate = {\r\n\t\tbackground: 0\r\n\t}\r\n\r\n\thandleBackgroundChanged(id: number) {\r\n\t\tthis.setState({ background: id })\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tclasses,\r\n\t\t\tt,\r\n\t\t\tlocation,\r\n\t\t\tappliedSetup,\r\n\t\t\tappliedParts,\r\n\t\t\ttotalPrice,\r\n\t\t\tmodels: { ShowPricesInConfigurator: hasPrices },\r\n\t\t\tselectedModel,\r\n\t\t} = this.props;\r\n\t\tconst motorcycleBackground = {\r\n\t\t\tbackground: `url(${process.env.PUBLIC_URL}/images/pho_backdrop${this.state.background + 1}.jpg) center/cover`,\r\n\t\t\theight: '63%',\r\n\t\t};\r\n\r\n\t\tconst vehicleSummaryProps: VehicleSummaryProps = {\r\n\t\t\thasPrices,\r\n\t\t\tappliedSetup,\r\n\t\t\tappliedParts,\r\n\t\t\ttotalPrice,\r\n\t\t\tmodel: selectedModel,\r\n\t\t};\r\n\t\tconst { state } = location as Location;\r\n\t\tconst closePreviewUrl = state && state.from ? state.from : '/page-not-found';\r\n\t\tconst { wrapper, headerGrid, rootIcons, bikeWrapper, background, contentWrapper, closePreviewBtn, selected, iconWrapper } = classes;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t{/* HEADER GRID */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t

{t('preview.background')}

\r\n\t\t\t\t\t\t\t\t{[, , ].map((Icon: React.ReactNode, idx: number) => {\r\n\t\t\t\t\t\t\t\t\treturn (
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t{Icon}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{/* BODY WITH PICTURE */}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withNamespaces()(withStyles(classes)(connect(mapStateToProps, mapDispatchToProps)(PreviewComponent)));\r\n","import React from 'react';\r\n\r\nexport interface NoRecordProps {\r\n className?: string;\r\n}\r\n\r\nexport const NoRecord: React.FunctionComponent = ({ children, className }) => {\r\n return (
{children}
);\r\n}\r\n\r\nexport default NoRecord;","import React from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { withStyles, WithStyles } from '@material-ui/core/styles';\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 format from '../../../utils/formatter';\r\nimport DeleteIcon from '@material-ui/icons/DeleteOutline';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport NoRecord from '../NoRecord';\r\nimport { DatePicker } from 'material-ui-pickers';\r\nimport Delete from '@material-ui/icons/Delete';\r\nimport Filter from '@material-ui/icons/FilterList';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport './history.scss';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { connect } from 'react-redux';\r\nimport { MotorcycleModelResponse, Price } from '../motorcycles/MotorcycleView';\r\nimport { classes } from './historyStyles';\r\nimport store from '../../../redux/store';\r\nimport load from '../../../redux/async-actions/loadConfiguration';\r\nimport Left from '@material-ui/icons/KeyboardArrowLeft';\r\nimport Right from '@material-ui/icons/KeyboardArrowRight';\r\nimport { TextField } from '@material-ui/core';\r\nimport http from '../../../services/http';\r\nimport { ShowDialogProps } from '../../../redux/actions';\r\nimport { DialogTypes } from '../../../enums/dialogTypes';\r\nimport { StateManagementProps, mapDispatchToProps, mapStateToProps } from '../../../utils/addReduxProps';\r\nimport DialogRouter from '../../dialogs/dialogRouter';\r\nimport { AxiosResponse } from 'axios';\r\nimport Toast from '../../shared/Toast';\r\nimport { toastMessage } from '../../../utils/helpers';\r\n\r\nexport interface HistoryResponseItem {\r\n\tConfigurations: Configuration[];\r\n}\r\n\r\nexport interface Configuration {\r\n\tId: number;\r\n\tModel: Model;\r\n\tTotalPrice: Price;\r\n\tCustomer: Customer;\r\n\tComment: string;\r\n\tSavedOn: number;\r\n}\r\n\r\nexport interface Customer {\r\n\tLastname: string;\r\n\tFirstname: string;\r\n\tFullname?: string;\r\n}\r\n\r\nexport interface Model {\r\n\tHeroImageUrl: string;\r\n\tId: string;\r\n\tName: string;\r\n}\r\n\r\nexport interface HistoryViewProps {\r\n\tmodels: MotorcycleModelResponse;\r\n}\r\n\r\n\r\nexport interface HistoryViewState {\r\n\titems: Configuration[];\r\n\tmodelName: string;\r\n\tdateFrom: number | null;\r\n\tdateTo: number | null;\r\n\tnameFilter: string;\r\n\tfilter: boolean;\r\n\tpager: PagerProps;\r\n\tloaded: boolean;\r\n}\r\n\r\n\r\nexport interface PagerProps {\r\n\tcurrentPage: number;\r\n\tperPage: number;\r\n}\r\n\r\nconst perPageResultcount = 10;\r\n\r\nconst pagerInitialState: PagerProps = {\r\n\tcurrentPage: 0,\r\n\tperPage: perPageResultcount,\r\n}\r\n\r\nconst initialState = {\r\n\titems: [],\r\n\tmodelName: '',\r\n\tdateFrom: 0,\r\n\tdateTo: Date.now(),\r\n\tnameFilter: '',\r\n\tfilter: false,\r\n\tpager: pagerInitialState,\r\n\tloaded: false,\r\n};\r\n\r\nexport type HistoryAllProps = HistoryViewProps & WithStyles & RouteComponentProps & WithNamespaces & StateManagementProps;\r\n\r\nexport class HistoryView extends React.Component {\r\n\tconstructor(props: HistoryAllProps) {\r\n\t\tsuper(props);\r\n\t\tthis.state = { ...initialState };\r\n\t\tthis.filterRows = this.filterRows.bind(this);\r\n\t\tthis.handleModelChange = this.handleModelChange.bind(this);\r\n\t\tthis.handleDateChange = this.handleDateChange.bind(this);\r\n\t\tthis.clearFilter = this.clearFilter.bind(this);\r\n\t\tthis.showConfirm = this.showConfirm.bind(this);\r\n\t\tthis.handleNameFilterChange = this.handleNameFilterChange.bind(this);\r\n\t\tthis.updateHistoryState = this.updateHistoryState.bind(this);\r\n\t\tthis.loadData = this.loadData.bind(this);\r\n\t\tthis.deleteItemAndReload = this.deleteItemAndReload.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.loadData();\r\n\t}\r\n\r\n\tloadData() {\r\n\t\treturn http.getHistory()\r\n\t\t\t.then(this.updateHistoryState)\r\n\t\t\t.catch(error => console.log(error));\r\n\t}\r\n\r\n\tdeleteItemAndReload(id: number) {\r\n\t\thttp.deleteConfiguration(id)\r\n\t\t\t.then(() => {\r\n\t\t\t\ttoastMessage(this.props.t('configuration deleted'));\r\n\t\t\t})\r\n\t\t\t.then(this.loadData);\r\n\t}\r\n\r\n\tupdateHistoryState(response: AxiosResponse) {\r\n\t\tconst { Configurations } = response.data;\r\n\t\tif (Configurations.length) {\r\n\t\t\tthis.setState({\r\n\t\t\t\titems: Configurations.map((configuration: Configuration) => {\r\n\t\t\t\t\tconst { Customer: { Firstname, Lastname } } = configuration;\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\t...configuration,\r\n\t\t\t\t\t\tCustomer: {\r\n\t\t\t\t\t\t\t...configuration.Customer,\r\n\t\t\t\t\t\t\tFullname: `${Firstname} ${Lastname}`,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\t...this.setDates(Configurations),\r\n\t\t\t\tloaded: true,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.setState({ loaded: true })\r\n\t\t}\r\n\t}\r\n\r\n\thandleModelChange(e: React.ChangeEvent) {\r\n\t\tconst { name, value } = e.target;\r\n\t\tthis.setState({\r\n\t\t\t...this.state,\r\n\t\t\tfilter: true,\r\n\t\t\t[name]: value,\r\n\t\t});\r\n\r\n\t\tthis.setPage(0);\r\n\t}\r\n\r\n\thandleDateChange(controlName: string, value: Date) {\r\n\t\tthis.setState({\r\n\t\t\t...this.state,\r\n\t\t\tfilter: true,\r\n\t\t\t[controlName]: value.setHours(0, 0, 0, 0),\r\n\t\t});\r\n\r\n\t\tthis.setPage(0);\r\n\t}\r\n\r\n\thandleNameFilterChange(nameFilter: string) {\r\n\t\tthis.setState({ nameFilter, filter: true });\r\n\t\tthis.setPage(0);\r\n\t}\r\n\r\n\tclearFilter() {\r\n\t\tthis.setState({ ...initialState, items: [...this.state.items], ...this.setDates(this.state.items) });\r\n\t}\r\n\r\n\tsetPage(currentPage: number) {\r\n\t\tthis.setState({ pager: { ...this.state.pager, currentPage } })\r\n\t}\r\n\r\n\tfilterRows(item: Configuration): boolean {\r\n\t\treturn this.fitsModel(item) && this.fitsFrom(item) && this.fitsTo(item) && this.fitsName(item);\r\n\t}\r\n\r\n\tshowConfirm(id: number, e: React.MouseEvent) {\r\n\t\te.stopPropagation();\r\n\r\n\t\tconst dialogProps: ShowDialogProps<{ text: string, deleteAndReloadHistory: (id: number) => void, id: number }> = {\r\n\t\t\ttitle: this.props.t('dialogs.deleteConfiguration.title'),\r\n\t\t\tdata: {\r\n\t\t\t\tid,\r\n\t\t\t\ttext: this.props.t('dialogs.deleteConfiguration.text'),\r\n\t\t\t\tdeleteAndReloadHistory: this.deleteItemAndReload,\r\n\t\t\t},\r\n\t\t\tcontentType: DialogTypes.deleteConfiguraion,\r\n\t\t};\r\n\t\tthis.props.showDialog(dialogProps);\r\n\t}\r\n\r\n\tprivate fitsModel(item: Configuration): boolean {\r\n\t\treturn !this.state.modelName || this.state.modelName === item.Model.Name;\r\n\t}\r\n\r\n\tprivate fitsName(item: Configuration): boolean {\r\n\t\treturn !this.state.nameFilter || item.Customer['Fullname']!.toLowerCase().includes(this.state.nameFilter.toLowerCase().trim());\r\n\t}\r\n\r\n\r\n\tprivate fitsFrom(item: Configuration): boolean {\r\n\t\treturn !this.state.dateFrom || this.state.dateFrom <= item.SavedOn;\r\n\t}\r\n\r\n\tprivate fitsTo(item: Configuration): boolean {\r\n\t\treturn !this.state.dateTo || this.state.dateTo >= item.SavedOn;\r\n\t}\r\n\r\n\tprivate setDates(items: Configuration[]) {\r\n\t\treturn {\r\n\t\t\tdateFrom: Math.min(...items.map(item => item.SavedOn)),\r\n\t\t\tdateTo: Math.max(...items.map(item => item.SavedOn)),\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\r\n\t\tconst { t, toast } = this.props;\r\n\t\tconst {\r\n\t\t\tfilter,\r\n\t\t\ttable,\r\n\t\t\timagePreview,\r\n\t\t\tdeleteClass,\r\n\t\t\tselectRoot,\r\n\t\t\tgap,\r\n\t\t\tnoRecord,\r\n\t\t\ttableHeaderCell,\r\n\t\t\ttableBodyCell,\r\n\t\t\timageCell,\r\n\t\t\tfilterNameRoot,\r\n\t\t\ttableRow,\r\n\t\t} = this.props.classes;\r\n\r\n\t\tconst minDateProps = {\r\n\t\t\tclassName: gap,\r\n\t\t\tdisableFuture: true,\r\n\t\t\tformat: 'dd.MM.yyyy',\r\n\t\t\tmaxDate: this.state.dateTo && new Date(this.state.dateTo),\r\n\t\t\tlabel: t('history.filters.dateFrom'),\r\n\t\t\tvalue: this.state.dateFrom,\r\n\t\t\tonChange: this.handleDateChange.bind(null, 'dateFrom'),\r\n\t\t}\r\n\t\tconst maxDateProps = {\r\n\t\t\tclassName: gap,\r\n\t\t\tdisableFuture: true,\r\n\t\t\tformat: 'dd.MM.yyyy',\r\n\t\t\tminDate: this.state.dateFrom && new Date(this.state.dateFrom),\r\n\t\t\tlabel: t('history.filters.dateTo'),\r\n\t\t\tvalue: this.state.dateTo,\r\n\t\t\tonChange: this.handleDateChange.bind(null, 'dateTo'),\r\n\t\t}\r\n\r\n\t\tconst modelNames: string[] = this.state.items\r\n\t\t\t.map((item: Configuration) => item.Model.Name)\r\n\t\t\t.reduce((acc: string[], modelName: string) => acc.includes(modelName) ? acc : [...acc, modelName], [])\r\n\t\t\t.sort();\r\n\r\n\t\tconst filtredItems = this.state.items.filter(this.filterRows);\r\n\t\tconst { currentPage } = this.state.pager;\r\n\r\n\r\n\t\tconst pageArray = Array.from(Array(Math.ceil(filtredItems.length / perPageResultcount)).keys())\r\n\t\tconst Pager = filtredItems.length > perPageResultcount &&\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{/* Previous page */}\r\n\t\t\t\t\t currentPage !== 0 && this.setPage(currentPage - 1)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{pageArray.map((item, index: number) => this.setPage(index)}\r\n\t\t\t\t\t\tclassName={`clickable pager-item ${index === currentPage ? 'selected' : ''}`}>{index + 1}\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{/* Next page */}\r\n\t\t\t\t\t currentPage !== pageArray.length - 1 && this.setPage(this.state.pager.currentPage + 1)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
;\r\n\r\n\r\n\t\tconst tableItems = filtredItems\r\n\t\t\t// pager filter\r\n\t\t\t.filter((row: Configuration, index) => {\r\n\t\t\t\tconst { currentPage, perPage } = this.state.pager;\r\n\t\t\t\treturn index >= currentPage * perPage && index < (currentPage + 1) * perPage\r\n\t\t\t})\r\n\t\t\t// latest first\r\n\t\t\t.sort((a, b) => b.SavedOn - a.SavedOn)\r\n\t\t\t.map((row: Configuration, index: number) => (\r\n\t\t\t\t\t store.dispatch(load([row, this.props.history]) as any)}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\"hero\"\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{row.Model.Name}\r\n\t\t\t\t\t\t{format.currency(row.TotalPrice)}\r\n\t\t\t\t\t\t{`${row.Customer.Firstname} ${row.Customer.Lastname}`}\r\n\t\t\t\t\t\t{`${row.Comment}`}\r\n\t\t\t\t\t\t{format.toDateLocaleString(row.SavedOn)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t));\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{t('history.filters.modelName')}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{t('history.filters.modelName')}\r\n\t\t\t\t\t\t\t\t{modelNames.map((name: string, key) => (\r\n\t\t\t\t\t\t\t\t\t{name}\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t this.handleNameFilterChange(value)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{/*picture*/}\r\n\t\t\t\t\t\t\t\t{['model', 'price', 'customer', 'comment', 'date', 'actions'].map((item, idx) => (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{t(`history.header.${item}`)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{tableItems}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{tableItems.length === 0 &&\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{this.state.loaded ?

{t('history.message.noRecord')}

: }\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{/* pager */}\r\n\t\t\t\t\t{Pager}\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withNamespaces()(withStyles(classes)(HistoryView)));\r\n","import http from \"../../services/http\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { Store as appState } from \"../reducers\";\r\nimport { ThunkDispatch, ThunkAction } from \"redux-thunk\";\r\nimport { LOAD_CONFIGURATION } from \"../actionTypes\";\r\nimport { LoadConfigurationResponse } from \"../reducers/load\";\r\nimport { History } from \"history\";\r\nimport { Configuration } from \"../../components/main/history/HistoryView\";\r\nimport { preserveSaveDetailsData } from \"../actions\";\r\n\r\nexport default function loadConfiguration([historyItem, history]: [\r\n\tConfiguration,\r\n\tHistory\r\n]): ThunkAction, appState, {}, any> {\r\n\treturn function(dispatch: ThunkDispatch) {\r\n\t\treturn http.getConfiguration(historyItem.Id).then(\r\n\t\t\t(response: AxiosResponse) => {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\tVehicle: { ModelId }\r\n\t\t\t\t\t}\r\n\t\t\t\t} = response;\r\n\r\n\t\t\t\t// Load data from history into state\r\n\t\t\t\tdispatch({\r\n\t\t\t\t\ttype: LOAD_CONFIGURATION,\r\n\t\t\t\t\tpayload: {\r\n\t\t\t\t\t\t...response.data,\r\n\t\t\t\t\t\theroImgUrl: historyItem.Model.HeroImageUrl\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (response.data && response.data.Configuration)\r\n\t\t\t\t\tdispatch(\r\n\t\t\t\t\t\tpreserveSaveDetailsData(response.data.Configuration.SaveDetails)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t// Redirect to configuration view\r\n\t\t\t\thistory.push(`/configuration/${ModelId}/categories`);\r\n\t\t\t},\r\n\t\t\t(reason: any) => {\r\n\t\t\t\tconsole.error(\r\n\t\t\t\t\t\"An error occured while trying to load a configuration:\",\r\n\t\t\t\t\treason\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n}\r\n","import { Theme, } from '@material-ui/core/styles';\r\nimport { CSSProperties } from '@material-ui/core/styles/withStyles';\r\nimport colors from '../../../utils/colors';\r\n\r\n// @todo remove this file when time allows\r\n\r\nexport const classes: (theme: Theme) => Record = (theme: Theme) => ({\r\n\tfilter: {\r\n\t\tbackground: colors.lightGrey,\r\n\t},\r\n\ttable: {\r\n\t},\r\n\timagePreview: {\r\n\t\tmaxHeight: 46,\r\n\t},\r\n\tdeleteClass: {\r\n\t\tcolor: theme.palette.primary.main,\r\n\t},\r\n\tselectRoot: {\r\n\t\tminWidth: 200,\r\n\t},\r\n\tfilterNameRoot: {\r\n\t\tminWidth: 200,\r\n\t},\r\n\tgap: {\r\n\t\tmarginRight: 10,\r\n\t},\r\n\tnoRecord: {\r\n\t\t'textAlign': 'center',\r\n\t\tpadding: 10,\r\n\t},\r\n\ttableHeaderCell: {\r\n\t\tfontSize: '1rem',\r\n\t\tfontWeight: 600,\r\n\t\tcolor: 'black',\r\n\t},\r\n\ttableBodyCell: {\r\n\t\tfontSize: '1rem',\r\n\t},\r\n\timageCell: {\r\n\t\ttextAlign: 'center',\r\n\t},\r\n\ttableRow: {\r\n\t\tcursor: 'pointer'\r\n\t}\r\n});\r\n","import React from 'react';\r\nimport { withStyles, WithStyles, Theme } from '@material-ui/core/styles';\r\n\r\nexport interface MotorcycleMenuProps {\r\n updateState: (link: string) => void;\r\n links: string[];\r\n link: string;\r\n}\r\n\r\nconst classes = (theme: Theme) => ({\r\n\r\n typeList: {\r\n display: 'flex',\r\n justifyContent: 'flex-start',\r\n paddingTop: 24,\r\n paddingBottom: 21,\r\n padding: '0 20px',\r\n },\r\n navLink: {\r\n fontSize: '1em',\r\n color: 'black',\r\n lineHeight: 1.625,\r\n margin: 'initial' as \"initial\",\r\n paddingRight: '2.5rem'\r\n },\r\n menuWrapper: {\r\n borderBottom: '1px solid #eee',\r\n },\r\n});\r\n\r\nexport const MotorcycleMenu: React.FunctionComponent = (props: MotorcycleMenuProps & WithStyles) => {\r\n const { navLink, typeList, menuWrapper } = props.classes;\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default withStyles(classes)(MotorcycleMenu);\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { SegmentData, VehicleInformation, Hero } from './MotorcycleView';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\nimport { withStyles, WithStyles, Theme } from '@material-ui/core/styles';\r\nimport Format from '../../../utils/formatter';\r\n\r\nexport interface ModelsProps {\r\n\tdata: SegmentData;\r\n}\r\n\r\nconst classes = (theme: Theme) => ({\r\n\tmodelLink: {\r\n\t\tfontSize: '14px',\r\n\t\tlineHeight: '22px',\r\n\t},\r\n\tspacer: {\r\n\t\tmarginBottom: '24px',\r\n\t},\r\n\tselectionWrapper: {\r\n\t\tpadding: '20px 0 0 20px',\r\n\t\toverflowY: 'auto' as \"auto\",\r\n\t},\r\n\tmodelSelectionWrapper: {\r\n\t\theight: 'calc(100% - 75px)',\r\n\t},\r\n\tpreviewWrapper: {\r\n\t\tpaddingTop: 40,\r\n\t},\r\n\tVehicleInformation: {\r\n\t\tbackgroundRepeat: 'no-repeat',\r\n\t},\r\n\tbikePreview: {\r\n\t\tbackgroundPosition: 'right top',\r\n\t\tbackgroundSize: 'auto 93%',\r\n\t},\r\n\tpreviewBoxWrapper: {\r\n\t\tborderLeft: '1px solid #eee',\r\n\t},\r\n\theroTitle: {\r\n\t\tfontSize: '3.75em',\r\n\t\tlineHeight: '1em',\r\n\t},\r\n\theroIntro: {\r\n\t\tfontSize: '1.25em',\r\n\t},\r\n\theroPrice: {\r\n\t\tfontSize: '1.25em',\r\n\t},\r\n\theroDescription: {\r\n\t\tfontSize: '1em',\r\n\t},\r\n});\r\n\r\nexport type AllModelProps = ModelsProps & WithNamespaces & WithStyles;\r\n\r\nexport interface ModelsState {\r\n\tHero: Hero;\r\n\tisDefault: boolean;\r\n}\r\nexport class Models extends React.Component {\r\n\tconstructor(props: AllModelProps) {\r\n\t\tsuper(props);\r\n\t\tthis.selectHero = this.selectHero.bind(this);\r\n\t\tthis.sortModels = this.sortModels.bind(this);\r\n\r\n\t\tconst { Hero } = this.props.data;\r\n\t\tthis.state = { Hero, isDefault: true };\r\n\t}\r\n\r\n\tselectHero(Hero: Hero, isDefault: boolean) {\r\n\t\tthis.setState({ Hero, isDefault });\r\n\t}\r\n\r\n\tcomponentDidUpdate(oldProps: ModelsProps) {\r\n\t\tconst newProps = this.props\r\n\t\tif (oldProps.data !== newProps.data) {\r\n\t\t\tthis.setState({ Hero: newProps.data.Hero, isDefault: true })\r\n\t\t}\r\n\t}\r\n\r\n\textract(str: string): { engineSize: number, name: string, year: number } {\r\n\t\tconst spacedModelName = str.replace(/\\s/g, ' ');\r\n\r\n\t\t// if detection pattern fails,\r\n\t\t// provide default to let model sink to the bottom of list\r\n\t\tif (spacedModelName.split(' ').length < 3) {\r\n\t\t\treturn {\r\n\t\t\t\tengineSize: 0,\r\n\t\t\t\tname: '',\r\n\t\t\t\tyear: 0,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst firstSpace = spacedModelName.indexOf(' ');\r\n\t\tconst lastSpace = spacedModelName.lastIndexOf(' ');\r\n\r\n\t\treturn {\r\n\t\t\tengineSize: +spacedModelName.slice(0, firstSpace) || 0,\r\n\t\t\tname: spacedModelName.slice(firstSpace + 1, lastSpace),\r\n\t\t\tyear: +spacedModelName.slice(lastSpace + 1, spacedModelName.length) || 0,\r\n\t\t};\r\n\t};\r\n\r\n\tsortModels(prev: VehicleInformation, next: VehicleInformation) {\r\n\t\tconst [extractedPrevious, extractedNext] = [this.extract(prev.Name), this.extract(next.Name)];\r\n\t\treturn (-(extractedPrevious.engineSize - extractedNext.engineSize) ||\r\n\t\t\textractedPrevious.name.toLocaleLowerCase().localeCompare(extractedNext.name.toLocaleLowerCase()) ||\r\n\t\t\t-(extractedPrevious.year - extractedNext.year));\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { Vehicles } = this.props.data;\r\n\t\tconst {\r\n\t\t\tmodelLink,\r\n\t\t\tspacer,\r\n\t\t\tselectionWrapper,\r\n\t\t\tmodelSelectionWrapper,\r\n\t\t\tpreviewWrapper,\r\n\t\t\tVehicleInformation,\r\n\t\t\tbikePreview,\r\n\t\t\tpreviewBoxWrapper,\r\n\t\t\theroTitle,\r\n\t\t\theroIntro,\r\n\t\t\theroPrice,\r\n\t\t\theroDescription,\r\n\t\t} = this.props.classes;\r\n\t\tconst { isDefault } = this.state;\r\n\t\tconst backgroundImage = `linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url(${process.env.REACT_APP_SERVER_ROOT}${this.state.Hero.ImageUrl})`;\r\n\t\tconst defaultPreviewStyles = {\r\n\t\t\tcolor: 'white',\r\n\t\t\tbackgroundImage,\r\n\t\t\tbackgroundSize: 'cover',\r\n\t\t\tbackgroundRepeat: 'no-repeat',\r\n\t\t\tpaddingLeft: 40,\r\n\t\t\theight: '100%',\r\n\t\t};\r\n\r\n\t\tconst selectedPreviewStyles = {\r\n\t\t\tcolor: 'black',\r\n\t\t\tbackgroundImage: `url(${process.env.REACT_APP_SERVER_ROOT}${this.state.Hero.ImageUrl})`,\r\n\t\t};\r\n\t\tconst { Intro, Title, Price, Description } = this.state.Hero;\r\n\r\n\t\tconst engineTypes: Array = Vehicles.reduce((acc: Array, vehicle: VehicleInformation) => {\r\n\t\t\treturn acc.includes(vehicle.EngineType) ? [...acc] : [...acc, vehicle.EngineType];\r\n\t\t}, []);\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{/* MODEL SELECTION PART */}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{engineTypes.map((version: string | null, index: number) => {\r\n\t\t\t\t\t\t\tconst filtered = Vehicles\r\n\t\t\t\t\t\t\t\t.filter((item: VehicleInformation) => item.EngineType === version)\r\n\t\t\t\t\t\t\t\t.sort(this.sortModels);\r\n\t\t\t\t\t\t\tif (!filtered.length) {\r\n\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{version !== null &&

{version}

}\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t{filtered.map((item: VehicleInformation, index: number) => (\r\n\t\t\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{item.Name}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
  • )\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t{/* PREVIEW PART */}\r\n\t\t\t\t\r\n\t\t\t\t\t{isDefault &&\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
{Intro}
\r\n\t\t\t\t\t\t\t\t

{Title}

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
}\r\n\t\t\t\t\t{!isDefault &&\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
{Intro}
\r\n\t\t\t\t\t\t\t\t\t

{Title}

\r\n\t\t\t\t\t\t\t\t\t

{Format.currency(Price)}

\r\n\t\t\t\t\t\t\t\t\t

{Description}

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(classes)(withNamespaces()(Models));\r\n","import React from 'react';\r\nimport MotorcycleMenu from './MotorcycleMenu';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { withStyles, WithStyles, Theme } from '@material-ui/core/styles';\r\nimport { CSSProperties } from '@material-ui/core/styles/withStyles';\r\nimport { connect } from 'react-redux';\r\nimport Action from '../../../redux/reducers/models/action';\r\nimport Models from './Models';\r\nimport { CircularProgress } from '@material-ui/core';\r\nimport { StateManagementProps, mapStateToProps, mapDispatchToProps } from '../../../utils/addReduxProps';\r\nimport getModels from '../../../redux/async-actions/getModels';\r\nimport store from '../../../redux/store';\r\nimport { withNamespaces, WithNamespaces } from 'react-i18next';\r\n\r\nexport interface MotorcycleModelResponse {\r\n\tSegments: SegmentData[];\r\n\tShowPricesInConfigurator: boolean;\r\n}\r\n\r\nexport interface SegmentData {\r\n\tName: string;\r\n\tHero: Hero;\r\n\tVehicles: VehicleInformation[];\r\n}\r\n\r\nexport interface VehicleInformation {\r\n\tName: string;\r\n\tModelId: string;\r\n\tEngineType: string | null;\r\n\tHero: Hero;\r\n}\r\n\r\nexport interface Hero {\r\n\tIntro: string;\r\n\tTitle: string;\r\n\tImageUrl: string;\r\n\tDescription: string;\r\n\tPrice: Price;\r\n}\r\n\r\nexport type Price = PriceWithValue | null;\r\n\r\nexport interface PriceWithValue {\r\n\tCurrencySymbol: string;\r\n\tValue: number;\r\n}\r\n\r\nexport interface MotorcyclesProps {\r\n\tgetMotorcycleModels: MotorcycleModelResponse;\r\n\taddMotorcycleModels: (payload: MotorcycleModelResponse) => Action;\r\n}\r\n\r\nexport interface MotorcycleState {\r\n\tlink: string;\r\n\tloaded: boolean;\r\n}\r\n\r\n\r\nexport const classes: (theme: Theme) => Record = (theme) => ({\r\n\tmotorcycles: {\r\n\t\theight: 'calc(100% - 76px)',\r\n\t\tboxSizing: 'border-box',\r\n\t},\r\n\twrapper: {\r\n\t\tborderBottom: '1px solid #eee',\r\n\t\tpadding: '0 10px 0 10px',\r\n\t\tmaxWidth: 800,\r\n\t},\r\n\talignCenter: {\r\n\t\tmargin: '20px auto',\r\n\t\tfontSize: '1.3em',\r\n\t}\r\n});\r\n\r\nexport type MotorcycleViewAllProps = MotorcyclesProps & RouteComponentProps & WithStyles & WithNamespaces & StateManagementProps;\r\n\r\nexport class Motorcycles extends React.Component {\r\n\r\n\tconstructor(props: MotorcycleViewAllProps) {\r\n\t\tsuper(props);\r\n\t\tthis.state = { link: '', loaded: false };\r\n\t\tthis.updateState = this.updateState.bind(this);\r\n\t}\r\n\r\n\tupdateState(link: string) {\r\n\t\tthis.setState({ link });\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tif (!this.hasModelData()) {\r\n\t\t\tstore.dispatch((getModels() as any)).then(() => this.setState({ loaded: true }));\r\n\t\t} else {\r\n\t\t\tthis.setState({ loaded: true });\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (!this.hasModelData() && !this.state.loaded) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\tif (!this.hasModelData() && this.state.loaded) {\r\n\t\t\treturn

{this.props.t('motorcycles.notAvailable')}

;\r\n\t\t}\r\n\t\tconst { Segments } = this.props.models;\r\n\t\tconst links = Segments.map((segment: SegmentData) => segment.Name);\r\n\t\tconst selectedSegment = this.state.link || links[0];\r\n\t\tconst menuProps = {\r\n\t\t\tupdateState: this.updateState,\r\n\t\t\tlinks,\r\n\t\t\tlink: selectedSegment,\r\n\t\t};\r\n\r\n\t\tconst { motorcycles } = this.props.classes;\r\n\t\tconst segmentData: SegmentData = Segments.find((segment: SegmentData) => segment.Name === selectedSegment) as SegmentData;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n\r\n\tprivate hasModelData = () => !!this.props.models.Segments.length;\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStyles(classes)(withNamespaces()(Motorcycles)));\r\n","import http from '../../services/http';\r\nimport { AxiosResponse } from 'axios';\r\nimport { addMotorcycleModels } from '../actions';\r\nimport { ThunkDispatch, ThunkAction } from 'redux-thunk';\r\nimport { MotorcycleModelResponse } from '../../components/main/motorcycles/MotorcycleView';\r\n\r\nexport default function getModels(): ThunkAction, {}, {}, any> {\r\n return function (dispatch: ThunkDispatch) {\r\n return http.getModels().then((response: AxiosResponse) => {\r\n dispatch(addMotorcycleModels(response.data));\r\n }).catch((reason) => {\r\n console.error('An http error occured', JSON.stringify(reason));\r\n })\r\n }\r\n}","import React from 'react';\r\nimport { FastFact } from './Overview';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport colors from '../../../utils/colors';\r\n\r\nexport interface FastFactProps {\r\n\tfacts: FastFact[];\r\n}\r\n\r\nexport const FastFacts: React.FunctionComponent = (props: FastFactProps) => {\r\n\tconst { facts } = props;\r\n\tconst styles = {\r\n\t\tbackgroundColor: colors.lightGrey,\r\n\t\theight: '100%',\r\n\t};\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{facts.map((fact: FastFact, idx: number) => (\r\n\t\t\t\t{fact.Text ? : }\r\n\t\t\t))}\r\n\t\t\r\n\t)\r\n}\r\n\r\nexport const TextFact: React.FunctionComponent<{ text: string | null }> = (props) => {\r\n\tconst { text } = props;\r\n\tconst pattern = /\\d{1,4}\\skw/i;\r\n\r\n\tif (!!text) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t

{text}

\r\n\t\t
\r\n\t);\r\n}\r\nexport const PictureFact: React.FunctionComponent<{ image: string | null }> = (props) => {\r\n\tconst { image } = props;\r\n\r\n\tif (!!image) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t\"fast\r\n\t);\r\n}\r\n","import React from \"react\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { Hero, VehicleInformation } from \"../motorcycles/MotorcycleView\";\r\nimport { StaticContext } from \"react-router\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { FastFacts as FactsComponent } from \"./FastFact\";\r\nimport { Link } from \"react-router-dom\";\r\nimport \"./overview.scss\";\r\nimport { Part } from \"../../parts/PartsList\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n\tmapStateToProps,\r\n\tmapDispatchToProps,\r\n\tStateManagementProps\r\n} from \"../../../utils/addReduxProps\";\r\nimport { Setup } from \"../../setups/SetupsList\";\r\nimport { Subtract, WithNamespaces, withNamespaces } from \"react-i18next\";\r\nimport store from \"../../../redux/store\";\r\nimport getOverview from '../../../redux/async-actions/getOverview';\r\nimport { exitVehicleConfiguration } from \"../../../redux/actions\";\r\n\r\n\r\ntype VehicleInformationWithoutHero = Subtract<\r\n\tVehicleInformation,\r\n\t{ Hero: Hero }\r\n>;\r\n\r\nexport interface VehicleOverviewResponse {\r\n\tVehicle: VehicleInformationWithoutHero;\r\n\tFastFacts: FastFact[];\r\n\tParts: Part[];\r\n\tSetups: Setup[];\r\n}\r\n\r\nexport interface FastFact {\r\n\tText: string | null;\r\n\tImageUrl: string | null;\r\n}\r\n\r\nexport type OverviewAllProps = RouteComponentProps<{ modelId: string }, StaticContext, { hero: Hero }> &\r\n\tStateManagementProps &\r\n\tWithNamespaces;\r\n\r\nexport class Overview extends React.Component {\r\n\tconstructor(props: OverviewAllProps) {\r\n\t\tsuper(props);\r\n\t\tthis.resetAndGoToModels = this.resetAndGoToModels.bind(this);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tif (!this.hasOverviewData()) {\r\n\t\t\t// @todo: better types when available\r\n\t\t\tstore.dispatch(getOverview(this.props.match.params.modelId) as any)\r\n\t\t}\r\n\t}\r\n\r\n\tresetAndGoToModels() {\r\n\t\tstore.dispatch(exitVehicleConfiguration());\r\n\t\tthis.props.history.goBack();\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (!this.hasOverviewData()) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\tconst { hero } = this.props.location.state;\r\n\t\tconst {\r\n\t\t\tVehicle: {\r\n\t\t\t\tHero: { Description }\r\n\t\t\t},\r\n\t\t\tFastFacts\r\n\t\t} = this.props.overview;\r\n\t\tconst { modelId } = this.props.match.params;\r\n\t\tconst imageProps = {\r\n\t\t\tsrc: process.env.REACT_APP_SERVER_ROOT + hero.ImageUrl\r\n\t\t};\r\n\t\tconst { t } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{hero.Intro}\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

{hero.Title}

\r\n\t\t\t\t\t\t\t\t\t

{Description}

\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{/* */}\r\n\t\t\t\t\t\t\t\t\t\t{/* @todo: REMOVE '/categores' from the next when setups become active */}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
{\" \"}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate hasOverviewData = () => (this.props.overview.Vehicle.ModelId.length);\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withNamespaces()(Overview));\r\n","import http from '../../services/http';\r\nimport { AxiosResponse } from 'axios';\r\nimport { VehicleOverviewResponse } from '../../components/main/overview/Overview';\r\nimport { VehicleInformation } from '../../components/main/motorcycles/MotorcycleView';\r\nimport { VehicleOverviewState, getCategoryInformation } from '../reducers/vehicleOverview';\r\nimport { addPrice, selectSetup, addVehicleOverview } from '../actions';\r\nimport { toastMessage, getVehicleById } from '../../utils/helpers';\r\nimport { Store as appState } from '../reducers';\r\nimport { ThunkDispatch, ThunkAction } from 'redux-thunk';\r\n\r\nexport default function getOverview(modelId: string): ThunkAction, appState, {}, any> {\r\n\treturn function (dispatch: ThunkDispatch, getState) {\r\n\t\treturn http.getOverview(modelId).then(\r\n\t\t\t(response: AxiosResponse) => {\r\n\t\t\t\tconst Vehicle = getVehicleById(modelId) as VehicleInformation;\r\n\t\t\t\tconst { Setups: [firstSetup] } = response.data;\r\n\t\t\t\tconst vehicleOverviewData: VehicleOverviewState = {\r\n\t\t\t\t\t...response.data,\r\n\t\t\t\t\tVehicle,\r\n\t\t\t\t\tCategories: getCategoryInformation(response.data.Parts)\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// selects hero price (may need rework when setups are applied)\r\n\t\t\t\tdispatch(addPrice(Vehicle.Hero.Price));\r\n\r\n\t\t\t\t// only marks setup as selected, user has to choose and confirm\r\n\t\t\t\tdispatch(selectSetup(firstSetup));\r\n\r\n\t\t\t\t//populates vehicle overview part of the state\r\n\t\t\t\tdispatch(addVehicleOverview(vehicleOverviewData));\r\n\t\t\t},\r\n\t\t\t(reason: any) => {\r\n\t\t\t\ttoastMessage('A server error occured.')\r\n\t\t\t\tconsole.error(\"A http error occured.\", reason);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n}\r\n","import React from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Route, Switch, Link, RouteComponentProps } from 'react-router-dom';\r\nimport History from './history/HistoryView';\r\nimport Motorcycles from './motorcycles/MotorcycleView';\r\nimport Overview from './overview/Overview';\r\nimport './main.scss';\r\nimport store from '../../redux/store';\r\nimport { exitVehicleConfiguration } from '../../redux/actions';\r\n\r\nexport class MainView extends React.Component> {\r\n constructor(props: RouteComponentProps) {\r\n super(props);\r\n this.tabSelected = this.tabSelected.bind(this);\r\n }\r\n\r\n tabSelected(path: Array): boolean {\r\n const { pathname } = this.props.location;\r\n return path.some((item: string | RegExp) => (typeof item === 'string' ? pathname === item : item.test(pathname)));\r\n }\r\n\r\n resetVehicleConfiguration() {\r\n store.dispatch(exitVehicleConfiguration());\r\n }\r\n\r\n render() {\r\n const headlineClasses = 'ktm-underlined headline clickable';\r\n const path = '/main';\r\n const motoryclesUrl = path + '/motorcycles';\r\n const historyUrl = path + '/history';\r\n const overviewUrl = path + '/overview/:modelId';\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\nexport default MainView;\r\n","import React from 'react';\r\nimport { Route, RouteComponentProps, RouteProps, Redirect } from \"react-router\";\r\nimport { Store } from 'redux';\r\nimport { Store as appStore } from '../redux/reducers';\r\nimport store from '../redux/store';\r\n\r\nexport interface RestrictedRouteProps {\r\n hasParam?: string;\r\n checkStore?: (store: Store) => boolean;\r\n needLogin?: boolean;\r\n redirect?: string;\r\n}\r\n\r\nconst RestrictedRoute: React.FunctionComponent = ({ component, path, hasParam, checkStore, needLogin, redirect }) => {\r\n return (\r\n ) => {\r\n const { match } = props;\r\n function canAccessComponent(): boolean {\r\n const paramOk = !hasParam || (hasParam && match.params[hasParam] && match.params[hasParam].length);\r\n const storeOk = !checkStore || checkStore(store);\r\n return paramOk && storeOk;\r\n }\r\n const Component = component as React.ComponentType;\r\n return canAccessComponent() ? : \r\n }\r\n } />\r\n );\r\n}\r\n\r\nexport default RestrictedRoute;","import React from 'react';\r\nimport Configuration from './components/configuration/ConfigurationView';\r\nimport Preview from './components/preview/PreviewView';\r\nimport Main from './components/main/MainView';\r\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\r\nimport './App.scss';\r\nimport { BrowserRouter as Router, Route, Switch, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport RestrictedRoute from './utils/RestrictedRoute';\r\nimport { Store as appStore } from './redux/reducers';\r\nimport store from './redux/store';\r\nimport { Store } from 'redux';\r\nimport Action from './redux/reducers/models/action';\r\nimport queryString from 'query-string';\r\nimport { SET_CULTURE, SET_COMPANY_ID, SET_COUNTRY, SET_ENTRY_POINT_URL } from './redux/actionTypes';\r\nimport { getEntryPointUrl } from './utils/helpers';\r\nimport { TransitionState } from './enums/transitionStates';\r\nimport { Subject } from 'rxjs';\r\n\r\nconst TransitionState$ = new Subject();\r\n\r\nexport const TranstitonStateValue = TransitionState$.asObservable();\r\n\r\nconst checkConfigrationID = (store: Store) => {\r\n return !!store.getState().vehicleOverviewState.Parts.length;\r\n};\r\n\r\nconst renderMain = (props: RouteComponentProps) => {\r\n const parsed = queryString.parse(props.location.search);\r\n\r\n if ('culture' in parsed && 'id_company' in parsed && 'country' in parsed) {\r\n console.log(\r\n `saving setting for culture: ${parsed.culture}, company id: ${parsed.id_company}, and country: ${parsed.country} `\r\n );\r\n store.dispatch({ type: SET_CULTURE, payload: parsed.culture });\r\n store.dispatch({ type: SET_COMPANY_ID, payload: parsed.id_company });\r\n store.dispatch({ type: SET_COUNTRY, payload: parsed.country });\r\n\r\n console.log(`saving setting for entry point URL`);\r\n if (!getEntryPointUrl().length) {\r\n store.dispatch({ type: SET_ENTRY_POINT_URL, payload: window.location.href.replace('/main', '') });\r\n }\r\n }\r\n return
;\r\n};\r\n\r\nconst renderRoot = (props: RouteComponentProps) => {\r\n const search = props.location.search ? props.location.search : '';\r\n return ;\r\n};\r\n\r\nexport const loadOneTrust = () => {\r\n const existingScript = document.getElementById('onetrust');\r\n\r\n if (!existingScript) {\r\n let script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js';\r\n script.charset = 'UTF-8';\r\n\r\n script.setAttribute('data-document-language', 'true');\r\n script.setAttribute('data-domain-script', '4ceffab1-4567-4a2f-afd8-13c433741ab5');\r\n script.setAttribute('id', 'onetrust');\r\n\r\n document.head.appendChild(script);\r\n\r\n script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.text = `function OptanonWrapper() { }`;\r\n document.head.appendChild(script);\r\n }\r\n};\r\n\r\nclass App extends React.Component {\r\n componentDidMount() {\r\n loadOneTrust();\r\n }\r\n render() {\r\n return (\r\n \r\n ) => (\r\n \r\n {\r\n TransitionState$.next(TransitionState.Enter);\r\n }}\r\n onExited={() => {\r\n TransitionState$.next(TransitionState.Exit);\r\n }}\r\n >\r\n
\r\n \r\n \r\n \r\n \r\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 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 http://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\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: 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(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\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 http://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: string, config?: 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 http://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: string, config?: 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 './index.scss';\r\nimport App from './App';\r\nimport i18n from './i18n';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider } from 'react-redux';\r\nimport store, { persistor } from './redux/store';\r\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';\r\nimport orange from '@material-ui/core/colors/orange';\r\nimport yellow from '@material-ui/core/colors/yellow';\r\nimport { red } from '@material-ui/core/colors';\r\nimport { I18nextProvider } from 'react-i18next';\r\nimport { MuiPickersUtilsProvider } from 'material-ui-pickers';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport * as deLocale from 'date-fns/locale/de';\r\nimport TagManager from 'react-gtm-module';\r\nimport { GtmContainerId } from './config';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\nimport { JENTIS_SCRIPT } from './jentis';\r\n\r\nconst themeConfig = {\r\n typography: {\r\n fontFamily: ['TradeGothicLTComCondensed18', 'sans-serif'].join(','),\r\n },\r\n\r\n palette: {\r\n primary: {\r\n light: orange[300],\r\n main: '#ff6600',\r\n dark: orange[700],\r\n },\r\n secondary: yellow,\r\n error: red,\r\n },\r\n};\r\n\r\nconst theme = createMuiTheme(themeConfig);\r\n\r\nReactDOM.render(\r\n <>\r\n {/* Theme*/}\r\n \r\n {/* Router */}\r\n \r\n {/* Redux */}\r\n {/* type 'any' mitigates current problem with types for this prop */}\r\n \r\n \r\n {/* Translations */}\r\n \r\n {/* Datepicker */}\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\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: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n\r\n// add google tag manager scripts\r\nTagManager.initialize({\r\n gtmId: GtmContainerId,\r\n events: {\r\n 'gtm.start': new Date().getTime(),\r\n event: 'gtm.js',\r\n },\r\n});\r\n","export const GtmContainerId = 'GTM-N4DKB2X';\r\n"],"sourceRoot":""}