{"version":3,"sources":["types/CreateOrderSteps.ts","overmind/state.ts","../../common/src/types/Page.ts","../../common/src/types/User.ts","../../common/src/styles/constants.ts","../../common/src/elements/Link/Link.tsx","../../common/src/elements/Page/Page.tsx","overmind/index.ts","../../common/src/elements/Grid/Grid.ts","../../common/src/styles/baseInput.ts","../../common/src/elements/FormInput/FormInput.styles.ts","../../common/src/elements/Label/Label.tsx","../../common/src/elements/FormControl/FormControl.tsx","../../common/src/elements/RequiredFieldIndicator/RequiredFieldIndicator.styles.ts","../../common/src/elements/RequiredFieldIndicator/RequiredFieldIndicator.tsx","../../common/src/elements/FormInput/FormInput.tsx","../../common/src/elements/Buttons/Buttons.styles.ts","elements/FormControl/FormControl.tsx","styles/constants.ts","styles/baseInput.ts","components/Select/Select.styles.tsx","elements/RequiredFieldIndicator/RequiredFieldIndicator.styles.ts","elements/RequiredFieldIndicator/RequiredFieldIndicator.tsx","components/Select/Select.tsx","components/Checkbox/Checkbox.styles.ts","components/Checkbox/Checkbox.tsx","pages/order/OrderListPage/components/OrderFilter/OrderFilter.tsx","hooks/useOnClickOutside.ts","../../common/src/components/Table/components/ColumPicker/ColumnPicker.tsx","../../common/src/components/Table/Direction.ts","../../common/src/components/Table/elements/SortIcon/SortIcon.tsx","../../common/src/types/EmployeeMessage.ts","../../common/src/components/Table/Table.styles.tsx","../../common/src/components/Table/Table.tsx","../../common/src/elements/ExpandIcon/ExpandIcon.tsx","../../common/src/helpers/date.ts","elements/Link/Link.tsx","helpers/money.ts","helpers/order.ts","components/EmployeeLink/EmployeeLink.tsx","components/OrderList/OrderList.tsx","components/Pager/Pager.tsx","../../common/src/types/CMSArticle.ts","pages/Guest/UnauthForm.styles.ts","components/ButtonGroup/ButtonGroup.styles.ts","pages/Guest/ForgotPasswordPage/ForgotPasswordPage.tsx","components/CMSContent/CMSContent.tsx","elements/Header/Header.styles.ts","elements/Header/Header.tsx","components/Buttons/Buttons.styles.ts","components/ShortcutCard/ShortcutCard.styles.ts","components/ShortcutCard/ShortcutCard.tsx","elements/VBox/VBox.ts","assets/img/banner.jpg","pages/Home/HomePage.styles.ts","hooks/useWindowDimensions.ts","pages/Home/HomePage.tsx","services/pretreAPI/BaseService.ts","../../common/src/components/PhoneLink/PhoneLink.tsx","elements/HBox/HBox.ts","components/DocumentList/DocumentList.tsx","components/DetailsBox/DetailsBox.tsx","components/SketchFabEmbed/SketchFabEmbed.tsx","services/pretreAPI/endpoints.ts","services/pretreAPI/Auth/AuthService.ts","helpers/draftOrder.ts","services/pretreAPI/order/OrderService.ts","services/pretreAPI/employee/EmployeeService.ts","services/pretreAPI/customerEmployee/CustomerEmployeeService.ts","services/pretreAPI/lookups/LookupsService.ts","services/pretreAPI/customer/CustomerService.ts","overmind/effects.ts","services/cms/CMS.ts","../../common/src/components/Modal/Modal.styles.tsx","../../common/src/elements/Header/Header.styles.ts","types/OfferOption.ts","../../common/src/elements/Header/Header.tsx","../../common/src/components/Modal/Modal.tsx","../../common/src/hooks/useKeyDown.ts","../../common/src/hooks/useOnClickOutside.ts","assets/img/Mellometasje.png","modals/PrecutModal/PrecutModalForm.tsx","modals/PrecutModal/PrecutPlans.tsx","modals/PrecutModal/PrecutModal.tsx","../../common/src/elements/FileInput/FileInput.styles.ts","../../common/src/elements/FileInput/FileInput.tsx","modals/FileUploadModal/FileUploadModal.tsx","pages/order/ChooseProductPage/CreateOrderPage.styles.ts","components/BreadCrumbs/BreadCrumbs.tsx","../../common/src/validators/index.ts","app/pages.ts","data/selectOptions.ts","components/FormInput/FormInput.styles.ts","pages/order/CreateOrderPage/CustomerInformation.tsx","../../common/src/components/TextArea/TextArea.styles.ts","../../common/src/components/TextArea/TextArea.tsx","helpers/GenerateId.ts","pages/order/ChooseProductPage/RoofForm.tsx","pages/order/ChooseProductPage/SubProjects.tsx","pages/order/ChooseProductPage/JointsForm.tsx","pages/order/ChooseProductPage/PrecutForm.tsx","pages/order/ChooseProductPage/TechnicalServicesForm.tsx","modals/CalculatePriceModal/CalculatePriceModal.tsx","assets/img/A-takstol med rafthøgde.png","assets/img/A-takstol standard.png","assets/img/A-takstol undergurt ut.png","assets/img/Blank.png","assets/img/Pulttakstol standard.png","assets/img/Pulttakstol undergurt ut.png","assets/img/Saksetakstol.png","assets/img/W-takstol standard.png","assets/img/W-takstol undergurt ut.png","pages/order/ChooseProductPage/Tooltip.tsx","pages/order/ChooseProductPage/CalcConditions.tsx","helpers/PriceCalculatorConfig.ts","pages/order/ChooseProductPage/CalculationPriceAndError.tsx","pages/order/ChooseProductPage/ExtendedRoofForm.tsx","pages/order/ChooseProductPage/PrecutOpening.tsx","pages/order/ChooseProductPage/ExtendedPrecutForm.tsx","pages/order/ChooseProductPage/ExtendedBeamLayerForm.tsx","pages/order/ChooseProductPage/ChooseProductPage.tsx","components/FormInput/FormInput.tsx","pages/order/ChooseProductPage/Attachments.tsx","pages/order/ChooseProductPage/Summary.tsx","pages/order/ChooseProductPage/Receipt.tsx","components/SelectionGrid/SelectionGrid.tsx","modals/SelectionGridModal/SelectionGridModal.tsx","pages/order/CreateOrderPage/ChooseProjectType.tsx","components/forms/UserForm/UserForm.tsx","components/UserList/UserList.tsx","elements/Grid/Grid.ts","pages/company/components/CompanyForm/CompanyForm.tsx","modals/EditEmployeeModal/EditEmployeeModal.tsx","../../common/src/elements/Callout/Callout.tsx","components/SalesPersonBox/SalesPersonBox.tsx","pages/Auth/Auth.tsx","pages/user/CompanySelectorPage.tsx","pages/Guest/LoginPage/LoginPage.tsx","pages/TechnicalServicesPage/TechnicalServicesPage.tsx","pages/order/OrderListPage/OrderListPage.tsx","pages/order/ViewOrderPage/ViewOrderPage.tsx","pages/order/ViewOrderProjectPage/ViewOrderProjectPage.tsx","pages/order/CreateOrderPage/CreateOrderPage.tsx","pages/user/UserPage.tsx","pages/company/CompanyPage.tsx","pages/Documentation/DocumentationPage.tsx","pages/error/ErrorPage.tsx","helpers/ExtendedPrecutHelper.ts","overmind/actions.ts","overmind/navigation/actions.ts","overmind/navigation/state.ts","overmind/auth/actions.ts","overmind/auth/state.ts","errors/FileUploadError.ts","overmind/orders/actions.ts","overmind/orders/helpers/filterOrders.ts","overmind/orders/state.ts","overmind/createModals.ts","types/Order.ts","overmind/modals/config.ts","overmind/config.ts","assets/img/pretre_logo.png","hooks/useMediaQuery.ts","app/layouts/components/MainMenu.styles.tsx","app/layouts/components/MainMenu.tsx","app/layouts/GuestLayout/GuestLayout.tsx","modals/SendMessageModal/SendMessageModal.tsx","app/layouts/MainLayout/MainLayout.tsx","app/App.tsx","helpers/axiosTokenInterceptor.ts","i18n.ts","serviceWorker.ts","components/ErrorBoundary/ErrorBoundary.tsx","index.tsx"],"names":["CreateOrderSteps","Page","UserRole","UserType","state","isInitialLoadComplete","pretreEmplyees","customerEmployees","customer","currentEmployeeId","currentEmployee","derived","find","e","id","activeCreateOrderStep","CUSTOMER_INFO","mesterIdCustomers","buildingTypes","offerOptions","technicalServices","cms","error","mesterIdLogin","PreTreColors","Link","styled","PageContainer","PageTitle","PageHeaderWrapper","PageBackLink","BackSvg","svg","LinkButton","PageHeader","BackLink","label","url","viewBox","fill","xmlns","d","href","title","children","headerItems","backLink","useAppState","createStateHook","useActions","createActionsHook","useEffects","createEffectsHook","Grid","div","Row","props","size","flex","Col","baseInputStyles","css","Input","Label","FormControl","suffix","Error","RequiredFieldAsterisk","RequiredFieldIndicator","FormInput","htmlFor","name","type","placeholder","defaultValue","inputRef","required","onChange","disabled","readonly","readOnly","ref","target","value","disabledStyle","BlockButton","secondary","row","align","LayoutConstants","SelectElement","selectWidth","Select","options","onSelectionChanged","selectedValue","noDefault","t","useTranslation","map","o","Icon","HiddenCheckbox","input","attrs","StyledCheckbox","checked","CheckboxContainer","Checkbox","style","marginLeft","OrderFilter","orders","useState","projectOptions","setProjectOptions","peopleOptions","setPeopleOptions","yearOptions","setYearOptions","statusOptions","setStatusOptions","productOptions","setProductOptions","actions","useEffect","projects","people","years","statuses","products","forEach","isProjectMaster","employee","customerEmployeeId","delivery","date","getFullYear","status","valueChainStatus","subProjects","x","product","thisYear","Date","Object","values","reverse","sort","a","b","localeCompare","orderFilter","projectId","changeOrderFilter","freeText","customerOrderNumber","parseInt","contactId","deliveryYear","projectName","display","flexDirection","justifyContent","marginTop","hideDeliveredOrders","textAlign","onClick","clearOrderFilter","useOnClickOutside","handler","listener","event","current","contains","closest","document","addEventListener","removeEventListener","Direction","ColumnPickerContainer","activeItemStyle","ColumnItem","isActive","ColumnPicker","availableColumns","selectedColumns","onColumnsChanged","onClose","useRef","fontWeight","c","includes","newColumns","filter","col","push","EmployeeMessageReferenceType","Wrapper","down","width","height","up","upDown","SortIcon","direction","TableHead","TableContainer","TableRow","notVisible","alternate","child","hasOpenHandler","TableCell","TableHeading","TableHeadingText","Table","columns","data","keyField","onRowSelected","noResultsText","onSortChanged","currentSortOption","openRows","pickColumnsOpen","setPickColumnsOpen","currentColumns","setCurrentColumns","position","idx","alignItems","alignEnd","field","ascending","descending","headerName","initial","length","padding","colSpan","rowIdx","render","undefined","subRow","i","index","plus","minus","ExpandIcon","expanded","DateFormat","formatDate","dateFormat","REGULAR","trim","parseISO","test","fnsFormat","locale","nb","formatMoney","amount","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","currency","format","getDeliveryDateText","order","EmployeeLink","employe","referenceId","referenceType","hide","onContactPerson","employeeId","OrderList","allColumns","page","VIEW_ORDER_PROJECT","VIEW_ORDER","createUrl","orderDate","engineerId","ORDER","salesPersonId","price","sum","float","isOrderPriceCalculated","createColumns","columnsToUse","setOpenRows","setSortOption","currentOrderSortOption","selected","copy","List","Step","currentLinkStyle","Ellipsis","Pagination","renderLink","pageNumber","key","link","renderPrev","currentPage","pageCount","renderNext","renderLinks","items","CMSArticles","Pager","mode","Form","ButtonGroup","loginSchema","yup","shape","email","CMSContent","contentId","markup","content","dangerouslySetInnerHTML","__html","Heading","theme","Header","rest","ChooseProductPageButton","active","extended","Card","CardHeader","ShortcutLink","ArrowIcon","ShortcutCardLink","to","ShortcutArrowIcon","fullHeightStyle","VBox","fullHeight","Shader","BannerImage","BackgroundImage","Container","ItemContainer","VerticalCenterBox","SubText","BtnWrapper","getWindowDimensions","window","innerWidth","innerHeight","Verb","PhoneLink","number","formatted","substring","HBox","DocumentList","documents","as","openDocument","file","description","downloadDocument","DetailsBox","Legend","Text","Group","SketchFabEmbed","embedId","embedHash","className","src","frameBorder","allow","allowFullScreen","fontSize","margin","color","rel","ROOT_ENDPOINT","process","BaseService","route","body","responseType","headers","cancelToken","indexOf","verb","Promise","reject","path","params","method","replaceParameters","token","axios","catch","response","message","files","routeParams","FormData","append","paramsToReplace","match","lastMissingOptionalKey","slice","parts","split","isOptional","param","pop","prePath","hasParamToReplaceKey","hasOwnProperty","paramToReplaceKey","replace","endpoints","auth","login","POST","checkToken","GET","forgotPassword","getByUsername","project","getAllForCustomerId","getById","getByIdWithoutCustomer","getOrderFromOfferId","postCommitDraftOrder","postCommitSubprojects","getDocumentsforOrder","getDocumentforOrder","addFiles","calculateRoof","lookups","getLookups","zipcodeLookup","getConfigValue","getAll","sendMessage","customerEmployee","search","update","PUT","create","resetPassword","getForToken","AuthService","username","password","this","makeRequest","brukernavn","passord","then","r","mapDraftOrderToBackendModel","offerId","customerId","loggedInEmail","model","kundeId","tilbudNr","kundeKontaktId","customerContactId","merkes","marked","kommentar","levering","deliveryTerms","kundesBestillingsnr","bestbekr","onsketLevering","leveringsadresse","byggeplass","adresse","deliveryAddress","postnummer","zipCode","toString","lat","lng","gardsnr","farmNumber","bruksnr","subFarmNumber","hoydeOverHavet","mamsl","sammeSomByggeplass","deliveryAddressSameAsBuilding","tilkomstSemi","arrivalSemi","kontpers2","contactPersonSite","tlflevkunde","contactPersonPhoneNr","tilbudsvalg","byggtype","buildingType","quotation","additionalInfo","preferredDeliveryDate","toISOString","isValid","expectedDrawingDate","setHours","getHours","deliveryAddress2","zipCode2","OrderService","orderId","results","convertDocument","filename","convert","uploadFile","payload","navn","folder","mappe","links","lenker","l","linkType","embed","prosjektNr","ordrenr","produktType_Navn","deliveryDay","leverdag","deliveryWeek","leveruke","levaar","prosjektMaster","leveringsdato","leveringsbetingelse","ordredato","parse","statusNavn","kundepris","levAdre1","lev_Postnr","lev_Poststed","constructionContactPhone","byggeplass_Tlf","constructionContactName","byggePlass_Epost","kontaktPerson_ID","ansvarligSelgerID","customerNumber","kundenr","calculationName","constructionName","EmployeeService","createEmployeeMessage","melding","referanseId","referanseType","fixed","ansattID","ansattNavn","ansattEpost","phone","ansattMobil","isEngieer","ingenior","isSalesEngineer","ingenior_Salg","skjul","isSales","salgssjef","isAdmin","crM_Admin","photoUrl","doC_ID","CustomerEmployeeService","kontakt_Navn","kontakt_Epost","kontakt_Telefon","kontakt_Mobiltlf","mobile","kontakt_Stilling","kontakt_BlokkerPortaltilgang","kontakt_Slutta","hasQuit","nyttPassord","newPassword","kontakt_Passord_Portal","kontaktID","hasPassword","LookupsService","byggTyper","convertBuildingType","convertOfferOption","tekniskeTjenester","orderStatuses","ordreStatuser","offerStatuses","tilbudsStatuser","zipcode","poststed","configKey","beskrivelse","note","notat","typeNr","byggTypeNr","CustomerService","address","epost","epostBestillingsbekreftelse","orderConfimEmail","epostOrdrebekreftelse","orderConfrimEmailAlt","epostTegninger","drawingsEmail","kundenavn","adresse1","postnrk","city","epost_Tegninger","epost_Bestillingsbekreftelse","epost_Ordrebekreftelse","telefon","constructionInformation","std_konstr_opplysn","ansvarligSelger_ID","fetch","text","xmlDoc","DOMParser","parseFromString","nodes","evaluate","XPathResult","ANY_TYPE","blobs","result","iterateNext","childNodes","element","nodeName","textContent","api","employees","router","action","next","pathname","routePath","redirect","start","click","navigateTo","tokenService","get","localStorage","getItem","defaults","common","Authorization","set","setItem","clear","removeItem","localFileStorage","_files","toast","duration","Toastify","gravity","backgroundColor","showToast","persistentCache","remove","Backdrop","InnerContainer","OfferOptionType","Modal","callback","keysToListenTo","isOpen","scrollRef","onKeyDown","which","svills","PrecutModalForm","setPlans","plans","selectedPlan","setSelectedPlan","setFormActive","modals","dimensions","PRECUT_DIMENSION","useForm","defaultValues","register","handleSubmit","onSubmit","newPlans","bruttoVegghoyde","hoydeOverkantApning","dimensjonToppsvill","dimensjonStender","dimensjonBunnsvill","klaringTilKarm","biv1","dimToppsvill1","dimBunnsvill1","biv2","dimToppsvill2","dimBunnsvill2","biv3","dimToppsvill3","dimBunnsvill3","newPlan","precutModal","Logo","alt","alignContent","marginBottom","PrecutPlans","autoFill","borderRadius","minHeight","maxHeight","overflowY","plan","deleted","onClickPlan","textDecoration","precuts","deleteProject","PrecutModal","formActive","modalsActions","isCurrent","close","justifySelf","FileInput","multiple","FileUploadModal","setFiles","fileUploadModal","f","concat","Array","from","marginRight","ColumnWrapper","PageFlexConstraint","itemWidth","HeaderWrapper","BoldText","ButtonWrapper","StyledList","li","StyledSection","section","ChooseProductPageMainContainer","BreadCrumbs","activeStep","steps","alignSelf","step","slug","string","requiredField","dateInFuture","typeError","min","nextWeek","setDate","getDate","when","Number","isNaN","optional","PageAccess","dateTwoWeekInFutureRequired","positiveNumeric","nullable","transform","originalValue","String","positive","decimalField","parseFloat","max","requiredEmail","phoneNumber8digits","matches","yesNoOptions","InputWrapper","CustomerInformation","effects","sameAddressSelection","setSameAddressSelection","isSameAddress","useMemo","opt","customerInformationSchema","validators","currentNewOrder","city2","resolver","yupResolver","autofill","ISO_DATE","errors","watch","setValue","streetAddress","contactPersons","deliveryOptions","getCountyForZipcode","county","updateDraftOrder","CREATE_ORDER","gridTemplateColumns","paddingTop","gap","val","p","bottom","cancelCreateOrder","InputArea","TextArea","rows","cols","makeId","characters","charactersLength","charAt","Math","floor","random","RoofForm","setSubProjects","setActiveForm","selectedSubProject","setSelectedSubProject","roof","roofType","roofingType","angle","rangeDistance","protrusion","additionalCrane","workingWidth","roofTypes","ROOF","roofingTypes","ROOFING","newProjs","comment","SubProjects","joistsTypes","JOIST_TYPE","deterimineProductName","subProj","returnVal","joist","joistsType","dim","minWidth","proj","subProject","unDeleteProject","JoistsForm","joists","submergeWetRoom","millimetersImmersed","submergeWetRooms","SUBMERGE_WETROOM","precut","PrecutForm","PRECUT_INFO","technical","TechnicalServicesForm","quickChoice","onMainCancel","technicalType","CalculatePriceModal","cancelCalculation","calculatePriceModal","cursor","Tooltip","show","background","zIndex","top","left","borderWidth","borderStyle","borderColor","CalcConditions","calc","preconditions","conditions","approvedRoofTypes","configParams","minProtrusion","maxProtrusion","minAngle","maxAngle","minRangeDistance","maxRangeDistance","ww","CalculationPriceAndError","freight","priceConditions","ExtendedRoofForm","setCalc","def","img","setImg","priceDisabled","setPriceDisabled","showPriceButton","setShowPriceButton","configParam","setConfigParam","showToolTip","setShowToolTip","numberOfTrusses","roomWidth","roomHeight","getValues","watcher","uid","calculationId","specifications","roof1","roof2","roof4","roof6","roof10","roof11","roof12","roof13","approvedRoof","roofParams","trusses","range","validatePriceButton","flexWrap","onMouseEnter","onMouseLeave","open","CancelToken","source","formValues","street","projectType","CustomerId","deliveryterms","trussInfo","trussType","Quantity","SpanWidth","RoofAngle","TimberWidth","RoofSheeting","roofOverhang","calclulatePrice","cancel","numOfOpenings","PrecutOpeningRow","opening","deleteOpening","changeOpening","openings","h","w","columnGap","quantity","bearing","ExtendedPrecutForm","setOpenings","precutOpenings","op","roofs","dimensionOuter","lengthOuter","numberOfCornersOuter","dimensionInner","lengthInner","numberOfCornersInner","wallHeight","roofRef","dimensionGavl","numberOfGavl","some","addOpening","PrecutOpening","ExtendedBeamLayerForm","totalAmountImmersed","totalAmountJoists","steelBeamLength","ChooseProductPage","activeForm","setSubProjectsOnDraftOrder","onBackButtonClicked","onFormButtonClick","form","ORDER_SELECTION_HELPER","isQuote","Attachments","setComment","is","control","hasDrawings","setDraftOfferFiles","ATTACHMENT_INFO_ORDERS","ORDER_NO_DRAWINGS","Summary","requiredCheckboxItems","checkboxes","setChecboxes","submitting","setSumbitting","onConfirm","cb","commitDraftOrder","finally","deliveryText","paddingLeft","ORDER_SUMMARY_MULTIPLE","option","Receipt","orderConverted","setOrderId","commitSubProjs","clearAutofillAndDraftOrder","OFFER_SUMMARY","ORDER_SUMMARY","ORDER_LIST","paddingRight","Menu","MenuItem","MenuItemHeader","h4","MenuItemImg","isSelected","SelectionGrid","onItemClicked","elements","setElements","setSelected","renderer","SelectionGridModal","selectedItem","setSelectedItem","modalsAction","modalsState","closeModal","selectionGridModal","ChooseProjectType","setQuotationOnDraftOrder","isQuotation","setOrderConverted","validationSchema","UserForm","requiresVerifyPassword","user","EMPLOYEE","preventDefault","UserList","users","stopPropagation","changeUserActive","userId","activeState","onResetPassword","CompanyForm","changeCustomer","EditEmployeeModal","editEmployeeModal","changeCustomerEmployee","createCustomerEmployee","Callout","SalesPersonBox","CUSTOMER","Auth","schema","CompanySelectorPage","onMesterIdSelectCustomer","pages","LOGIN","component","loginWithRedirect","useAuth0","restrictedTo","GUEST","RESET_PASSWORD","maxWidth","HOME","windowDimensions","setWindowDimensions","handleResize","useWindowDimensions","isGuest","WELCOME_GUEST_1","WELCOME_LOGGED_IN_1","WELCOME_GUEST_2","WELCOME_LOGGED_IN_2","TECHNICAL_SERVICES","service","bildeURL","pris","AUTH","isFetching","currentPageItems","PageConstants","currentOrder","masterProjects","customerContact","ordersInSameProject","onNewOrderClicked","getOrderAutofill","toLowerCase","encodeURI","NOT_CALCULATED","onPrecutForm","openedFromProjectPage","promptFileUpload","currentOrderProject","customerContactPerson","projectSum","reduce","lastCompletedOrderStep","PROJECT_TYPE","CHOOSE_PRODUCT","ATTACHMENTS","SUMMARY","RECEIPT","createSteps","USER","COMPANY","companyName","onEditEmployee","DOCUMENTATION","ERROR","EMULATE","CUSTOMER_SELECTOR","getNavigationRoute","stringCheck","str","mapBiv","stender","toppsvill","bunnsvill","dimStender","dimToppsvill","dimBunnsvill","mapToBackend","backendList","backendObj","biv","JSON","stringify","sendMessageModal","emulateEmployee","emulation","emulatedType","emulateCustomer","formInfo","console","log","getDocumentsForOrder","docs","openSelectionGridModal","onSelected","updateCustomer","onInitializeOvermind","navigation","openHome","openTechnicalServices","openLogin","openForgotPassword","openOrderList","openViewOrder","openViewOrderProject","openCreateOrderStep","openUser","openCompanyPage","openDocumentationPage","emulate","openCompanySelector","routeArgs","side","currentOrderId","currentOrderProjectId","velg","velgny","kundeinfo","produktvalg","vedlegg","oppsummering","kvittering","ADMIN","dataOwner","credentials","onLoggedIn","returnUrl","decodedToken","jwt_decode","nameid","unique_name","role","mockLoginWithToken","logout","location","alert","logoutMesterId","onMesterIdLoggedIn","updateToken","getByToken","customers","getByUserName","locations","stateUser","newToken","FileUploadError","change","showOnlyMyOrdersAndProjects","getDocument","contents","fileDownload","fileX","Blob","fileURL","URL","createObjectURL","commitSubProjects","isset","numPerPage","ceil","filteredOrders","rootState","currentUserId","or","showOnlyProjects","filterOrder","sortedItems","config","merge","namespaced","keys","aggr","modal","newState","assign","resolve","stateKey","_","root","createModal","useMediaQuery","mediaQuery","matchMedia","isVerified","setIsVerified","mediaQueryList","documentChangeHandler","addListener","removeListener","Item","overlayMenu","column","isOverlay","DropdownItem","BurgerBar","BurgerButton","MainMenu","displayName","showAsActiveFor","getMenuItems","toggleMenu","isSmall","hover","setHover","stroke","strokeWidth","strokeLinecap","strokeLinejoin","x1","y1","x2","y2","right","returnTo","origin","GuestLayout","SendMessageModal","setMessage","MainLayout","App","isLoading","isAuthenticated","getAccessTokenSilently","loading","setLoading","setTimeout","interceptorId","triggerLogout","interceptors","request","use","decoded","jwtDecode","tokenExpiry","exp","currentTime","getTime","ignoreCache","axiosTokenInterceptor","eject","CurrentPage","CurrentPageComponent","i18n","initReactI18next","init","resources","translation","Login","Password","Status","Constructor","Product","Delivery","Price","Contact","Choose","Logout","Created","Marked","Loading","Phone","Documents","Description","Folder","Documentation","Done","Customers","Username","Role","Email","Search","Joist","Dimension","Roof","Roofing","Protrusion","Elements","Yes","No","Next","Comment","FreeText","TechnicalType","AddRoof","AddExtendedRoof","AddBeamlayer","AddPrecut","AddTechnical","beamlayer","keySeparator","interpolation","escapeValue","Boolean","hostname","ErrorBoundary","hasError","errorInfo","React","overmind","createOvermind","devtools","ReactDOM","StrictMode","currentVersion","version","isEnabled","domain","clientId","redirectUri","audience","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b6dc3633.chunk.js","sourcesContent":["// eslint-disable-next-line no-shadow\nexport enum CreateOrderSteps {\n  PROJECT_TYPE = 0,\n  CUSTOMER_INFO = 1,\n  CHOOSE_PRODUCT = 2,\n  ATTACHMENTS = 3,\n  SUMMARY = 4,\n  RECEIPT = 5,\n}\n","import { derived } from \"overmind\";\nimport { CustomerEmployee } from \"@frontend/common/src/types/CustomerEmployee\";\nimport { Customer } from \"@frontend/common/src/types/Customer\";\nimport { Employee } from \"@frontend/common/src/types/Employee\";\nimport { CMSArticle } from \"@frontend/common/src/types/CMSArticle\";\nimport { OfferOption } from \"../types/OfferOption\";\nimport { BuildingType } from \"../types/BuildingType\";\nimport { TechnicalService } from \"../types/TechnicalService\";\nimport { CreateOrderSteps } from \"../types/CreateOrderSteps\";\n\ntype State = {\n  isInitialLoadComplete: boolean;\n  pretreEmplyees: Employee[];\n  customerEmployees: CustomerEmployee[];\n  customer: Customer;\n  currentEmployeeId: string;\n  currentEmployee: CustomerEmployee;\n  activeCreateOrderStep: CreateOrderSteps;\n  mesterIdCustomers: Customer[];\n  buildingTypes: BuildingType[];\n  offerOptions: OfferOption[];\n  technicalServices: TechnicalService[];\n  mesterIdLogin: boolean;\n  cms: { [index: number]: CMSArticle };\n  error: { message: string };\n};\n\nexport const state: State = {\n  isInitialLoadComplete: false,\n  pretreEmplyees: [],\n  customerEmployees: [],\n  customer: null,\n  currentEmployeeId: null,\n  // eslint-disable-next-line no-shadow\n  currentEmployee: derived((state: State) => {\n    return state.customer\n      ? state.customerEmployees.find((e) => e.id === state.currentEmployeeId)\n      : null;\n  }),\n  // The active step in \"create offer\"\n  activeCreateOrderStep: CreateOrderSteps.CUSTOMER_INFO,\n  mesterIdCustomers: [],\n  buildingTypes: [],\n  offerOptions: [],\n  technicalServices: [],\n  cms: {},\n  error: null,\n  mesterIdLogin: false,\n};\n","// eslint-disable-next-line no-shadow\nexport enum Page {\n  LOGIN,\n  HOME,\n  RESET_PASSWORD,\n\n  ORDER_LIST,\n  VIEW_ORDER,\n  VIEW_ORDER_PROJECT,\n  CREATE_ORDER,\n\n  TECHNICAL_SERVICES,\n\n  CUSTOMERS,\n  ADMIN,\n  DOCUMENTATION,\n\n  USER,\n  COMPANY,\n\n  ERROR,\n  CRM = 18,\n  EMULATE,\n  AUTH,\n  CUSTOMER_SELECTOR,\n}\n","/* eslint-disable no-shadow */\nexport enum UserRole {\n  ADMIN = \"ADMIN\",\n  USER = \"USER\",\n}\nexport enum UserType {\n  COMPANY = \"COMPANY\",\n  EMPLOYEE = \"EMPLOYEE\",\n}\n\nexport type User = {\n  id: string;\n  customerId: string;\n  username: string;\n  role: UserRole;\n  type: UserType;\n  emulatedType?: UserType;\n  isAdmin: boolean;\n};\n","export const PreTreColors = {\n  pretre: \"#CA0000\",\n  redbrown: \"#441B17\",\n  grillaBrite: \"#C24E44\",\n  beis: \"#430A03\",\n  piemonte: \"#891F0C\",\n  weakBrite: \"#FBF4F4\",\n  borderlineGray: \"#D9D9D9\",\n};\n\nexport const LayoutConstants = {\n  sidebarBreak: 900,\n};\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Link = styled(\"a\")`\n  color: ${PreTreColors.pretre};\n  cursor: pointer;\n  &:hover {\n    color: ${PreTreColors.beis};\n  }\n`;\n\nexport const ActionLink = styled(\"a\")`\n  margin: 1rem;\n  background: none;\n  border: none;\n  width: 100%;\n  text-align: center;\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n  cursor: pointer;\n  text-decoration: underline;\n  &:hover {\n    opacity: 0.8;\n  }\n`;\n","import React, { FunctionComponent, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { Link } from \"../Link/Link\";\n\nimport { PreTreColors, LayoutConstants } from \"../../styles/constants\";\n\nconst PageContainer = styled(\"div\")`\n  margin: 1rem;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  overflow-x: auto;\n`;\n\nconst PageTitle = styled(\"div\")`\n  background-color: ${PreTreColors.beis};\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  overflow: hidden;\n`;\n\nconst PageHeaderWrapper = styled(\"div\")`\n  padding: 1rem 2.5rem;\n`;\n\nconst PageBackLink = styled(\"div\")`\n  color: white;\n  font-size: 0.1rem;\n  display: flex;\n  a {\n    font-size: 1.5rem;\n  }\n`;\n\nconst BackSvg = styled.svg`\n  align-self: center;\n  width: 11px;\n  height: 12px;\n  margin-right: 4px;\n`;\n\nconst LinkButton = styled(Link)`\n  color: white;\n  font-size: 0.875rem;\n  text-decoration: underline;\n  &:hover {\n    color: #f2f2f2;\n  }\n`;\n\nconst PageHeader = styled(\"h1\")`\n  color: white;\n\n  font-size: 2rem;\n  font-weight: 700;\n\n  @media only screen and (max-width: ${`${LayoutConstants.sidebarBreak}px`}) {\n    font-size: 2rem;\n  }\n`;\n\ntype Props = {\n  title?: string;\n  backLink?: { label: string; url: string };\n  children?: ReactNode;\n  headerItems?: ReactNode;\n};\n\ntype BackLinkProps = {\n  label: string;\n  url: string;\n};\n\nconst BackLink: FunctionComponent<BackLinkProps> = ({ label, url }) => {\n  return (\n    <PageBackLink>\n      <BackSvg\n        viewBox=\"0 0 11 12\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          d=\"M10.0288 5.10421H3.40251L7.25336 1.25422L5.99914 0L0 6L5.99914 12L7.25336 10.7458L3.40251 6.89579H10.0288V5.10421Z\"\n          fill=\"white\"\n        />\n      </BackSvg>\n      <LinkButton href={url}>{label}</LinkButton>\n    </PageBackLink>\n  );\n};\n\nexport const Page: FunctionComponent<Props> = ({\n  title,\n  children,\n  headerItems,\n  backLink,\n}) => {\n  return (\n    <>\n      {title ? (\n        <PageTitle>\n          <PageHeaderWrapper>\n            {backLink ? (\n              <BackLink url={backLink.url} label={backLink.label} />\n            ) : null}\n            <PageHeader>{title}</PageHeader>\n          </PageHeaderWrapper>\n\n          {headerItems}\n        </PageTitle>\n      ) : null}\n      <PageContainer>{children}</PageContainer>\n    </>\n  );\n};\n","import {\n  createActionsHook,\n  createStateHook,\n  createEffectsHook,\n} from \"overmind-react\";\nimport { IContext } from \"overmind\";\n\nimport { config } from \"./config\";\n\nexport type Context = IContext<{\n  state: typeof config.state;\n  actions: typeof config.actions;\n  effects: typeof config.effects;\n}>;\n\nexport type RootState = typeof config.state;\n\nexport const useAppState = createStateHook<Context>();\nexport const useActions = createActionsHook<Context>();\nexport const useEffects = createEffectsHook<Context>();\n// export const useReaction = createReactionHook<Context>()\n","import styled from \"styled-components\";\n\nexport const Grid = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: start;\n`;\ntype RowProps = {\n  size?: number;\n};\nexport const Row = styled(\"div\")<RowProps>`\n  display: flex;\n  ${(props) => (props.size ? { flex: props.size } : null)};\n  @media only screen and (max-width: 850px) {\n    flex-direction: column;\n  }\n`;\ntype ColProps = {\n  size: number;\n};\nexport const Col = styled(\"div\")<ColProps>`\n  flex: ${(props) => props.size};\n  margin: 1rem;\n`;\n","import { css } from \"styled-components\";\nimport { PreTreColors } from \"./constants\";\n\ntype Props = {\n  error?: boolean;\n};\nexport const baseInputStyles = css<Props>`\n  border: 1px solid\n    ${({ error }) => (error ? `red` : PreTreColors.borderlineGray)};\n  background: #f4f4f4;\n\n  box-sizing: border-box;\n  border-radius: 5px;\n  color: ${PreTreColors.beis};\n\n  font-size: 1.125rem;\n  font-weight: 700;\n  padding: 0.7rem;\n`;\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nimport { baseInputStyles } from \"../../styles/baseInput\";\n\ntype Props = {\n  error?: boolean;\n};\nexport const Input = styled(\"input\")<Props>`\n  ${baseInputStyles}\n  display: inline-block;\n  position: relative;\n  width: 100%;\n  ::placeholder {\n    color: ${PreTreColors.beis};\n    opacity: 0.7;\n  }\n\n  &:disabled {\n    background: #ddd;\n    border: 1px solid #b7b7b7;\n  }\n`;\nexport const InputWrapper = styled(\"div\")`\n  width: 100%;\n`;\nexport const Suffix = styled(\"span\")`\n  width: 100%;\n  justify-content: end;\n`;\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Label = styled(\"label\")`\n  color: ${PreTreColors.beis};\n  font-size: 1.125rem;\n  margin-bottom: 0.5rem;\n`;\n","import styled, { css } from \"styled-components\";\n\ntype Props = {\n  suffix?: string;\n};\n\nconst getSuffixStyle = (suffix: string) => {\n  return css`\n    position: relative;\n\n    ::after {\n      position: absolute;\n      top: 50px;\n      right: 1.5rem;\n      transition: all 0.05s ease-in-out;\n    }\n    :hover::after,\n    :focus-within::after {\n      right: 1.5em;\n    }\n\n    ::after {\n      content: \"${suffix}\";\n    }\n  `;\n};\n\nexport const FormControl = styled(\"div\")<Props>`\n  display: flex;\n  flex-direction: column;\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n\n  ${(props: Props) => props.suffix && getSuffixStyle(props.suffix)}\n`;\n\nexport const Error = styled(\"p\")`\n  color: red;\n  margin-top: 0.5rem;\n  &:first-letter {\n    text-transform: uppercase;\n  }\n`;\n","import styled from \"styled-components\";\n\nexport const RequiredFieldAsterisk = styled(\"span\")`\n  color: red;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { RequiredFieldAsterisk } from \"./RequiredFieldIndicator.styles\";\n\nexport const RequiredFieldIndicator: FunctionComponent = () => {\n  return <RequiredFieldAsterisk>*</RequiredFieldAsterisk>;\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Input } from \"./FormInput.styles\";\nimport { Label } from \"../Label/Label\";\nimport { FormControl, Error } from \"../FormControl/FormControl\";\nimport { RequiredFieldIndicator } from \"../RequiredFieldIndicator/RequiredFieldIndicator\";\n\ntype Props = {\n  htmlFor?: string;\n  label?: string;\n  name: string;\n  type: string;\n  placeholder?: string;\n  defaultValue?: string;\n  inputRef?: any;\n  error?: any;\n  required?: boolean;\n  suffix?: string;\n  onChange?: (value: string) => void;\n  readonly?: any;\n  disabled?: any;\n};\nexport const FormInput: FunctionComponent<Props> = ({\n  htmlFor,\n  label,\n  name,\n  type,\n  placeholder,\n  defaultValue,\n  inputRef,\n  error,\n  required,\n  suffix,\n  onChange,\n  disabled,\n  readonly,\n}) => {\n  return (\n    <FormControl suffix={suffix}>\n      <Label htmlFor={htmlFor}>\n        {label || null}\n        {required ? <RequiredFieldIndicator /> : \"\"}\n      </Label>\n      <Input\n        readOnly={readonly}\n        name={name}\n        type={type}\n        placeholder={placeholder}\n        defaultValue={defaultValue}\n        ref={inputRef}\n        error={!!error}\n        disabled={disabled}\n        onChange={(e) => (onChange ? onChange(e.target.value) : () => {})}\n      />\n\n      {error ? <Error>{error}</Error> : null}\n    </FormControl>\n  );\n};\n","import styled, { css } from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ntype ButtonProps = {\n  secondary?: boolean;\n  disabled?: boolean;\n};\n\nexport const Label = styled(\"label\")`\n  font-size: 18px;\n  color: white;\n`;\n\nconst disabledStyle = css`\n  background-color: ${PreTreColors.borderlineGray};\n  color: white;\n  cursor: not-allowed;\n\n  &:hover {\n    background-color: ${PreTreColors.borderlineGray};\n  }\n`;\n\nexport const BlockButton = styled(\"button\")<ButtonProps>`\n  background-color: ${(props: ButtonProps) =>\n    props.secondary ? PreTreColors.beis : PreTreColors.pretre};\n  height: auto;\n  width: 100%;\n  font-size: 1.5rem;\n  font-weight: 700;\n  color: white;\n  padding: 15px 0;\n  border-radius: 10px;\n  border: 0;\n  cursor: pointer;\n  &:hover {\n    background-color: ${(props: ButtonProps) =>\n      props.secondary ? \"#310802\" : \"#b30000\"};\n  }\n  &:focus {\n    outline: none;\n    border: none;\n    border-color: inherit;\n    box-shadow: none;\n  }\n\n  ${(props: ButtonProps) => props.disabled && disabledStyle}\n`;\n\nexport const LinkButton = styled(\"button\")`\n  margin: 1rem;\n  background: none;\n  border: none;\n  width: 100%;\n  text-align: center;\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n  cursor: pointer;\n  text-decoration: underline;\n  &:hover {\n    opacity: 0.8;\n  }\n`;\n\nexport const SelectableBlockButton = styled(\"button\")<ButtonProps>`\n  background-color: ${PreTreColors.weakBrite};\n  height: auto;\n  width: 100%;\n  font-size: 1.5rem;\n  font-weight: 700;\n  color: ${PreTreColors.pretre};\n  padding: 15px 0;\n  border-radius: 10px;\n  border: 1px solid ${PreTreColors.pretre};\n  cursor: pointer;\n  &:hover {\n    background-color: ${PreTreColors.pretre};\n    color: white;\n  }\n\n  ${(props: ButtonProps) => props.disabled && disabledStyle}\n`;\n","import styled from \"styled-components\";\n\ntype Props = {\n  row?: boolean;\n  align?: boolean;\n};\nexport const FormControl = styled(\"div\")<Props>`\n  display: flex;\n  flex-direction: ${(props: Props) => (props.row ? \"row\" : \"column\")};\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n  align-items: ${(props: Props) => (props.align ? \"center\" : \"\")};\n`;\n\nexport const Error = styled(\"p\")`\n  color: red;\n  margin-top: 0.5rem;\n  &:first-letter {\n    text-transform: uppercase;\n  }\n`;\n","export const PreTreColors = {\n  pretre: \"#CA0000\",\n  redbrown: \"#441B17\",\n  grillaBrite: \"#C24E44\",\n  beis: \"#430A03\",\n  piemonte: \"#891F0C\",\n  weakBrite: \"#FBF4F4\",\n  borderlineGray: \"#D9D9D9\",\n};\n\nexport const LayoutConstants = {\n  sidebarBreak: 900,\n};\n","import { css } from \"styled-components\";\nimport { PreTreColors } from \"./constants\";\n\ntype Props = {\n  error?: boolean;\n};\nexport const baseInputStyles = css<Props>`\n  border: 1px solid\n    ${({ error }) => (error ? `red` : PreTreColors.borderlineGray)};\n  background: #f4f4f4;\n\n  box-sizing: border-box;\n  border-radius: 5px;\n  color: ${PreTreColors.beis};\n\n  font-size: 1.125rem;\n  font-weight: 700;\n  padding: 0.7rem;\n`;\n","import styled from \"styled-components\";\nimport { baseInputStyles } from \"../../styles/baseInput\";\n\ntype Props = {\n  error?: boolean;\n  selectWidth?: string;\n  readonly?: boolean;\n};\n\nexport const SelectElement = styled(\"select\")<Props>`\n  ${baseInputStyles}\n  font-size: 1rem;\n  padding: 0.7rem;\n  width: ${({ selectWidth }) => selectWidth || \"100%\"};\n  appearance: none;\n  font-weight: 700;\n  background: #f4f4f4\n    url(\"data:image/svg+xml;utf8,<svg width='14' height='19' viewBox='0 0 14 19' fill='none' xmlns='http://www.w3.org/2000/svg'><path d='M8.04526 0L8.04526 16.193L5.95613 16.193L5.95613 -9.13186e-08L8.04526 0Z' fill='%23CA0000'/><path d='M-6.39614e-08 11.7015L1.46327 10.2383L7 15.776L12.5367 10.2383L14 11.7015L6.99997 18.7006L-6.39614e-08 11.7015Z' fill='%23CA0000'/></svg>\")\n    no-repeat;\n  background-position: right 5px top 50%;\n  pointer-events: ${(props: Props) => (props.readonly ? \"none\" : \"\")};\n\n  &:disabled {\n    background: #ddd;\n    border: 1px solid #b7b7b7;\n  }\n`;\n","import styled from \"styled-components\";\n\nexport const RequiredFieldAsterisk = styled(\"span\")`\n  color: red;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { RequiredFieldAsterisk } from \"./RequiredFieldIndicator.styles\";\n\nexport const RequiredFieldIndicator: FunctionComponent = () => {\n  return <RequiredFieldAsterisk>*</RequiredFieldAsterisk>;\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport { FormControl, Error } from \"../../elements/FormControl/FormControl\";\nimport { SelectElement } from \"./Select.styles\";\n\nimport { RequiredFieldIndicator } from \"../../elements/RequiredFieldIndicator/RequiredFieldIndicator\";\n\ntype SelectOption = {\n  label: string;\n  value: any;\n};\n\ntype Props = {\n  name?: string;\n  label?: string;\n  options: SelectOption[];\n  error?: string;\n  inputRef?: any;\n  selectedValue?: string | number;\n  required?: boolean;\n  disabled?: boolean;\n  // eslint-disable-next-line no-unused-vars\n  onSelectionChanged?: (value: any) => void;\n  row?: boolean;\n  selectWidth?: string;\n  align?: boolean;\n  readonly?: boolean;\n  noDefault?: boolean;\n};\n\nexport const Select: FunctionComponent<Props> = ({\n  name,\n  label,\n  options,\n  onSelectionChanged,\n  error,\n  inputRef,\n  selectedValue,\n  required,\n  disabled,\n  row,\n  selectWidth,\n  align,\n  readonly,\n  noDefault = false,\n}) => {\n  const { t } = useTranslation();\n  return (\n    <FormControl align={align} row={row}>\n      {label ? (\n        <Label>\n          {label}\n          {required ? <RequiredFieldIndicator /> : \"\"}\n        </Label>\n      ) : null}\n      <SelectElement\n        readonly={readonly}\n        selectWidth={selectWidth}\n        name={name}\n        ref={inputRef}\n        value={selectedValue}\n        disabled={disabled}\n        onChange={(e) => {\n          if (!onSelectionChanged) {\n            return;\n          }\n          if (!e.target.value) {\n            onSelectionChanged(null);\n          } else {\n            onSelectionChanged(e.target.value);\n          }\n        }}\n        error={!!error}\n      >\n        {!noDefault ? <option value={null} label={t(\"Choose\")} /> : null}\n\n        {options.map((o) => (\n          <option key={o.value} label={o.label} value={o.value} />\n        ))}\n      </SelectElement>\n      {error ? <Error>{error}</Error> : null}\n    </FormControl>\n  );\n};\n","import styled from \"styled-components\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport { baseInputStyles } from \"../../styles/baseInput\";\n\nexport const Icon = styled.svg``;\n\n// Hide checkbox visually but remain accessible to screen readers.\n// Source: https://polished.js.org/docs/#hidevisually\nexport const HiddenCheckbox = styled.input.attrs({ type: \"checkbox\" })`\n  border: 0;\n  clip: rect(0 0 0 0);\n  clippath: inset(50%);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`;\n\ntype StyledCheckboxProps = {\n  checked: boolean;\n  error?: boolean;\n};\n\nexport const StyledCheckbox = styled(\"div\")<StyledCheckboxProps>`\n  ${baseInputStyles}\n  cursor:pointer;\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  padding: 0.35rem;\n  transition: all 150ms;\n\n  ${HiddenCheckbox}:focus + & {\n    box-shadow: 0 0 0 3px pink;\n  }\n\n  ${Icon} {\n    visibility: ${(props: any) => (props.checked ? \"visible\" : \"hidden\")};\n  }\n`;\n\nexport const CheckboxContainer = styled.div`\n  display: inline-block;\n  vertical-align: middle;\n\n  ${Label} {\n    margin-left: 1.5rem;\n    display: flex;\n    align-items: center;\n\n    ${StyledCheckbox} {\n      margin-right: 0.5rem;\n    }\n  }\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport { FormControl, Error } from \"../../elements/FormControl/FormControl\";\nimport {\n  CheckboxContainer,\n  HiddenCheckbox,\n  StyledCheckbox,\n  Icon,\n} from \"./Checkbox.styles\";\n\ntype Props = {\n  checked?: boolean;\n  name?: string;\n  label?: string;\n  error?: string;\n  required?: any;\n  inputRef?: any;\n  value?: any;\n  // eslint-disable-next-line no-unused-vars\n  onChange?: (e: any) => void;\n};\n// https://codesandbox.io/s/building-a-checkbox-component-with-react-and-styled-components-forked-fc4rc?file=/src/index.js:200-257\nexport const Checkbox: FunctionComponent<Props> = ({\n  checked,\n  label,\n  error,\n  inputRef,\n  ...props\n}) => {\n  return (\n    <FormControl>\n      <CheckboxContainer>\n        <Label style={{ marginLeft: \"0rem\" }}>\n          <HiddenCheckbox checked={checked} {...props} ref={inputRef} />\n          <StyledCheckbox checked={checked} error={!!error}>\n            <Icon viewBox=\"0 0 24 18\">\n              <path\n                d=\"M0 9.91357L2.60829 6.52202L9.39163 12.2615L20.3488 0L23.4791 2.86985L9.65201 18L0 9.91357Z\"\n                fill=\"#CA0000\"\n              />\n            </Icon>\n          </StyledCheckbox>\n          {label || null}\n        </Label>\n        {error ? <Error>{error}</Error> : null}\n      </CheckboxContainer>\n    </FormControl>\n  );\n};\n","import React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { Col, Grid, Row } from \"@frontend/common/src/elements/Grid/Grid\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { useTranslation } from \"react-i18next\";\nimport { LinkButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { Select } from \"../../../../../components/Select/Select\";\nimport { Checkbox } from \"../../../../../components/Checkbox/Checkbox\";\nimport { Order } from \"../../../../../types/Order\";\nimport { useActions, useAppState } from \"../../../../../overmind\";\n\ntype Props = {\n  orders: Order[];\n};\n\nexport const OrderFilter: FunctionComponent<Props> = ({ orders }) => {\n  const { t } = useTranslation();\n  const [projectOptions, setProjectOptions] = useState([]);\n  const [peopleOptions, setPeopleOptions] = useState([]);\n  const [yearOptions, setYearOptions] = useState([]);\n  const [statusOptions, setStatusOptions] = useState([]);\n  const [productOptions, setProductOptions] = useState([]);\n\n  const actions = useActions();\n\n  const state = useAppState();\n\n  useEffect(() => {\n    const projects: {\n      [index: string]: { label: string; value: string };\n    } = {};\n    const people: { [index: string]: { label: string | number; value: any } } =\n      {};\n    const years: { [index: number]: { label: string | number; value: any } } =\n      {};\n    const statuses: {\n      [index: number]: { label: string | number; value: any };\n    } = {};\n    const products: {\n      [index: string]: { label: string; value: any };\n    } = {};\n    orders.forEach((o) => {\n      if (o.isProjectMaster) {\n        projects[o.id] = {\n          label: o.id,\n          value: o.id,\n        };\n      }\n\n      const employee = state.customerEmployees.find(\n        (e) => e.id === o.customerEmployeeId\n      );\n\n      if (employee) {\n        people[employee.id as any] = {\n          label: `${employee.name} `,\n          value: employee.id,\n        };\n      }\n\n      if (o.delivery) {\n        const date = o.delivery;\n        years[date.getFullYear()] = {\n          label:\n            date.getFullYear() === 1900\n              ? \"Ukjent leveringsdato\"\n              : date.getFullYear(),\n          value: date.getFullYear(),\n        };\n      }\n\n      if (!statuses[o.status]) {\n        statuses[o.status] = {\n          label: o.status,\n          value: o.valueChainStatus,\n        };\n      }\n      o.subProjects.forEach((x) => {\n        if (!products[x.product] && x.product !== \"\") {\n          products[x.product] = {\n            label: x.product,\n            value: x.product,\n          };\n        }\n      });\n    });\n\n    const thisYear = new Date().getFullYear();\n    years[thisYear] = {\n      label: thisYear,\n      value: thisYear,\n    };\n\n    setProjectOptions(Object.values(projects).reverse());\n    setPeopleOptions(\n      Object.values(people).sort((a, b) =>\n        `${a.label}`.localeCompare(`${b.label}`)\n      )\n    );\n    setYearOptions(Object.values(years).reverse());\n    setStatusOptions(Object.values(statuses).sort((a, b) => a.value - b.value));\n    setProductOptions(Object.values(products));\n  }, [orders, state.customerEmployees, state.pretreEmplyees]);\n\n  return (\n    <Grid>\n      <Row>\n        <Col size={1}>\n          <Select\n            label={t(\"Project no.\")}\n            options={projectOptions}\n            selectedValue={state.orders.orderFilter.projectId || \"\"}\n            onSelectionChanged={(value) =>\n              actions.orders.changeOrderFilter({\n                projectId: value || null,\n              })\n            }\n          />\n          <FormInput\n            label={t(\"FreeText\")}\n            type=\"text\"\n            name=\"freeText\"\n            defaultValue={`${state.orders.orderFilter.freeText || \"\"}`}\n            onChange={(value) =>\n              actions.orders.changeOrderFilter({\n                freeText: value || null,\n              })\n            }\n          />\n          <FormInput\n            label={t(\"Customer Order no.\")}\n            type=\"text\"\n            name=\"customerOrderNumber\"\n            defaultValue={`${\n              state.orders.orderFilter.customerOrderNumber || \"\"\n            }`}\n            onChange={(value) =>\n              actions.orders.changeOrderFilter({\n                customerOrderNumber: value || null,\n              })\n            }\n          />\n          <Select\n            label={t(\"Status\")}\n            options={statusOptions}\n            selectedValue={state.orders.orderFilter.status || \"\"}\n            onSelectionChanged={(value) =>\n              actions.orders.changeOrderFilter({\n                status: parseInt(value, 10) || null,\n              })\n            }\n          />\n        </Col>\n        <Col size={1}>\n          <Select\n            label={t(\"Contact\")}\n            options={peopleOptions}\n            selectedValue={state.orders.orderFilter.contactId || \"\"}\n            onSelectionChanged={(value) =>\n              actions.orders.changeOrderFilter({\n                contactId: value || null,\n              })\n            }\n          />\n          <Select\n            label={t(\"Product Group\")}\n            options={productOptions}\n            selectedValue={state.orders.orderFilter.product || \"\"}\n            onSelectionChanged={(value) =>\n              actions.orders.changeOrderFilter({\n                product: value,\n              })\n            }\n          />\n          <Select\n            label={t(\"Delivery year\")}\n            options={yearOptions}\n            selectedValue={state.orders.orderFilter.deliveryYear || \"\"}\n            onSelectionChanged={(value) =>\n              actions.orders.changeOrderFilter({\n                deliveryYear: parseInt(value, 10) || null,\n              })\n            }\n          />\n          <FormInput\n            label=\"Prosjektnavn\"\n            type=\"text\"\n            name=\"marked\"\n            defaultValue={`${state.orders.orderFilter.projectName || \"\"}`}\n            onChange={(value) =>\n              actions.orders.changeOrderFilter({ projectName: value })\n            }\n          />\n        </Col>\n        <Col\n          size={1}\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            justifyContent: \"space-between\",\n            marginTop: \"3.1rem\",\n          }}\n        >\n          <Checkbox\n            checked={state.orders.orderFilter.hideDeliveredOrders || false}\n            label={t(\"Hide delivered orders\")}\n            onChange={(e) =>\n              actions.orders.changeOrderFilter({\n                hideDeliveredOrders: e.target.checked,\n              })\n            }\n          />\n          <LinkButton\n            style={{ textAlign: \"left\" }}\n            onClick={() => actions.orders.clearOrderFilter()}\n          >\n            Tøm filter\n          </LinkButton>\n        </Col>\n      </Row>\n    </Grid>\n  );\n};\n","import { useEffect } from \"react\";\n\n// https://usehooks.com/useOnClickOutside/\nexport function useOnClickOutside(ref: any, handler: any) {\n  useEffect(\n    () => {\n      const listener = (event: any) => {\n        // Do nothing if clicking ref's element or descendent elements. Also checks for Material UI menu.\n        if (\n          !ref.current ||\n          ref.current.contains(event.target) ||\n          event.target.closest(\".MuiDialog-root\") !== null ||\n          event.target.closest(\".MuiPopover-root\") !== null\n        ) {\n          return;\n        }\n\n        handler(event);\n      };\n\n      document.addEventListener(\"mousedown\", listener);\n      document.addEventListener(\"touchstart\", listener);\n\n      return () => {\n        document.removeEventListener(\"mousedown\", listener);\n        document.removeEventListener(\"touchstart\", listener);\n      };\n    }, // ... but to optimize you can wrap handler in useCallback before ... // ... callback/cleanup to run every render. It's not a big deal ... // ... function on every render that will cause this effect ... // It's worth noting that because passed in handler is a new ... // Add ref and handler to effect dependencies\n    // ... passing it into this hook.\n    [ref, handler]\n  );\n}\n","import React, { FunctionComponent, useRef } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { useOnClickOutside } from \"webapp/src/hooks/useOnClickOutside\";\n\nexport const ColumnPickerContainer = styled(\"div\")`\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: 1rem;\n  background: #f4f4f4;\n  display: flex;\n  flex-direction: column;\n`;\n\nconst activeItemStyle = css`\n  font-weight: bold;\n`;\n\ntype ItemProps = {\n  isActive?: boolean;\n};\n\nexport const ColumnItem = styled(\"span\")<ItemProps>`\n  cursor: pointer;\n  ${(props: ItemProps) => props.isActive && activeItemStyle}\n`;\ntype Props = {\n  availableColumns: string[];\n  selectedColumns: string[];\n  onColumnsChanged: (columns: string[]) => void;\n  onClose: () => void;\n};\n\nexport const ColumnPicker: FunctionComponent<Props> = ({\n  availableColumns,\n  selectedColumns,\n  onColumnsChanged,\n  onClose,\n}) => {\n  const ref = useRef();\n  useOnClickOutside(ref, () => {\n    onClose();\n  });\n  return (\n    <ColumnPickerContainer>\n      <span style={{ fontWeight: \"bold\" }}>Velg kolonner:</span>\n      {availableColumns.map((c) => {\n        return (\n          <ColumnItem\n            isActive={!!selectedColumns.includes(c)}\n            onClick={() => {\n              let newColumns: string[] = [...selectedColumns];\n              if (newColumns.includes(c)) {\n                newColumns = newColumns.filter((col) => c !== col);\n              } else {\n                newColumns.push(c);\n              }\n\n              onColumnsChanged(newColumns);\n            }}\n          >\n            {c}\n          </ColumnItem>\n        );\n      })}\n    </ColumnPickerContainer>\n  );\n};\n","// eslint-disable-next-line no-shadow\nexport enum Direction {\n  ascending = \"ascending\",\n  descending = \"descending\",\n  initial = \"initial\",\n}\n","import React, { FunctionComponent } from \"react\";\nimport styled from \"styled-components\";\nimport { Direction } from \"../../Direction\";\n\nexport const Wrapper = styled.svg`\n  vertical-align: middle;\n  margin-left: 1rem;\n  display: inline-block;\n`;\n\nconst down = (\n  <svg\n    width=\"9\"\n    height=\"16\"\n    viewBox=\"0 0 9 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M0.956859 12.2062C1.88121 13.2401 2.80212 14.2706 3.72654 15.3046C3.85834 15.4535 3.98928 15.5981 4.1211 15.747C4.42322 16.0843 5.05912 16.0843 5.36126 15.747C6.28561 14.7131 7.20652 13.6827 8.13094 12.6487C8.26274 12.4998 8.39369 12.3552 8.5255 12.2062C8.83189 11.8647 8.88925 11.299 8.5255 10.9661C8.19257 10.6597 7.61399 10.6023 7.28533 10.9661C6.36098 12 5.44007 13.0304 4.51566 14.0644C4.38385 14.2133 4.25291 14.358 4.1211 14.5069H5.36126C4.43691 13.473 3.516 12.4425 2.59158 11.4085C2.45978 11.2596 2.32884 11.115 2.19702 10.9661C1.89063 10.6246 1.26327 10.6288 0.956859 10.9661C0.623932 11.3298 0.632477 11.8374 0.956859 12.2062Z\"\n      fill=\"#CA0000\"\n    />\n    <path\n      d=\"M5.61958 14.9578V10.2992V2.88476V1.19784C5.61958 0.737376 5.21648 0.29917 4.74317 0.321431C4.26987 0.343683 3.86676 0.707424 3.86676 1.19784V5.8564V13.2708V14.9578C3.86676 15.4182 4.26987 15.8564 4.74317 15.8342C5.21648 15.8119 5.61958 15.4482 5.61958 14.9578Z\"\n      fill=\"#CA0000\"\n    />\n  </svg>\n);\n\nconst up = (\n  <svg\n    width=\"9\"\n    height=\"16\"\n    viewBox=\"0 0 9 16\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M1.49193 5.03389C2.41628 3.99999 3.33719 2.96953 4.26161 1.93556C4.39341 1.78664 4.52435 1.64201 4.65617 1.49308H3.416C4.34035 2.52698 5.26126 3.55744 6.18568 4.59141C6.31748 4.74033 6.44843 4.88497 6.58024 5.03389C6.88663 5.37538 7.51399 5.37111 7.8204 5.03389C8.15763 4.66586 8.14906 4.16175 7.8204 3.79373C6.89605 2.75982 5.97514 1.72936 5.05073 0.695394C4.91892 0.546472 4.78798 0.40184 4.65617 0.252916C4.35405 -0.0843053 3.71814 -0.0843053 3.416 0.252916C2.49165 1.28682 1.57074 2.31728 0.646324 3.35125C0.51452 3.50017 0.383576 3.6448 0.251764 3.79373C-0.0546293 4.13522 -0.11199 4.70094 0.251764 5.03389C0.589839 5.34114 1.1684 5.40192 1.49193 5.03389Z\"\n      fill=\"#CA0000\"\n    />\n    <path\n      d=\"M3.16174 1.04232V5.70089V13.1153V14.8022C3.16174 15.2627 3.56485 15.7009 4.03815 15.6786C4.51146 15.6564 4.91457 15.2927 4.91457 14.8022V10.1437V2.72924V1.04232C4.91457 0.581858 4.51146 0.143653 4.03815 0.165914C3.56485 0.188166 3.16174 0.551907 3.16174 1.04232Z\"\n      fill=\"#CA0000\"\n    />\n  </svg>\n);\nconst upDown = (\n  <svg\n    width=\"15\"\n    height=\"18\"\n    viewBox=\"0 0 15 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M1.49193 5.03389C2.41628 3.99999 3.33719 2.96953 4.26161 1.93556C4.39341 1.78664 4.52435 1.64201 4.65617 1.49308H3.416C4.34035 2.52698 5.26126 3.55744 6.18568 4.59141C6.31748 4.74033 6.44843 4.88497 6.58024 5.03389C6.88663 5.37538 7.51399 5.37111 7.8204 5.03389C8.15763 4.66586 8.14906 4.16175 7.8204 3.79373C6.89605 2.75982 5.97514 1.72936 5.05073 0.695394C4.91892 0.546472 4.78798 0.40184 4.65617 0.252916C4.35405 -0.0843053 3.71814 -0.0843053 3.416 0.252916C2.49165 1.28682 1.57074 2.31728 0.646324 3.35125C0.51452 3.50017 0.383576 3.6448 0.251764 3.79373C-0.0546293 4.13522 -0.11199 4.70094 0.251764 5.03389C0.589839 5.34114 1.1684 5.40192 1.49193 5.03389Z\"\n      fill=\"#CA0000\"\n    />\n    <path\n      d=\"M3.16174 1.04232V5.70089V13.1153V14.8022C3.16174 15.2627 3.56485 15.7009 4.03815 15.6786C4.51146 15.6564 4.91457 15.2927 4.91457 14.8022V10.1437V2.72924V1.04232C4.91457 0.581858 4.51146 0.143653 4.03815 0.165914C3.56485 0.188166 3.16174 0.551907 3.16174 1.04232Z\"\n      fill=\"#CA0000\"\n    />\n    <path\n      d=\"M6.95686 14.2062C7.88121 15.2401 8.80212 16.2706 9.72654 17.3046C9.85834 17.4535 9.98928 17.5981 10.1211 17.747C10.4232 18.0843 11.0591 18.0843 11.3613 17.747C12.2856 16.7131 13.2065 15.6827 14.1309 14.6487C14.2627 14.4998 14.3937 14.3552 14.5255 14.2062C14.8319 13.8647 14.8893 13.299 14.5255 12.9661C14.1926 12.6597 13.614 12.6023 13.2853 12.9661C12.361 14 11.4401 15.0304 10.5157 16.0644C10.3839 16.2133 10.2529 16.358 10.1211 16.5069H11.3613C10.4369 15.473 9.516 14.4425 8.59158 13.4085C8.45978 13.2596 8.32884 13.115 8.19702 12.9661C7.89063 12.6246 7.26327 12.6288 6.95686 12.9661C6.62393 13.3298 6.63248 13.8374 6.95686 14.2062Z\"\n      fill=\"#CA0000\"\n    />\n    <path\n      d=\"M11.6196 16.9578V12.2992V4.88476V3.19784C11.6196 2.73738 11.2165 2.29917 10.7432 2.32143C10.2699 2.34368 9.86676 2.70742 9.86676 3.19784V7.8564V15.2708V16.9578C9.86676 17.4182 10.2699 17.8564 10.7432 17.8342C11.2165 17.8119 11.6196 17.4482 11.6196 16.9578Z\"\n      fill=\"#CA0000\"\n    />\n  </svg>\n);\n\ntype Props = {\n  direction: Direction;\n};\nexport const SortIcon: FunctionComponent<Props> = ({ direction }) => {\n  return (\n    <Wrapper\n      width=\"15\"\n      height=\"18\"\n      viewBox=\"0 0 15 18\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      {direction === \"ascending\" ? down : null}\n      {direction === \"descending\" ? up : null}\n      {direction === \"initial\" ? upDown : null}\n    </Wrapper>\n  );\n};\n","// eslint-disable-next-line no-shadow\nexport enum EmployeeMessageReferenceType {\n  \"ORDER\" = 3,\n  \"ORDER_PROJECT\" = 4,\n  \"CUSTOMER\" = 5,\n}\nexport type CreateEmployeeMessage = {\n  employeeId: string;\n  referenceId: string;\n  referenceType: EmployeeMessageReferenceType;\n  message?: string;\n  loggedInEmail?: string;\n};\n","import styled from \"styled-components\";\n\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const TableHead = styled(\"thead\")`\n  background-color: ${PreTreColors.weakBrite};\n  text-align: left;\n`;\n\nexport const TableContainer = styled(\"table\")`\n  border-collapse: collapse;\n  width: 100%;\n  overflow-x: auto;\n`;\n\ntype TableRowProps = {\n  alternate?: any;\n  hasOpenHandler?: any;\n  notVisible?: boolean;\n  child?: boolean;\n};\n\ntype TableCellProps = {\n  child?: boolean;\n};\n\nexport const TableRow = styled(\"tr\")<TableRowProps>`\n  display: ${(props: TableRowProps) =>\n    props.notVisible ? \"none\" : \"table-row\"};\n  background-color: ${(props: TableRowProps) =>\n    props.alternate === true\n      ? \"#F4F4F5\"\n      : props.child === true\n      ? \"#eaeaec\"\n      : \"\"};\n  cursor: ${(props: TableRowProps) =>\n    props.hasOpenHandler === true ? \"pointer\" : \"arrow\"};\n`;\n\nexport const TableCell = styled(\"td\")<TableCellProps>`\n  padding: 0.5rem 0.5rem 0.5rem\n    ${(props: TableCellProps) => (props.child ? \"4rem\" : \"0.5rem\")};\n`;\n\nexport const TableHeading = styled(\"td\")`\n  padding: 0.5rem;\n  font-weight: bold;\n  cursor: pointer;\n`;\nexport const TableHeadingText = styled(\"span\")`\n  vertical-align: middle;\n`;\n","/* eslint-disable no-shadow */\nimport React, { useState } from \"react\";\nimport { ColumnPicker } from \"./components/ColumPicker/ColumnPicker\";\nimport { Direction } from \"./Direction\";\nimport { SortIcon } from \"./elements/SortIcon/SortIcon\";\n\nimport {\n  TableHead,\n  TableContainer,\n  TableRow,\n  TableCell,\n  TableHeading,\n  TableHeadingText,\n} from \"./Table.styles\";\n\nexport type Column<T> = {\n  headerName: string;\n  field?: keyof T;\n  alignEnd?: boolean;\n  render?: (row: T, openRows?: string[]) => any;\n};\n\ntype Props<T> = {\n  columns: Column<T>[];\n  availableColumns: Column<T>[];\n  data: T[];\n  keyField: any;\n  onRowSelected?: (row: T) => void;\n  noResultsText?: string;\n  onSortChanged?: (field: keyof T, direction: Direction) => void;\n  currentSortOption?: { field: keyof T; direction: Direction };\n  openRows?: string[];\n};\n\nexport const Table = <T extends { [index: string]: any }>({\n  columns,\n  data,\n  keyField,\n  onRowSelected,\n  availableColumns,\n  noResultsText,\n  onSortChanged,\n  currentSortOption,\n  openRows,\n}: Props<T>) => {\n  const [pickColumnsOpen, setPickColumnsOpen] = useState(false);\n  const [currentColumns, setCurrentColumns] = useState(columns);\n  return (\n    <div style={{ position: \"relative\" }}>\n      {/* <button onClick={() => setPickColumnsOpen(!pickColumnsOpen)}>Velg kolonner</button> */}\n      <TableContainer>\n        <TableHead>\n          <TableRow>\n            {columns.map((c, idx) => {\n              const style: any = { display: \"flex\", alignItems: \"center\" };\n              if (c.alignEnd) {\n                style.justifyContent = \"flex-end\";\n              }\n              if (c.field) {\n                return (\n                  <TableHeading\n                    onClick={() => {\n                      if (onSortChanged) {\n                        onSortChanged(\n                          c.field,\n                          currentSortOption\n                            ? currentSortOption.direction ===\n                              Direction.ascending\n                              ? Direction.descending\n                              : Direction.ascending\n                            : Direction.descending\n                        );\n                      }\n                    }}\n                    key={idx}\n                  >\n                    <div style={style}>\n                      <TableHeadingText>{c.headerName}</TableHeadingText>\n                      {onSortChanged ? (\n                        <SortIcon\n                          direction={\n                            currentSortOption &&\n                            c.field === currentSortOption.field\n                              ? currentSortOption.direction\n                              : Direction.initial\n                          }\n                        />\n                      ) : null}\n                    </div>\n                  </TableHeading>\n                );\n              }\n\n              return (\n                <TableHeading key={idx}>\n                  <TableHeadingText>{c.headerName}</TableHeadingText>\n                </TableHeading>\n              );\n            })}\n          </TableRow>\n        </TableHead>\n        <tbody>\n          {!data.length && (\n            <tr>\n              <td\n                style={{ textAlign: \"center\", padding: \"2rem\" }}\n                colSpan={currentColumns.length}\n              >\n                {noResultsText}\n              </td>\n            </tr>\n          )}\n          {data.map((row, rowIdx) => (\n            <>\n              <TableRow\n                key={row[keyField]}\n                hasOpenHandler={!!onRowSelected}\n                alternate={rowIdx % 2 === 0}\n                onClick={() => {\n                  if (onRowSelected) {\n                    onRowSelected(row);\n                  }\n                }}\n              >\n                {columns.map((c, idx) => {\n                  if (c.render) {\n                    return (\n                      <TableCell key={idx}>{c.render(row, openRows)}</TableCell>\n                    );\n                  }\n                  return <TableCell key={idx}>{row[c.field]}</TableCell>;\n                })}\n              </TableRow>\n              {row.subProjects !== undefined &&\n                row.subProjects.map((subRow: any, i: number) => {\n                  return (\n                    <TableRow\n                      child\n                      notVisible={!openRows.includes(`${row[keyField]}`)}\n                      key={subRow[keyField]}\n                      alternate={(i + 1) % 2 === 0}\n                    >\n                      {columns.map((col, index) => {\n                        if (col.render) {\n                          return (\n                            <TableCell child={index === 0} key={index}>\n                              {col.render(subRow)}\n                            </TableCell>\n                          );\n                        }\n                        return (\n                          <TableCell key={index}>{subRow[col.field]}</TableCell>\n                        );\n                      })}\n                    </TableRow>\n                  );\n                })}\n            </>\n          ))}\n        </tbody>\n      </TableContainer>\n      {pickColumnsOpen ? (\n        <ColumnPicker\n          onClose={() => setPickColumnsOpen(false)}\n          onColumnsChanged={(currentColumns: string[]) => {\n            setCurrentColumns(\n              availableColumns.filter((a) =>\n                currentColumns.includes(a.headerName)\n              )\n            );\n          }}\n          availableColumns={availableColumns.map((c) => c.headerName)}\n          selectedColumns={currentColumns.map((c) => c.headerName)}\n        />\n      ) : null}\n    </div>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Wrapper } from \"../../components/Table/elements/SortIcon/SortIcon\";\n\nconst plus = (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path fill=\"#CA0000\" d=\"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\" />\n  </svg>\n);\nconst minus = (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path fill=\"#CA0000\" d=\"M19,13H5V11H19V13Z\" />\n  </svg>\n);\n\ntype Props = {\n  expanded: boolean;\n};\nexport const ExpandIcon: FunctionComponent<Props> = ({ expanded }) => {\n  return (\n    <Wrapper\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      {expanded ? minus : plus}\n    </Wrapper>\n  );\n};\n","/* eslint-disable import/no-duplicates */\nimport { format as fnsFormat, parseISO, parse } from \"date-fns\";\nimport { nb } from \"date-fns/locale\";\n\n// eslint-disable-next-line no-shadow\nexport enum DateFormat {\n  // eslint-disable-next-line no-unused-vars\n  LONG = \"d. LLL yyyy\",\n  // eslint-disable-next-line no-unused-vars\n  ISO_DATE = \"yyyy-MM-dd\",\n  REGULAR = \"dd.MM.yyyy\",\n  INPUT = \"yyyy-mm-dd\",\n}\n\nexport function string2date(date: string): Date {\n  return parseISO(date);\n}\n\nexport function parsePretre(date: string): string {\n  if (!date || !date.trim().length) {\n    return null;\n  }\n  return parse(date, \"MM/dd/yyyy HH:mm:ss\", new Date()).toISOString();\n}\n\nexport function formatDate(\n  date: string | Date,\n  dateFormat = DateFormat.REGULAR\n) {\n  let d = date;\n  if (!d || (typeof d === \"string\" && !d.trim().length)) {\n    return null;\n  }\n\n  if (typeof date === \"string\") {\n    d = parseISO(date);\n  }\n  const test = fnsFormat(d as Date, dateFormat, { locale: nb });\n  return test;\n}\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Link = styled(\"a\")`\n  color: ${PreTreColors.pretre};\n  cursor: pointer;\n  &:hover {\n    color: ${PreTreColors.beis};\n  }\n`;\n\nexport const ActionLink = styled(\"a\")`\n  margin: 1rem;\n  background: none;\n  border: none;\n  width: 100%;\n  text-align: center;\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n  cursor: pointer;\n  text-decoration: underline;\n  &:hover {\n    opacity: 0.8;\n  }\n`;\n","export function formatMoney(amount: number): string {\n  return new Intl.NumberFormat(\"no-NB\", {\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 0,\n    style: \"currency\",\n    currency: \"NOK\",\n  }).format(amount);\n}\n","import { formatDate } from \"@frontend/common/src/helpers/date\";\nimport { Order } from \"../types/Order\";\n\nexport const getDeliveryDateText = (order: Order) => {\n  if (order.delivery.getFullYear() < 2000) {\n    return \"Ukjent leveringsdato\";\n  }\n  return formatDate(order.delivery);\n};\n","import React, { FunctionComponent } from \"react\";\n\nimport { EmployeeMessageReferenceType } from \"@frontend/common/src/types/EmployeeMessage\";\nimport { Employee } from \"@frontend/common/src/types/Employee\";\nimport { Link } from \"@frontend/common/src/elements/Link/Link\";\nimport { useActions } from \"../../overmind\";\n\ntype Props = {\n  employee: Employee;\n  referenceId: string;\n  referenceType: EmployeeMessageReferenceType;\n};\nexport const EmployeeLink: FunctionComponent<Props> = ({\n  employee: employe,\n  referenceId,\n  referenceType,\n}) => {\n  const actions = useActions();\n\n  if (!employe) {\n    return <span>Ikke satt</span>;\n  }\n  if (employe.hide) {\n    return <span>{employe.name}</span>;\n  }\n  return (\n    <Link\n      onClick={() =>\n        actions.onContactPerson({\n          employeeId: employe.id,\n          referenceId,\n          referenceType,\n        })\n      }\n    >{`${employe.name}`}</Link>\n  );\n};\n","import React, { FunctionComponent, useState } from \"react\";\nimport { Column, Table } from \"@frontend/common/src/components/Table/Table\";\nimport { ExpandIcon } from \"@frontend/common/src/elements/ExpandIcon/ExpandIcon\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { EmployeeMessageReferenceType } from \"@frontend/common/src/types/EmployeeMessage\";\nimport { formatDate } from \"@frontend/common/src/helpers/date\";\nimport { Order } from \"../../types/Order\";\nimport { Link } from \"../../elements/Link/Link\";\n\nimport { createUrl } from \"../../app/pages\";\nimport { RootState, useActions, useAppState } from \"../../overmind\";\nimport { formatMoney } from \"../../helpers/money\";\nimport { getDeliveryDateText } from \"../../helpers/order\";\nimport { EmployeeLink } from \"../EmployeeLink/EmployeeLink\";\n\ntype ColumnKey = keyof Order;\n\ntype Props = {\n  orders: Order[];\n  columns?: ColumnKey[];\n  noResultsText?: string;\n};\n\nconst createColumns = (\n  actions: any,\n  state: RootState,\n  t: any\n): Column<Order>[] => {\n  const allColumns: Column<Order>[] = [\n    {\n      headerName: t(\"Project no.\"),\n      field: \"id\",\n      render: (row, openRows) => {\n        const page =\n          row.projectId === null ? Page.VIEW_ORDER_PROJECT : Page.VIEW_ORDER;\n        if (row.isProjectMaster) {\n          return (\n            <div>\n              <ExpandIcon expanded={openRows.includes(row.id)} />\n              <Link href={createUrl(page, { id: row.id })}>{row.id}</Link>\n            </div>\n          );\n        }\n        return <Link href={createUrl(page, { id: row.id })}>{row.id}</Link>;\n      },\n    },\n    {\n      headerName: t(\"Product\"),\n      field: \"projectName\",\n    },\n    {\n      headerName: t(\"Status\"),\n      field: \"status\",\n    },\n    {\n      headerName: t(\"Marked\"),\n      field: \"marked\",\n    },\n    {\n      headerName: t(\"Order date\"),\n      field: \"orderDate\",\n      render: (row) => formatDate(row.orderDate),\n    },\n    {\n      headerName: \"Ønsket levering\",\n      field: \"delivery\",\n      render: (row) => getDeliveryDateText(row),\n    },\n    {\n      headerName: t(\"Constructor\"),\n      field: \"engineerId\",\n      render: (row) => {\n        const employee = state.pretreEmplyees.find(\n          (e) => e.id === row.engineerId\n        );\n        return (\n          <EmployeeLink\n            employee={employee}\n            referenceId={row.id}\n            referenceType={EmployeeMessageReferenceType.ORDER}\n          />\n        );\n      },\n    },\n    {\n      headerName: t(\"Constructor\"),\n      field: \"constructionName\",\n    },\n    {\n      headerName: t(\"Sales engineer\"),\n      field: \"calculationName\",\n    },\n    {\n      headerName: t(\"Sales engineer\"),\n      field: \"salesPersonId\",\n      render: (row) => {\n        const employee = state.pretreEmplyees.find(\n          (e) => e.id === row.salesPersonId\n        );\n        return (\n          <EmployeeLink\n            employee={employee}\n            referenceId={row.id}\n            referenceType={EmployeeMessageReferenceType.ORDER}\n          />\n        );\n      },\n    },\n    {\n      headerName: t(\"Customer Order no.\"),\n      field: \"customerOrderNumber\",\n    },\n    {\n      headerName: t(\"Order confirmation\"),\n      field: \"id\",\n      render: () => <Link href=\"#\">Klikk for OB</Link>,\n    },\n    {\n      headerName: t(\"Price\"),\n      field: \"sum\",\n      alignEnd: true,\n      render: (row) => {\n        let price = row.sum;\n        if (row.isProjectMaster) {\n          price = 0;\n          row.subProjects.forEach((x) => {\n            price += x.sum;\n          });\n        }\n        return (\n          <span style={{ textAlign: \"right\", float: \"right\" }}>\n            {row.isOrderPriceCalculated && row.sum > 0 ? (\n              <span style={{ display: \"flex\" }}>{formatMoney(price)}*</span>\n            ) : (\n              formatMoney(price)\n            )}\n          </span>\n        );\n      },\n    },\n  ];\n\n  return allColumns;\n};\n\nexport const OrderList: FunctionComponent<Props> = ({\n  orders,\n  columns,\n  noResultsText,\n}) => {\n  const { t } = useTranslation();\n  const actions = useActions();\n  const state = useAppState();\n  const allColumns = createColumns(actions, state, t);\n  let columnsToUse = null;\n  if (!columns) {\n    columnsToUse = allColumns;\n  } else {\n    columnsToUse = columns.map((c) => allColumns.find((a) => a.field === c));\n  }\n  const [openRows, setOpenRows] = useState<string[]>([]);\n  const onSelected = (selected: Order) => {\n    if (openRows.includes(selected.id)) {\n      const copy = openRows.filter((x) => x !== selected.id);\n      setOpenRows(copy);\n    } else {\n      setOpenRows([...openRows, selected.id]);\n    }\n  };\n  return (\n    <Table\n      noResultsText={noResultsText}\n      keyField=\"id\"\n      data={orders}\n      columns={columnsToUse}\n      availableColumns={allColumns}\n      onSortChanged={(field, direction) =>\n        actions.orders.setSortOption({ field, direction })\n      }\n      currentSortOption={state.orders.currentOrderSortOption}\n      openRows={openRows}\n      onRowSelected={onSelected}\n    />\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nconst List = styled(\"div\")`\n  flex-wrap: wrap;\n  align-items: center;\n  display: flex;\n  margin-left: 2em;\n  margin-right: 2em;\n  justify-content: center;\n  text-align: center;\n`;\n\ntype StepProps = {\n  align: any;\n};\n\nconst Step = styled(\"a\")<StepProps>`\n  color: #fff;\n\n  margin: 0.25rem;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  border-radius: 4px;\n  display: inline-flex;\n  background-color: ${PreTreColors.pretre};\n  &[disabled] {\n    background-color: #dbdbdb;\n    border-color: #cccccc;\n    color: #7a7a7a;\n    opacity: 0.5;\n    cursor: not-allowed;\n  }\n`;\n\nconst currentLinkStyle = css`\n  background-color: ${PreTreColors.pretre};\n  color: white;\n`;\n\ntype LinkProps = {\n  current?: any;\n} & React.HTMLProps<HTMLAnchorElement>;\nconst Link = styled(\"a\")<LinkProps>`\n  color: #363636;\n  border: 1px solid ${PreTreColors.grillaBrite};\n  min-width: auto;\n  margin: 0.25rem;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  border-radius: 4px;\n  display: inline-flex;\n\n  ${(props: LinkProps) => props.current && currentLinkStyle}\n`;\nconst Ellipsis = styled(\"a\")`\n  font-size: 1em;\n  justify-content: center;\n  margin: 0.25rem;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  text-align: center;\n\n  align-items: center;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  box-shadow: none;\n  display: inline-flex;\n  font-size: 1rem;\n  height: 2.25em;\n  justify-content: flex-start;\n  line-height: 1.5;\n  padding: calc(0.375em - 1px) calc(0.625em - 1px);\n  position: relative;\n  vertical-align: top;\n`;\n\ntype PaginationProps = {\n  align: any;\n};\n\nconst Pagination = styled(\"div\")<PaginationProps>`\n  align-items: center;\n  display: flex;\n  justify-content: center;\n  text-align: center;\n`;\n\nfunction renderLink(pageNumber: number, key: string, link: string) {\n  return (\n    <Link key={key} href={`${link}${pageNumber}`}>\n      {pageNumber}\n    </Link>\n  );\n}\n\nfunction renderPrev(currentPage: number, pageCount: number, link: string) {\n  return [\n    <Step\n      key=\"prev\"\n      {...(currentPage === 1 ? { disabled: true } : {})}\n      align=\"previous\"\n      href={currentPage === 1 ? \"#\" : `${link}${currentPage - 1}`}\n    >\n      Forrige\n    </Step>,\n  ];\n}\n\nfunction renderNext(currentPage: number, pageCount: number, link: string) {\n  return [\n    <Step\n      key=\"next\"\n      {...(currentPage >= pageCount ? { disabled: true } : {})}\n      align=\"next\"\n      href={currentPage >= pageCount ? \"#\" : `${link}${currentPage + 1}`}\n    >\n      Neste\n    </Step>,\n  ];\n}\n\nfunction renderLinks(currentPage: number, pageCount: number, link: string) {\n  const items = [];\n  if (currentPage !== 1 && pageCount > 1) {\n    items.push(renderLink(1, \"first\", link));\n    if (currentPage !== 2) {\n      items.push(<Ellipsis key=\"space-before\">…</Ellipsis>);\n      items.push(renderLink(currentPage - 1, \"prev-current\", link));\n    }\n  }\n\n  items.push(\n    <Link key=\"current\" current>\n      {currentPage}\n    </Link>\n  );\n\n  if (currentPage !== pageCount && pageCount > currentPage) {\n    items.push(renderLink(currentPage + 1, \"next-current\", link));\n    if (currentPage !== pageCount - 1) {\n      items.push(<Ellipsis key=\"space-after\" />);\n      items.push(renderLink(pageCount, \"last\", link));\n    }\n  }\n  return items;\n}\n\ntype Props = {\n  currentPage: number;\n  pageCount: number;\n  link: string;\n  mode?: \"tiny\";\n};\n\nexport const Pager: FunctionComponent<Props> = ({\n  currentPage,\n  pageCount,\n  link,\n  mode,\n}) => {\n  return (\n    <Pagination align=\"centered\">\n      {renderPrev(currentPage, pageCount, link)}\n      {(!mode || mode !== \"tiny\") && (\n        <List>{renderLinks(currentPage, pageCount, link)}</List>\n      )}\n      {renderNext(currentPage, pageCount, link)}\n    </Pagination>\n  );\n};\n","// eslint-disable-next-line no-shadow\nexport enum CMSArticles {\n  DOCUMENTATION = 1402,\n  ADMIN = 1403,\n  WELCOME_LOGGED_IN_1 = 1404,\n  WELCOME_GUEST_1 = 1405,\n  WELCOME_LOGGED_IN_2 = 1406,\n  WELCOME_GUEST_2 = 1407,\n  NEW_USER_INFO = 1408,\n  TECHNICAL_SERVICES = 1409,\n  ATTACHMENT_INFO_OFFERS = 1410,\n  ATTACHMENT_INFO_ORDERS = 1426,\n  OFFER_SUMMARY = 1411,\n  PRECUT_INFO = 1427,\n  MAP_INFO = 1413,\n  OFFER_SELECTION_HELPER = 1414,\n  NOT_CALCULATED = 1424,\n  AMOUNT_DAYS_NEW_OFFER = 1423,\n  ORDER_NO_DRAWINGS = 1428,\n  ORDER_SUMMARY_MULTIPLE = 1429,\n  ORDER_SELECTION_HELPER = 1430,\n  ORDER_SUMMARY = 1431,\n}\nexport type CMSArticle = {\n  title: string;\n  content: string;\n};\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Form = styled(\"form\")`\n  padding: 24px 24px 0 24px;\n  height: auto;\n`;\nexport const FormHeader = styled(\"h1\")`\n  font-size: 2.625rem;\n  color: ${PreTreColors.beis};\n  text-align: center;\n`;\n","import styled from \"styled-components\";\n\ntype Props = {\n  direction?: \"row\" | \"column\";\n};\nexport const ButtonGroup = styled(\"div\")<Props>`\n  display: flex;\n  margin-top: 2rem;\n  flex-direction: ${(props) => props.direction || \"row\"};\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"@frontend/common/src/elements//Buttons/Buttons.styles\";\nimport { useActions, useEffects } from \"../../../overmind\";\n\n// Components\nimport { Form } from \"../UnauthForm.styles\";\n\nimport { ButtonGroup } from \"../../../components/ButtonGroup/ButtonGroup.styles\";\n\nconst loginSchema = yup.object().shape({\n  email: yup.string().email().required(\"Vennligst fyll inn epost\"),\n});\n\nexport const ForgotPasswordPage: FunctionComponent = () => {\n  // const [email, setEmail] = React.useState(\"\");\n  // const [password, setPassword] = React.useState(\"\");\n\n  const actions = useActions();\n  const effects = useEffects();\n\n  const { register, handleSubmit, errors } = useForm<{ email: string }>({\n    resolver: yupResolver(loginSchema),\n  });\n  const onSubmit = (data: { email: string }) => {\n    actions.auth.forgotPassword(data);\n  };\n\n  return (\n    <Page title=\"Glemt Passord\">\n      <Form>\n        <div style={{ maxWidth: \"450px\" }}>\n          <FormInput\n            htmlFor=\"email\"\n            name=\"email\"\n            label=\"Epost\"\n            type=\"text\"\n            defaultValue=\"\"\n            placeholder=\"Din epost..\"\n            inputRef={register}\n            error={errors.email?.message}\n          />\n          <ButtonGroup>\n            <BlockButton onClick={handleSubmit(onSubmit)}>\n              Reset passord\n            </BlockButton>\n            <LinkButton onClick={() => effects.router.navigateTo(\"/\")}>\n              Avbryt\n            </LinkButton>\n          </ButtonGroup>\n        </div>\n      </Form>\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useAppState } from \"../../overmind\";\n\ntype Props = {\n  contentId: number;\n};\nexport const CMSContent: FunctionComponent<Props> = ({ contentId }) => {\n  const state = useAppState();\n\n  let markup = \"\";\n  if (!state.cms[contentId]) {\n    markup = \"Fant ikke innhold..\";\n  } else {\n    markup = state.cms[contentId].content;\n  }\n  return <div dangerouslySetInnerHTML={{ __html: markup }} />;\n};\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ntype Props = {\n  theme?: string;\n  type?: string;\n};\n\nexport const Heading = styled(\"h1\")<Props>`\n  font-size: ${(props: Props) =>\n    props.type === \"secondary\" ? \"1.25rem\" : \"2.625rem\"};\n  font-weight: 700;\n  color: ${(props: Props) =>\n    props.theme === \"light\" ? \"white\" : PreTreColors.beis};\n  font-family: \"Kumbh Sans Normal\", sans-serif;\n  line-height: normal;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { Heading } from \"./Header.styles\";\n\ntype Props = {\n  rest?: any;\n  type?: string;\n  theme?: string;\n  style?: any;\n};\nexport const Header: FunctionComponent<Props> = ({\n  children,\n  type,\n  theme,\n  ...rest\n}) => {\n  return (\n    <Heading theme={theme} type={type} {...rest}>\n      {children}\n    </Heading>\n  );\n};\n","import styled, { css } from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ntype ButtonProps = {\n  secondary?: boolean;\n  disabled?: boolean;\n};\n\ntype ProductButton = {\n  active: boolean;\n  disabled: boolean;\n  extended?: boolean;\n};\n\nexport const Label = styled(\"label\")`\n  font-size: 18px;\n  color: white;\n`;\n\nconst disabledStyle = css`\n  background-color: ${PreTreColors.borderlineGray};\n  color: white;\n  cursor: not-allowed;\n\n  &:hover {\n    background-color: ${PreTreColors.borderlineGray};\n  }\n`;\n\nexport const BlockButton = styled(\"button\")<ButtonProps>`\n  background-color: ${(props: ButtonProps) =>\n    props.secondary ? PreTreColors.beis : PreTreColors.pretre};\n  height: auto;\n  width: 100%;\n  font-size: 1.5rem;\n  min-width: 10em;\n  font-weight: 700;\n  color: white;\n  padding: 15px 0;\n  border-radius: 10px;\n  border: 0;\n  cursor: pointer;\n  &:hover {\n    background-color: ${(props: ButtonProps) =>\n      props.secondary ? \"#310802\" : \"#b30000\"};\n  }\n  &:focus {\n    outline: none;\n    border: none;\n    border-color: inherit;\n    box-shadow: none;\n  }\n\n  ${(props: ButtonProps) => props.disabled && disabledStyle}\n`;\n\nexport const LinkButton = styled(\"button\")`\n  margin: 1rem;\n  background: none;\n  border: none;\n  width: 100%;\n  text-align: center;\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n  cursor: pointer;\n  text-decoration: underline;\n  &:hover {\n    opacity: 0.8;\n  }\n`;\n\nexport const SelectableBlockButton = styled(\"button\")<ButtonProps>`\n  background-color: ${PreTreColors.weakBrite};\n  height: auto;\n  width: 100%;\n  font-size: 1.5rem;\n  font-weight: 700;\n  color: ${PreTreColors.pretre};\n  padding: 15px 0;\n  border-radius: 10px;\n  border: 1px solid ${PreTreColors.pretre};\n  cursor: pointer;\n  &:hover {\n    background-color: ${PreTreColors.pretre};\n    color: white;\n  }\n\n  ${(props: ButtonProps) => props.disabled && disabledStyle}\n`;\n\nexport const ChooseProductPageButton = styled(\"button\")<ProductButton>`\n  background-color: ${(props: ProductButton) =>\n    props.active\n      ? PreTreColors.beis\n      : props.extended\n      ? PreTreColors.piemonte\n      : \"gray\"};\n  height: 3.5em;\n  width: 10vw;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #fff;\n  padding: 10px 0;\n  border-radius: 10px;\n  cursor: pointer;\n  @media (max-width: 1024px) {\n    width: 9em;\n  }\n  &:hover {\n    background-color: ${PreTreColors.pretre};\n    color: white;\n  }\n  ${(props: ProductButton) => props.disabled && disabledStyle}\n`;\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Card = styled(\"div\")`\n  max-width: 100%;\n  height: auto;\n  max-height: 100%;\n  padding: 2.375rem 2.875rem;\n  background-color: ${PreTreColors.weakBrite};\n  border-radius: 10px;\n`;\nexport const CardHeader = styled(\"h1\")`\n  margin-top: 0;\n  margin-bottom: 3px;\n  font-size: 2.625rem;\n  font-weight: 700;\n  color: ${PreTreColors.beis};\n`;\nexport const ShortcutLink = styled(\"a\")`\n  margin-top: 15px;\n  color: ${PreTreColors.beis};\n  font-size: 1.125rem;\n  font-weight: 700;\n  padding-bottom: 2px;\n  text-decoration: underline;\n  cursor: pointer;\n`;\nexport const ArrowIcon = styled.svg`\n  width: 27px;\n  height: 20px;\n  margin-right: 0.6875rem;\n  margin-top: 4px;\n  float: left;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { ShortcutLink, ArrowIcon } from \"./ShortcutCard.styles\";\n\ntype ItemProps = {\n  to?: string;\n  ref?: any;\n  as?: any;\n} & React.HTMLProps<HTMLDivElement>;\n\nexport const ShortcutCardLink: FunctionComponent<ItemProps> = ({\n  to,\n  children,\n  ...props\n}) => {\n  return (\n    <ShortcutLink href={to} {...props}>\n      {children}\n    </ShortcutLink>\n  );\n};\n\nexport const ShortcutArrowIcon: FunctionComponent = () => {\n  return (\n    <ArrowIcon\n      viewBox=\"0 0 27 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path d=\"M0 8.50708H23.1328V11.4915H0V8.50708Z\" fill=\"#CA0000\" />\n      <path\n        d=\"M16.7161 20L14.6257 17.9096L22.5368 10L14.6257 2.09038L16.7161 0L26.7147 10L16.7161 20Z\"\n        fill=\"#CA0000\"\n      />\n    </ArrowIcon>\n  );\n};\n","import styled, { css } from \"styled-components\";\n\ntype Props = {\n  fullHeight?: boolean;\n};\nconst fullHeightStyle = css`\n  flex-grow: 1;\n`;\nexport const VBox = styled(\"div\")<Props>`\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  ${(props: Props) => props.fullHeight && fullHeightStyle}\n`;\n","export default __webpack_public_path__ + \"static/media/banner.b5a05349.jpg\";","import styled from \"styled-components\";\nimport BackgroundImage from \"../../assets/img/banner.jpg\";\n\nexport const Page = styled(\"div\")`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n`;\nexport const Shader = styled(\"div\")`\n  width: 100%;\n  height: calc(100vw * 0.22);\n  min-height: 430px;\n  content: \"\";\n  position: relative;\n  left: 0;\n  top: 0;\n  background: rgba(67, 10, 3, 0.5);\n`;\nexport const BannerImage = styled(\"div\")`\n  width: 100%;\n  height: calc(100vw * 0.22);\n  min-height: 430px;\n  background: url(${BackgroundImage});\n  background-size: cover;\n  background-repeat: no-repeat;\n  position: relative;\n`;\nexport const Container = styled(\"div\")`\n  width: 80%;\n  height: auto;\n  margin: 0 auto;\n  display: flex;\n  justify-content: space-between;\n`;\nexport const ItemContainer = styled(\"div\")`\n  display: flex;\n  height: calc(100vw * 0.22);\n  min-height: 430px;\n`;\nexport const VerticalCenterBox = styled(\"div\")`\n  align-self: center;\n`;\nexport const SubText = styled(\"h4\")`\n  margin-bottom: 26px;\n  font-size: 1.5rem;\n  color: white;\n  font-weight: 400;\n`;\nexport const BtnWrapper = styled(\"div\")`\n  width: 100%;\n  max-width: 200px;\n`;\n","import { useState, useEffect } from \"react\";\n\n/**\n * Nifty little utility function for getting the window height and width. Useful for creating responsive websites\n */\nfunction getWindowDimensions() {\n  const { innerWidth: width, innerHeight: height } = window;\n  return {\n    width,\n    height,\n  };\n}\n\nexport function useWindowDimensions() {\n  const [windowDimensions, setWindowDimensions] = useState(\n    getWindowDimensions()\n  );\n\n  useEffect(() => {\n    function handleResize() {\n      setWindowDimensions(getWindowDimensions());\n    }\n\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, []);\n\n  return windowDimensions;\n}\n","import React, { FunctionComponent } from \"react\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\nimport { CMSContent } from \"../../components/CMSContent/CMSContent\";\nimport { PreTreColors, LayoutConstants } from \"../../styles/constants\";\nimport { Header } from \"../../elements/Header/Header\";\nimport { BlockButton } from \"../../components/Buttons/Buttons.styles\";\n\nimport {\n  Card,\n  CardHeader,\n} from \"../../components/ShortcutCard/ShortcutCard.styles\";\nimport {\n  ShortcutCardLink,\n  ShortcutArrowIcon,\n} from \"../../components/ShortcutCard/ShortcutCard\";\nimport { VBox } from \"../../elements/VBox/VBox\";\nimport {\n  Page,\n  Shader,\n  BannerImage,\n  Container,\n  ItemContainer,\n  VerticalCenterBox,\n  SubText,\n  BtnWrapper,\n} from \"./HomePage.styles\";\nimport { useAppState } from \"../../overmind\";\n\n// TODO Remove this if dont wanna use\nimport { useWindowDimensions } from \"../../hooks/useWindowDimensions\";\n\nexport const HomePage: FunctionComponent = () => {\n  const state = useAppState();\n\n  // TODO Remove this if dont wanna use\n  const { width } = useWindowDimensions();\n\n  const isGuest = state.auth.user === null;\n\n  const { loginWithRedirect } = useAuth0();\n  return (\n    <Page>\n      <BannerImage>\n        <Shader>\n          <Container>\n            {/* Left Side */}\n            <ItemContainer\n              style={{\n                textAlign:\n                  width >= LayoutConstants.sidebarBreak ? \"left\" : \"center\",\n              }}\n            >\n              <VerticalCenterBox>\n                <SubText>\n                  <CMSContent\n                    contentId={\n                      isGuest\n                        ? CMSArticles.WELCOME_GUEST_1\n                        : CMSArticles.WELCOME_LOGGED_IN_1\n                    }\n                  />\n                </SubText>\n                <BtnWrapper\n                  style={{\n                    maxWidth:\n                      width >= LayoutConstants.sidebarBreak ? \"200px\" : \"100%\",\n                  }}\n                >\n                  {!isGuest ? null : (\n                    <BlockButton onClick={() => loginWithRedirect()}>\n                      Logg inn\n                    </BlockButton>\n                  )}\n                </BtnWrapper>\n              </VerticalCenterBox>\n            </ItemContainer>\n            {/* Right Side */}\n            {width >= LayoutConstants.sidebarBreak ? (\n              <ItemContainer>\n                <VerticalCenterBox>\n                  <Card>\n                    <CardHeader>Nyttige snarveier</CardHeader>\n                    {!isGuest ? (\n                      <VBox>\n                        <ShortcutCardLink href=\"/mine-prosjekt\">\n                          <ShortcutArrowIcon />\n                          Mine prosjekt\n                        </ShortcutCardLink>\n                        <ShortcutCardLink href=\"/nytt-prosjekt\">\n                          <ShortcutArrowIcon />\n                          Nytt prosjekt\n                        </ShortcutCardLink>\n\n                        {/* <ShortcutCardLink>\n                        <ShortcutArrowIcon />\n                        Avvik\n                      </ShortcutCardLink> */}\n                        <ShortcutCardLink\n                          href=\"https://www.pretre.no/kontakt/administrasjon/\"\n                          target=\"_blank\"\n                        >\n                          <ShortcutArrowIcon />\n                          Kontaktinformasjon Pretre\n                        </ShortcutCardLink>\n                      </VBox>\n                    ) : (\n                      <VBox>\n                        <ShortcutCardLink\n                          href=\"https://kjorelister.pretre.no/\"\n                          target=\"_blank\"\n                        >\n                          <ShortcutArrowIcon />\n                          Pålogging Kjørelister\n                        </ShortcutCardLink>\n                        <ShortcutCardLink href=\"/glemt-passord\">\n                          <ShortcutArrowIcon />\n                          Er bruker, glemt passord\n                        </ShortcutCardLink>\n                        <ShortcutCardLink\n                          href=\"https://www.pretre.no/kontakt/administrasjon/\"\n                          target=\"_blank\"\n                        >\n                          <ShortcutArrowIcon />\n                          Kontaktinformasjon Pretre\n                        </ShortcutCardLink>\n                      </VBox>\n                    )}\n                  </Card>\n                </VerticalCenterBox>\n              </ItemContainer>\n            ) : null}\n          </Container>\n        </Shader>\n      </BannerImage>\n      {width < LayoutConstants.sidebarBreak ? (\n        <div\n          style={{\n            width: \"80%\",\n            marginLeft: \"auto\",\n            marginRight: \"auto\",\n            marginTop: -25,\n            marginBottom: -70,\n          }}\n        >\n          <ItemContainer style={{ justifyContent: \"center\" }}>\n            <VerticalCenterBox>\n              <Card style={{ padding: \"20px 25px\" }}>\n                <CardHeader style={{ fontSize: 26 }}>\n                  Nyttige snarveier\n                </CardHeader>\n\n                {!isGuest ? (\n                  <VBox>\n                    <ShortcutCardLink\n                      style={{ fontSize: 16 }}\n                      href=\"/mine-prosjekt\"\n                    >\n                      <ShortcutArrowIcon />\n                      Mine prosjekt\n                    </ShortcutCardLink>\n                    <ShortcutCardLink\n                      style={{ fontSize: 16 }}\n                      href=\"/nytt-prosjekt\"\n                    >\n                      <ShortcutArrowIcon />\n                      Nytt prosjekt\n                    </ShortcutCardLink>\n                    {/* <ShortcutCardLink>\n                        <ShortcutArrowIcon />\n                        Avvik\n                      </ShortcutCardLink> */}\n                    <ShortcutCardLink\n                      style={{ fontSize: 16 }}\n                      href=\"https://www.pretre.no/kontakt/administrasjon/\"\n                      target=\"_blank\"\n                    >\n                      <ShortcutArrowIcon />\n                      Kontaktinformasjon Pretre\n                    </ShortcutCardLink>\n                  </VBox>\n                ) : (\n                  <VBox>\n                    <ShortcutCardLink\n                      href=\"https://kjorelister.pretre.no/\"\n                      target=\"_blank\"\n                    >\n                      <ShortcutArrowIcon />\n                      Pålogging Kjørelister\n                    </ShortcutCardLink>\n                    <ShortcutCardLink href=\"/glemt-passord\">\n                      <ShortcutArrowIcon />\n                      Er bruker, glemt passord\n                    </ShortcutCardLink>\n                    <ShortcutCardLink\n                      href=\"https://www.pretre.no/kontakt/administrasjon/\"\n                      target=\"_blank\"\n                    >\n                      <ShortcutArrowIcon />\n                      Kontaktinformasjon Pretre\n                    </ShortcutCardLink>\n                  </VBox>\n                )}\n              </Card>\n            </VerticalCenterBox>\n          </ItemContainer>\n        </div>\n      ) : null}\n      <div\n        style={{\n          width: \"80%\",\n          margin: \"50px auto\",\n          textAlign: \"center\",\n        }}\n      >\n        <div\n          style={{\n            maxWidth: 800,\n            textAlign:\n              width >= LayoutConstants.sidebarBreak ? \"left\" : \"center\",\n          }}\n        >\n          <Header>\n            Velkommen til <br />\n            Pretre AS kundeportal\n          </Header>\n          <div\n            style={{\n              color: PreTreColors.beis,\n              fontSize: 18,\n              fontWeight: 400,\n              marginTop: 16,\n            }}\n          >\n            <CMSContent\n              contentId={\n                isGuest\n                  ? CMSArticles.WELCOME_GUEST_2\n                  : CMSArticles.WELCOME_LOGGED_IN_2\n              }\n            />\n          </div>\n        </div>\n      </div>\n    </Page>\n  );\n};\n","import axios, { CancelTokenSource } from \"axios\";\n\nconst ROOT_ENDPOINT = process.env.REACT_APP_API_BASE;\n\n// eslint-disable-next-line no-shadow\nexport enum Verb {\n  POST = \"POST\",\n  PUT = \"PUT\",\n  GET = \"GET\",\n  DELETE = \"DELETE\",\n  UPDATE = \"UPDATE\",\n  PATCH = \"PATCH\",\n}\n\nexport type Endpoint = {\n  path: string;\n  verb: Verb;\n};\n\nexport class BaseService {\n  static replaceParameters(url: string, data: any) {\n    if (!data) {\n      return url;\n    }\n    // match patterns like foo/{bar}/{?baz}{/?foobar} and replace {bar} with supplied params\n    const paramsToReplace = url.match(/\\{(([^?}]+)?\\?)?[a-z0-9-_]+\\}/gi);\n    if (paramsToReplace) {\n      let lastMissingOptionalKey;\n      for (let i = 0; i < paramsToReplace.length; i++) {\n        const key = paramsToReplace[i].slice(1, -1);\n        const parts = key.split(\"?\");\n        const isOptional = parts.length > 1;\n        const param = parts.pop();\n        const prePath = parts.pop();\n        // eslint-disable-next-line no-prototype-builtins\n        const hasParamToReplaceKey = data.hasOwnProperty(param);\n        let paramToReplaceKey = \"\";\n\n        if (isOptional && hasParamToReplaceKey && lastMissingOptionalKey) {\n          throw new Error(\n            `Missing previous optional key ${lastMissingOptionalKey}`\n          );\n        }\n        if (!isOptional && !hasParamToReplaceKey) {\n          throw new Error(`Missing parameter ${param}`);\n        } else if (hasParamToReplaceKey) {\n          paramToReplaceKey = data[param];\n          if (prePath) {\n            paramToReplaceKey = prePath + paramToReplaceKey;\n          }\n          // eslint-disable-next-line no-param-reassign\n          delete data[param];\n        }\n\n        // eslint-disable-next-line no-param-reassign\n        url = url.replace(`{${key}}`, paramToReplaceKey);\n\n        if (isOptional && !hasParamToReplaceKey) {\n          lastMissingOptionalKey = param;\n        }\n      }\n    }\n    return url;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  makeRequest(\n    route: Endpoint,\n    body: any = null,\n    responseType: string = null,\n    headers: { [index: string]: string } = null,\n    cancelToken: CancelTokenSource | null = null\n  ): Promise<any> {\n    if ([\"PUT\", \"DELETE\", \"POST\", \"GET\"].indexOf(route.verb) === -1) {\n      return Promise.reject(new Error(\"Invalid verb\"));\n    }\n    if (!route.path) {\n      return Promise.reject(new Error(\"Path was not specified\"));\n    }\n    const params: any = {\n      method: route.verb,\n      url: ROOT_ENDPOINT + BaseService.replaceParameters(route.path, body),\n    };\n\n    if (body !== null) {\n      params.data = body;\n    }\n\n    if (responseType !== null) {\n      params.responseType = responseType;\n    }\n    if (headers !== null) {\n      params.headers = headers;\n    }\n    if (cancelToken !== null) {\n      params.cancelToken = cancelToken.token;\n    }\n\n    return axios(params).catch((error) => {\n      return Promise.reject(error.response?.data?.message || error.message);\n    });\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  uploadFile(\n    route: Endpoint,\n    files: File[],\n    routeParams: any = null\n  ): Promise<any> {\n    if ([\"PUT\", \"DELETE\", \"POST\", \"GET\"].indexOf(route.verb) === -1) {\n      return Promise.reject(new Error(\"Invalid verb\"));\n    }\n    if (!route.path) {\n      return Promise.reject(new Error(\"Path was not specified\"));\n    }\n    const params: any = {\n      method: route.verb,\n      url:\n        ROOT_ENDPOINT + BaseService.replaceParameters(route.path, routeParams),\n    };\n\n    const data = new FormData();\n    for (let i = 0; i < files.length; i++) {\n      // get item\n      const file = files[i];\n      data.append(\"files\", file, file.name);\n    }\n    params.data = data;\n\n    return axios(params).catch((error) => {\n      return Promise.reject(error.response?.data?.message || error.message);\n    });\n  }\n}\n","import React, { FunctionComponent } from \"react\";\n\nimport { Link } from \"../../elements/Link/Link\";\n\ntype Props = {\n  number: string;\n};\nexport const PhoneLink: FunctionComponent<Props> = ({ number }) => {\n  if (!number) {\n    return <span>N/A</span>;\n  }\n  // only attempt to format for valid norwegian / 8 digit numbers. Should pull in some lib here if we need more\n  if (number.trim().length === 8) {\n    const formatted = `${number.substring(0, 3)} ${number.substring(\n      3,\n      5\n    )} ${number.substring(5, 8)}`;\n    return <Link href={`tel:${number}`}>{`${formatted}`}</Link>;\n  }\n  return <Link href={`tel:${number}`}>{`${number}`}</Link>;\n};\n","import styled from \"styled-components\";\n\nexport const HBox = styled(\"div\")`\n  display: flex;\n  flex: 1;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: flex-start;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { Column, Table } from \"@frontend/common/src/components/Table/Table\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link } from \"../../elements/Link/Link\";\nimport { Document } from \"../../types/Document\";\nimport { useActions } from \"../../overmind\";\nimport { HBox } from \"../../elements/HBox/HBox\";\n\ntype Props = {\n  documents: Document[];\n};\n\nexport const DocumentList: FunctionComponent<Props> = ({ documents }) => {\n  const { t } = useTranslation();\n  const actions = useActions();\n\n  const columns: Column<Document>[] = [\n    {\n      headerName: t(\"Description\"),\n      field: \"description\",\n      render: (row) => (\n        <HBox>\n          <Link\n            as=\"span\"\n            onClick={() => {\n              actions.orders.openDocument({ file: row });\n            }}\n          >\n            {row.description}\n          </Link>\n          <Link\n            as=\"span\"\n            onClick={() => {\n              actions.orders.downloadDocument({ file: row });\n            }}\n          >\n            Last ned\n          </Link>\n        </HBox>\n      ),\n    },\n    /*\n      {\n        headerName: t(\"Doc type\"),\n        field: \"type\",\n      },\n      {\n        headerName: t(\"Folder\"),\n        field: \"folder\",\n      },\n      */\n  ];\n  return (\n    <Table\n      noResultsText=\"Ingen dokumenter\"\n      keyField=\"id\"\n      data={documents}\n      availableColumns={columns}\n      columns={columns}\n    />\n  );\n};\n","import styled from \"styled-components\";\n\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const DetailsBox = styled(\"table\")`\n  border-collapse: collapse;\n`;\n\nexport const Legend = styled(\"th\")`\n  color: ${PreTreColors.beis};\n  text-align: left;\n  vertical-align: top;\n  padding-right: 2rem;\n`;\n\nexport const Text = styled(\"td\")``;\n\nexport const Group = styled(\"tr\")``;\n","import React, { FunctionComponent } from \"react\";\n\ntype Props = {\n  embedId: string | number;\n  embedHash: string;\n};\nexport const SketchFabEmbed: FunctionComponent<Props> = ({\n  embedId,\n  embedHash,\n}) => {\n  return (\n    <div className=\"sketchfab-embed-wrapper\">\n      <iframe\n        title=\"A 3D model\"\n        width=\"421\"\n        height=\"258\"\n        src={`https://sketchfab.com/models/${embedHash}/embed?autostart=0&amp;ui_controls=0&amp;ui_infos=0&amp;ui_inspector=0&amp;ui_stop=0&amp;ui_watermark=1&amp;ui_watermark_link=1`}\n        frameBorder=\"0\"\n        allow=\"autoplay; fullscreen; vr\"\n        allowFullScreen\n      />\n      <p\n        style={{\n          fontSize: \"13px\",\n          fontWeight: \"normal\",\n          margin: \"5px\",\n          color: \"#4A4A4A\",\n        }}\n      >\n        <a\n          href={`https://sketchfab.com/3d-models/${embedId}-${embedHash}?utm_medium=embed&utm_source=website&utm_campaign=share-popup`}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style={{ fontWeight: \"bold\", color: \"#1CAAD9\" }}\n        >\n          {embedId}\n        </a>\n        by{\" \"}\n        <a\n          href=\"https://sketchfab.com/pretre?utm_medium=embed&utm_source=website&utm_campaign=share-popup\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style={{ fontWeight: \"bold\", color: \"#1CAAD9\" }}\n        >\n          Pretre AS\n        </a>\n        on{\" \"}\n        <a\n          href=\"https://sketchfab.com?utm_medium=embed&utm_source=website&utm_campaign=share-popup\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          style={{ fontWeight: \"bold\", color: \"#1CAAD9\" }}\n        >\n          Sketchfab\n        </a>\n      </p>\n    </div>\n  );\n};\n","import { Endpoint, Verb } from \"./BaseService\";\n\nexport const endpoints: { [index: string]: { [index: string]: Endpoint } } = {\n  auth: {\n    login: {\n      path: \"/auth/logg-inn\",\n      verb: Verb.POST,\n    },\n    checkToken: {\n      path: \"/auth/sjekk-token\",\n      verb: Verb.GET,\n    },\n    forgotPassword: {\n      path: \"/auth/glemt-passord\",\n      verb: Verb.POST,\n    },\n    getByUsername: {\n      path: \"/auth/getUser\",\n      verb: Verb.POST,\n    },\n  },\n  project: {\n    getAllForCustomerId: {\n      path: \"/kunde/{customerId}/project\",\n      verb: Verb.GET,\n    },\n    getById: {\n      path: \"/kunde/{customerId}/project/{id}\",\n      verb: Verb.GET,\n    },\n    getByIdWithoutCustomer: {\n      path: \"/kunde/placeholder/project/getWithoutCustomer/{id}\",\n      verb: Verb.GET,\n    },\n    getOrderFromOfferId: {\n      path: \"/kunde/{customerId}/project/{offerId}/populate\",\n      verb: Verb.GET,\n    },\n    postCommitDraftOrder: {\n      path: \"/kunde/{customerId}/project/\",\n      verb: Verb.POST,\n    },\n    postCommitSubprojects: {\n      path: \"/kunde/{customerId}/project/{projectId}/subprojects\",\n      verb: Verb.POST,\n    },\n    getDocumentsforOrder: {\n      path: \"/kunde/{customerId}/project/{orderId}/filer\",\n      verb: Verb.GET,\n    },\n    getDocumentforOrder: {\n      path: \"/file/{customerId}/filer/{orderId}\",\n      verb: Verb.POST,\n    },\n    addFiles: {\n      path: \"/file/{orderId}/upload/order/{customerId}\",\n      verb: Verb.POST,\n    },\n    calculateRoof: {\n      path: \"/kunde/placeholder/project/calculateRoof\",\n      verb: Verb.POST,\n    },\n  },\n  lookups: {\n    getLookups: {\n      path: \"/oppslag\",\n      verb: Verb.GET,\n    },\n    zipcodeLookup: {\n      path: \"/oppslag/zip/{zipcode}\",\n      verb: Verb.GET,\n    },\n    getConfigValue: {\n      path: \"/oppslag/config/{configKey}\",\n      verb: Verb.GET,\n    },\n  },\n  employee: {\n    getAll: {\n      path: \"/ansatt\",\n      verb: Verb.GET,\n    },\n    sendMessage: {\n      path: \"/ansatt/{employeeId}/melding/{customerId}\",\n      verb: Verb.POST,\n    },\n  },\n  customerEmployee: {\n    getAll: {\n      path: \"/kunde/{customerId}/kontakt\",\n      verb: Verb.GET,\n    },\n    search: {\n      path: \"/admin/sok/kunder\",\n      verb: Verb.POST,\n    },\n    update: {\n      path: \"/kunde/{customerId}/kontakt/{employeeId}\",\n      verb: Verb.PUT,\n    },\n    create: {\n      path: \"/kunde/{customerId}/kontakt\",\n      verb: Verb.POST,\n    },\n    resetPassword: {\n      path: \"/kunde/{customerId}/kontakt/{customerEmployeeId}/resetPassword\",\n      verb: Verb.GET,\n    },\n  },\n  customer: {\n    getById: {\n      path: \"/kunde/{customerId}\",\n      verb: Verb.GET,\n    },\n    update: {\n      path: \"/kunde/{customerId}\",\n      verb: Verb.PUT,\n    },\n    getForToken: {\n      path: \"/kunde/\",\n      verb: Verb.GET,\n    },\n  },\n};\n","import { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { IAuthService } from \"./IAuthService\";\n\nexport class AuthService extends BaseService implements IAuthService {\n  async login(username: string, password: string): Promise<string> {\n    const response = await this.makeRequest(endpoints.auth.login, {\n      brukernavn: username,\n      passord: password,\n    }).then((r) => r.data);\n    return response.token;\n  }\n\n  async checkToken(): Promise<boolean> {\n    return this.makeRequest(endpoints.auth.checkToken).then((r) => r.data);\n  }\n\n  async forgotPassword(username: string): Promise<boolean> {\n    return this.makeRequest(endpoints.auth.forgotPassword, {\n      username,\n    });\n  }\n}\n","import { isValid } from \"date-fns\";\nimport { DraftOrderRoof } from \"../types/DraftOrder/DraftOrderRoof\";\nimport { DraftOrderJoists } from \"../types/DraftOrder/DraftOrderJoists\";\nimport { DraftOrderPrecut } from \"../types/DraftOrder/DraftOrderPrecut\";\nimport { DraftOrder } from \"../types/DraftOrder/DraftOrder\";\n\nexport const mapNotatB2b = (\n  noteB2b: any\n): {\n  roof: DraftOrderRoof;\n  joists: DraftOrderJoists;\n  precut: DraftOrderPrecut;\n} => {\n  if (!noteB2b) return null;\n  let json;\n  if (typeof noteB2b === \"string\") {\n    const fixed = noteB2b.replace(\",\\n}\", \"\\n}\");\n    json = JSON.parse(fixed);\n  } else if (typeof noteB2b === \"object\") {\n    json = noteB2b;\n  } else {\n    // invalid variable\n    return null;\n  }\n  const model: {\n    roof: DraftOrderRoof;\n    joists: DraftOrderJoists;\n    precut: DraftOrderPrecut;\n  } = { roof: null, joists: null, precut: null };\n\n  model.roof = {\n    hasRoof: json.HarTak,\n    roofType: json.TakType,\n    roofingType: json.Taktekking,\n    angle: json.Takvinkel,\n    rangeDistance: json.Spennvidde,\n    protrusion: json.Utstikk,\n    comment: json.KommentarTak,\n  } as DraftOrderRoof;\n\n  model.joists = {\n    hasJoists: json.HarBjelkelag,\n    joistsChoice: json.BjelkelagType,\n    joistsType: json.BjelkelagValg,\n    submergeWetRoom: json.NedsenkVaatrom,\n    comment: json.KommentarBjelkelag,\n  } as DraftOrderJoists;\n\n  model.precut = {\n    hasPrecut: json.HarPrecut,\n    dimensions: json.PrecutDimensjon,\n    comment: json.KommentarPrecut,\n  } as DraftOrderPrecut;\n\n  return model;\n};\nexport const mapDraftOrder = (data: any): DraftOrder => {\n  if (!data) return null;\n\n  return data as unknown as DraftOrder;\n};\n\nexport const mapDraftOrderToBackendModel: any = (\n  offerId: number,\n  customerId: number,\n  order: DraftOrder,\n  loggedInEmail: string,\n  projectId: string\n) => {\n  if (!order) return null;\n  const model = {\n    kundeId: customerId,\n    customerId, // for endpoint\n    tilbudNr: offerId,\n    kundeKontaktId: order.customerContactId,\n    merkes: order.marked,\n    kommentar: \"\",\n    levering: order.deliveryTerms,\n    kundesBestillingsnr: order.customerOrderNumber,\n    // @ts-ignore\n    bestbekr: null,\n    // @ts-ignore\n    onsketLevering: null,\n    // @ts-ignore\n    leveringsadresse: null,\n    byggeplass: {\n      adresse: order.deliveryAddress,\n      postnummer: order.zipCode?.toString(),\n      lat: 0,\n      lng: 0,\n      gardsnr: order.farmNumber?.toString(),\n      bruksnr: order.subFarmNumber?.toString(),\n      hoydeOverHavet: order.mamsl,\n      sammeSomByggeplass: order.deliveryAddressSameAsBuilding,\n      tilkomstSemi: order.arrivalSemi === \"1\",\n      kontpers2: order.contactPersonSite,\n      tlflevkunde: order.contactPersonPhoneNr,\n    },\n    loggedInEmail,\n    tilbudsvalg: order.subProjects,\n    byggtype: order.buildingType,\n    quotation: order.quotation,\n    additionalInfo: order.additionalInfo,\n    projectId,\n  };\n\n  model.onsketLevering =\n    typeof order.preferredDeliveryDate === \"string\" &&\n    // @ts-ignore\n    order.preferredDeliveryDate.length > 0\n      ? new Date(order.preferredDeliveryDate).toISOString()\n      : isValid(order.preferredDeliveryDate)\n      ? order.preferredDeliveryDate\n      : null;\n\n  if (order.expectedDrawingDate) {\n    let date;\n    switch (typeof order.expectedDrawingDate) {\n      case \"string\":\n        date = new Date(order.expectedDrawingDate);\n        date = date.setHours(date.getHours() + 3);\n        model.bestbekr = new Date(date).toISOString();\n        break;\n      default:\n        date = order.expectedDrawingDate;\n        date = date.setHours(date.getHours() + 3);\n        model.bestbekr = new Date(date).toISOString();\n        break;\n    }\n  }\n\n  let leveringsadresse = {};\n\n  if (!order.deliveryAddressSameAsBuilding) {\n    leveringsadresse = {\n      adresse: order.deliveryAddress2,\n      postnummer: order.zipCode2?.toString(),\n      sammeSomByggeplass: order.deliveryAddressSameAsBuilding,\n      tilkomstSemi: order.arrivalSemi === \"1\",\n    };\n  } else {\n    leveringsadresse = {\n      adresse: order.deliveryAddress,\n      postnummer: order.zipCode?.toString(),\n      sammeSomByggeplass: order.deliveryAddressSameAsBuilding,\n      tilkomstSemi: order.arrivalSemi === \"1\",\n    };\n  }\n\n  model.leveringsadresse = leveringsadresse;\n  return model;\n};\n","/* eslint-disable prefer-destructuring */\nimport { parsePretre } from \"@frontend/common/src/helpers/date\";\nimport { parseISO } from \"date-fns\";\nimport { CancelTokenSource } from \"axios\";\nimport { Document } from \"../../../types/Document\";\nimport { Link } from \"../../../types/Link\";\nimport { Order } from \"../../../types/Order\";\nimport { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { IOrderService } from \"./IOrderService\";\nimport { DraftOrder } from \"../../../types/DraftOrder/DraftOrder\";\nimport {\n  mapDraftOrder,\n  mapDraftOrderToBackendModel,\n} from \"../../../helpers/draftOrder\";\nimport {\n  Calculation,\n  CalculationPayload,\n} from \"../../../types/DraftOrder/Calculation\";\n\nexport class OrderService extends BaseService implements IOrderService {\n  async getDocumentsForOrder(\n    customerId: string,\n    orderId: string\n  ): Promise<Document[]> {\n    const results: any[] = await this.makeRequest(\n      endpoints.project.getDocumentsforOrder,\n      { customerId, orderId }\n    ).then((r) => r.data);\n\n    return results.map((r) => OrderService.convertDocument(r, customerId));\n  }\n\n  async getDocument(\n    customerId: string,\n    orderId: string,\n    filename: string\n  ): Promise<string> {\n    return await this.makeRequest(\n      endpoints.project.getDocumentforOrder,\n      { customerId, orderId, filename },\n      \"blob\"\n    ).then((r) => {\n      return r.data;\n    });\n  }\n\n  async getAllForCustomerId(customerId: string): Promise<Order[]> {\n    const results: any[] = await this.makeRequest(\n      endpoints.project.getAllForCustomerId,\n      { customerId }\n    ).then((r) => r.data);\n    return results.map(OrderService.convert);\n  }\n\n  async getById(id: number): Promise<Order> {\n    const results: any = await this.makeRequest(endpoints.project.getById, {\n      id,\n    }).then((r) => r.data);\n    return OrderService.convert(results);\n  }\n\n  async getByIdWithoutCustomer(id: number): Promise<Order> {\n    const results: any = await this.makeRequest(\n      endpoints.project.getByIdWithoutCustomer,\n      {\n        id,\n      }\n    ).then((r) => r.data);\n    return OrderService.convert(results);\n  }\n\n  async getOrderFromOfferId(\n    customerId: string,\n    offerId: string\n  ): Promise<DraftOrder> {\n    const results: DraftOrder = await this.makeRequest(\n      endpoints.project.getOrderFromOfferId,\n      {\n        customerId,\n        offerId,\n      }\n    ).then((r) => mapDraftOrder(r.data));\n    return results;\n  }\n\n  async commitDraftOrder(\n    customerId: string,\n    order: DraftOrder,\n    loggedInEmail: string,\n    offerId?: string\n  ): Promise<string> {\n    const model = mapDraftOrderToBackendModel(\n      offerId,\n      customerId,\n      order,\n      loggedInEmail\n    );\n    return await this.makeRequest(\n      endpoints.project.postCommitDraftOrder,\n      model\n    ).then((r) => r.data);\n  }\n\n  async commitSubProjects(\n    customerId: string,\n    order: DraftOrder,\n    loggedInEmail: string,\n    projectId: string,\n    offerId?: string\n  ): Promise<string> {\n    const model = mapDraftOrderToBackendModel(\n      offerId,\n      customerId,\n      order,\n      loggedInEmail,\n      projectId\n    );\n    return await this.makeRequest(\n      endpoints.project.postCommitSubprojects,\n      model\n    ).then((r) => r.data);\n  }\n\n  async addFiles(\n    orderId: string,\n    files: File[],\n    customerId: string\n  ): Promise<any> {\n    return await this.uploadFile(endpoints.project.addFiles, files, {\n      orderId,\n      customerId,\n    }).then((r) => r.data);\n  }\n\n  async calculateRoof(\n    payload: CalculationPayload,\n    cancelToken: CancelTokenSource | null\n  ): Promise<Calculation> {\n    return await this.makeRequest(\n      endpoints.project.calculateRoof,\n      payload,\n      null,\n      null,\n      cancelToken\n    ).then((r) => r.data);\n  }\n\n  static convertDocument(d: any, customerId: string): Document {\n    return {\n      id: d.navn,\n      type: d.type,\n      folder: d.mappe,\n      description: d.navn,\n      customerId,\n      orderId: d.projectId,\n    };\n  }\n\n  static convert(order: any): Order {\n    let embedHash = null;\n    let embedId = null;\n    const links: Link[] = [];\n    if (order.lenker) {\n      order.lenker.forEach((l: any) => {\n        if (l.linkType === 1) {\n          const embed = l.adresse.match(\n            /https:\\/\\/sketchfab.com\\/3d-models\\/(.+)-(.+)/i\n          );\n          if (embed) {\n            embedId = embed[1];\n            embedHash = embed[2];\n          }\n        } else {\n          links.push(l);\n        }\n      });\n    }\n    const projectId = order.prosjektNr !== \"\" ? order.prosjektNr : null;\n    return {\n      id: order.ordrenr,\n      projectId,\n      product: order.produktType_Navn,\n      deliveryDay: order.leverdag,\n      deliveryWeek: order.leveruke,\n      deliveryYear: order.levaar,\n      isProjectMaster: order.prosjektNr === null || order.prosjektMaster === 1,\n      customerOrderNumber: order.kundesBestillingsnr,\n      delivery: parseISO(order.leveringsdato),\n      deliveryTerms: order.leveringsbetingelse,\n      orderDate: parsePretre(order.ordredato),\n      status: order.statusNavn,\n      sum: order.kundepris,\n      marked: order.merkes,\n      deliveryAddress: `${order.levAdre1} ${order.lev_Postnr} ${order.lev_Poststed}`,\n      constructionContactPhone:\n        order.byggeplass_Tlf !== \"0\" ? order.byggeplass_Tlf : \"\",\n      constructionContactName: order.byggePlass_Epost,\n      customerEmployeeId:\n        order.kontaktPerson_ID !== 0 ? order.kontaktPerson_ID : null,\n      engineerId: order[\"konstruktør_ID\"],\n      isOrderPriceCalculated: order.isOrderPriceCalculated,\n      embedHash,\n      embedId,\n      documents: [],\n      links,\n      subProjects: order.subProjects.map((x: any) => OrderService.convert(x)),\n      salesPersonId: order.ansvarligSelgerID,\n      valueChainStatus: order.valueChainStatus,\n      customerNumber: order.kundenr,\n      projectName: order.projectName,\n      calculationName: order.calculationName,\n      constructionName: order.constructionName,\n    };\n  }\n}\n","import { CreateEmployeeMessage } from \"@frontend/common/src/types/EmployeeMessage\";\nimport { Employee } from \"@frontend/common/src/types/Employee\";\nimport { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { IEmployeeService } from \"./IEmployeeService\";\n\nexport class EmployeeService extends BaseService implements IEmployeeService {\n  async sendMessage(\n    createEmployeeMessage: CreateEmployeeMessage,\n    customerId: number\n  ): Promise<any> {\n    return await this.makeRequest(endpoints.employee.sendMessage, {\n      employeeId: createEmployeeMessage.employeeId,\n      melding: createEmployeeMessage.message,\n      referanseId: createEmployeeMessage.referenceId,\n      referanseType: createEmployeeMessage.referenceType,\n      customerId,\n    }).then((r) => r.data);\n  }\n\n  async getAll(): Promise<Employee[]> {\n    const results: any[] = await this.makeRequest(\n      endpoints.employee.getAll\n    ).then((r) => r.data);\n    const fixed = results.map(EmployeeService.convert);\n    return fixed;\n  }\n\n  static convert(employee: any): Employee {\n    return {\n      id: employee.ansattID,\n      name: employee.ansattNavn,\n      email: employee.ansattEpost,\n      phone: employee.ansattMobil,\n      isEngieer: employee.ingenior !== 0,\n      isSalesEngineer: employee.ingenior_Salg !== 0,\n      hide: employee.skjul === 1,\n      isSales: employee.salgssjef !== 0,\n      isAdmin: employee.crM_Admin !== 0,\n      photoUrl: employee.doC_ID\n        ? `https://www.pretre.no/prod_images/doc_${employee.doC_ID}_13.jpg`\n        : null,\n    };\n  }\n}\n","import {\n  CustomerEmployee,\n  UpdateCustomerEmployee,\n} from \"@frontend/common/src/types/CustomerEmployee\";\nimport { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { ICustomerEmployeeService } from \"./ICustomerEmployeeService\";\n\nexport class CustomerEmployeeService\n  extends BaseService\n  implements ICustomerEmployeeService\n{\n  async getAllForCustomerId(customerId: string): Promise<CustomerEmployee[]> {\n    const results: any[] = await this.makeRequest(\n      endpoints.customerEmployee.getAll,\n      { customerId }\n    ).then((r) => r.data);\n    return results.map(CustomerEmployeeService.convert);\n  }\n\n  async getByUserName(username: string): Promise<CustomerEmployee> {\n    const results: any = await this.makeRequest(endpoints.auth.getByUsername, {\n      username,\n    }).then((r) => r.data);\n    return CustomerEmployeeService.convert(results);\n  }\n\n  async update(\n    customerId: string,\n    customerEmployee: UpdateCustomerEmployee,\n    loggedInEmail: string\n  ): Promise<boolean> {\n    return await this.makeRequest(endpoints.customerEmployee.update, {\n      customerId,\n      employeeId: customerEmployee.id,\n      kundenr: customerId,\n      kontakt_Navn: customerEmployee.name,\n      kontakt_Epost: customerEmployee.email,\n      kontakt_Telefon: customerEmployee.phone,\n      kontakt_Mobiltlf: customerEmployee.mobile,\n      kontakt_Stilling: customerEmployee.position,\n      kontakt_BlokkerPortaltilgang: !customerEmployee.active,\n      kontakt_Slutta: customerEmployee.hasQuit,\n      passord: customerEmployee.password,\n      nyttPassord: customerEmployee.newPassword,\n      loggedInEmail,\n    }).then((r) => r.data);\n  }\n\n  async create(\n    customerId: string,\n    customerEmployee: UpdateCustomerEmployee\n  ): Promise<CustomerEmployee> {\n    return await this.makeRequest(endpoints.customerEmployee.create, {\n      customerId,\n      kontakt_Navn: customerEmployee.name,\n      kontakt_Epost: customerEmployee.email,\n      kontakt_Telefon: customerEmployee.phone,\n      kontakt_Mobiltlf: customerEmployee.mobile,\n      kontakt_Stilling: customerEmployee.position,\n      kontakt_Passord_Portal: customerEmployee.newPassword,\n    }).then((r) => r.data);\n  }\n\n  async resetPassword(\n    customerId: string,\n    customerEmployeeId: number\n  ): Promise<void> {\n    return await this.makeRequest(endpoints.customerEmployee.resetPassword, {\n      customerId,\n      customerEmployeeId,\n    }).then((r) => r.data);\n  }\n\n  static convert(employee: any): CustomerEmployee {\n    return {\n      id: employee.kontaktID,\n      name: employee.kontakt_Navn,\n      email: employee.kontakt_Epost,\n      phone: employee.kontakt_Telefon,\n      mobile: employee.kontakt_Mobiltlf,\n      position: employee.kontakt_Stilling,\n      active: !employee.kontakt_BlokkerPortaltilgang,\n      hasQuit: employee.kontakt_Slutta,\n      customerId: employee.kundenr,\n      hasPassword: employee.hasPassword,\n    };\n  }\n}\n","import { BuildingType } from \"../../../types/BuildingType\";\nimport { OfferOption } from \"../../../types/OfferOption\";\nimport { TechnicalService } from \"../../../types/TechnicalService\";\nimport { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { ILookupsService } from \"./ILookupsService\";\n\ntype LookupResponse = {\n  byggTyper: any[];\n  tilbudsvalg: any[];\n  tekniskeTjenester: any[];\n  tilbudsStatuser: any[];\n  ordreStatuser: any[];\n};\nexport class LookupsService extends BaseService implements ILookupsService {\n  async getLookups(): Promise<{\n    buildingTypes: BuildingType[];\n    offerOptions: OfferOption[];\n    technicalServices: TechnicalService[];\n    orderStatuses: any[];\n    offerStatuses: any[];\n  }> {\n    const results: LookupResponse = await this.makeRequest(\n      endpoints.lookups.getLookups\n    ).then((r) => r.data);\n\n    return {\n      buildingTypes: results.byggTyper.map(LookupsService.convertBuildingType),\n      offerOptions: results.tilbudsvalg.map(LookupsService.convertOfferOption),\n      technicalServices: results.tekniskeTjenester,\n      orderStatuses: results.ordreStatuser,\n      offerStatuses: results.tilbudsStatuser,\n    };\n  }\n\n  async getCountyForZipcode(zipcode: string): Promise<string> {\n    return await this.makeRequest(endpoints.lookups.zipcodeLookup, {\n      zipcode,\n    }).then((r) => r.data.poststed);\n  }\n\n  async getConfigValue(configKey: string): Promise<string> {\n    return await this.makeRequest(endpoints.lookups.getConfigValue, {\n      configKey,\n    }).then((r) => r.data);\n  }\n\n  static convertOfferOption(o: any): OfferOption {\n    return {\n      id: o.id,\n      description: o.beskrivelse,\n      note: o.notat,\n      type: o.type,\n    };\n  }\n\n  static convertBuildingType(b: any): BuildingType {\n    return {\n      id: b.id,\n      typeNr: b.byggTypeNr,\n      name: b.byggtype,\n    };\n  }\n}\n","import { Customer } from \"@frontend/common/src/types/Customer\";\nimport { BaseService } from \"../BaseService\";\nimport { endpoints } from \"../endpoints\";\nimport { ICustomerService } from \"./ICustomerService\";\n\nexport class CustomerService extends BaseService implements ICustomerService {\n  async updateCustomer(customer: Customer): Promise<boolean> {\n    return await this.makeRequest(endpoints.customer.update, {\n      customerId: customer.id,\n      adresse: customer.address,\n      postnummer: customer.zipcode,\n      epost: customer.email,\n      epostBestillingsbekreftelse: customer.orderConfimEmail || null,\n      epostOrdrebekreftelse: customer.orderConfrimEmailAlt || null,\n      epostTegninger: customer.drawingsEmail || null,\n    });\n  }\n\n  async getById(customerId: string): Promise<Customer> {\n    const results: any = await this.makeRequest(endpoints.customer.getById, {\n      customerId,\n    }).then((r) => r.data);\n    return CustomerService.convert(results);\n  }\n\n  async getByToken(): Promise<Customer[]> {\n    const results: any = await this.makeRequest(\n      endpoints.customer.getForToken\n    ).then((r) => r.data);\n    return results.map((x: Customer) => CustomerService.convert(x));\n  }\n\n  static convert(customer: any): Customer {\n    return {\n      id: customer.kundenr,\n      name: customer.kundenavn,\n      address: customer.adresse1,\n      zipcode: customer.postnrk,\n      city: customer.poststed,\n      email: customer.epost,\n      drawingsEmail: customer.epost_Tegninger,\n      orderConfimEmail: customer.epost_Bestillingsbekreftelse,\n      orderConfrimEmailAlt: customer.epost_Ordrebekreftelse,\n      phone: customer.telefon,\n      constructionInformation: customer.std_konstr_opplysn,\n      salesPersonId: customer.ansvarligSelger_ID,\n    };\n  }\n}\n","/* eslint-disable no-underscore-dangle */\nimport page from \"page\";\nimport axios from \"axios\";\n\nimport Toastify from \"toastify-js\";\nimport { RouteContext } from \"@frontend/common/src/types/RouteContext\";\nimport { AuthService } from \"../services/pretreAPI/Auth/AuthService\";\nimport { OrderService } from \"../services/pretreAPI/order/OrderService\";\nimport \"toastify-js/src/toastify.css\";\nimport { EmployeeService } from \"../services/pretreAPI/employee/EmployeeService\";\nimport { CustomerEmployeeService } from \"../services/pretreAPI/customerEmployee/CustomerEmployeeService\";\nimport { LookupsService } from \"../services/pretreAPI/lookups/LookupsService\";\nimport { CustomerService } from \"../services/pretreAPI/customer/CustomerService\";\n\nimport { PreTreColors } from \"../styles/constants\";\nimport { fetchCms } from \"../services/cms/CMS\";\n\nexport const cms = {\n  fetch: fetchCms,\n};\n\nexport const api = {\n  auth: new AuthService(),\n  order: new OrderService(),\n  employees: new EmployeeService(),\n  customerEmployee: new CustomerEmployeeService(),\n  lookups: new LookupsService(),\n  customer: new CustomerService(),\n};\n\nexport const router = {\n  route(\n    url: string,\n    action: (payload: RouteContext<{} | void>, next: any) => void\n  ) {\n    page(url, ({ params, path, pathname, routePath }, next) => {\n      action({ params, path, pathname, routePath }, next);\n    });\n  },\n  redirect: page.redirect,\n  start: () =>\n    page.start({\n      click: true,\n    }),\n  navigateTo: (path: string) => page(path),\n};\n\nexport const tokenService = {\n  get: () => {\n    const token = localStorage.getItem(\"api_token\") || null;\n    axios.defaults.headers.common.Authorization = `Bearer ${token}`;\n    return token;\n  },\n  set: (token: string) => {\n    localStorage.setItem(\"api_token\", token);\n    axios.defaults.headers.common.Authorization = `Bearer ${token}`;\n  },\n  clear: () => {\n    localStorage.removeItem(\"api_token\");\n    axios.defaults.headers.common.Authorization = \"\";\n  },\n};\n\nexport const localFileStorage = {\n  // @ts-ignore\n  _files: undefined,\n  set: (files: File[]) => {\n    localFileStorage._files = files;\n  },\n  get: () => localFileStorage._files,\n};\n\nexport const toast = (text: string, duration: number = 3000) => {\n  Toastify({\n    text,\n    duration,\n    gravity: \"bottom\",\n    backgroundColor: PreTreColors.pretre,\n  }).showToast();\n};\n\nexport const persistentCache = {\n  get: (key: string, defaultValue: any = null): any => {\n    return localStorage.getItem(key) || defaultValue;\n  },\n  set: (key: string, value: any): void => {\n    localStorage.setItem(key, value);\n  },\n  remove: (key: string): void => {\n    return localStorage.removeItem(key);\n  },\n  clear: (): void => {\n    localStorage.clear();\n  },\n};\n","import { CMSArticle } from \"@frontend/common/src/types/CMSArticle\";\n\nexport const fetchCms = (\n  url: string\n): Promise<{ [index: number]: CMSArticle }> => {\n  return fetch(url)\n    .then((r) => r.text())\n    .then((r) => {\n      const parser = new DOMParser();\n      const xmlDoc = parser.parseFromString(r, \"text/xml\");\n      const nodes = xmlDoc.evaluate(\n        \"/ROOT/DATA/ARRAY\",\n        xmlDoc,\n        null,\n        XPathResult.ANY_TYPE,\n        null\n      );\n      const blobs: { [index: number]: CMSArticle } = {};\n      let result = nodes.iterateNext();\n      while (result) {\n        let id: number = null;\n        let value: string = null;\n        let title: string = null;\n        result.childNodes.forEach((element) => {\n          if (element.nodeName === \"DOC_ID\") {\n            id = parseInt(element.textContent, 10);\n          }\n          if (element.nodeName === \"TITLE\") {\n            title = element.textContent;\n          }\n          if (element.nodeName === \"CONTENT\") {\n            value = element.textContent;\n          }\n        });\n        blobs[id] = {\n          title,\n          content: value,\n        };\n        result = nodes.iterateNext();\n      }\n      return blobs;\n    });\n};\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nexport const Wrapper = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  opacity: 1;\n  transition: opacity 0.25s ease-in;\n  z-index: 30;\n`;\n\nexport const Backdrop = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background-color: ${PreTreColors.redbrown};\n  opacity: 0.3;\n  z-index: -1;\n  animation: fadeIn 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards;\n`;\n\nexport const Container = styled.div`\n  animation: blowUpModal 0.5s cubic-bezier(0.165, 0.84, 0.44, 1) forwards;\n  max-width: 80vw;\n  max-height: 90vh;\n  background: ${PreTreColors.weakBrite};\n  z-index: 4;\n  padding: 1rem 1rem 1rem 1rem;\n  border-radius: 8px;\n  overflow: hidden;\n\n  box-sizing: content-box;\n\n  @media (min-width: 320px) {\n    min-width: 320px;\n  }\n\n  @media (max-width: 320px) {\n    margin: 0 5px;\n    padding: 36px 15px;\n    width: inherit;\n  }\n`;\n\nexport const InnerContainer = styled.div`\n  overflow-x: hidden;\n  overflow-y: auto;\n  height: 100%;\n  width: 100%;\n  max-height: calc(95vh);\n  max-width: inherit;\n`;\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ntype Props = {\n  theme?: string;\n  type?: string;\n};\n\nexport const Heading = styled(\"h1\")<Props>`\n  font-size: ${(props: Props) =>\n    props.type === \"secondary\" ? \"1.25rem\" : \"2.625rem\"};\n  font-weight: 700;\n  color: ${(props: Props) =>\n    props.theme === \"light\" ? \"white\" : PreTreColors.beis};\n  font-family: \"Kumbh Sans Normal\", sans-serif;\n  line-height: normal;\n`;\n","// eslint-disable-next-line no-shadow\nexport enum OfferOptionType {\n  ROOF = 1,\n  ROOFING = 2,\n  JOIST_TYPE = 3,\n  JOISTING = 4,\n  PRECUT_DIMENSION = 5,\n  SUBMERGE_WETROOM = 6,\n}\n\nexport type OfferOption = {\n  id: number;\n  description: string;\n  note: string;\n  type: number;\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Heading } from \"./Header.styles\";\n\ntype Props = {\n  rest?: any;\n  type?: string;\n  theme?: string;\n};\nexport const Header: FunctionComponent<Props> = ({\n  children,\n  type,\n  theme,\n  ...rest\n}) => {\n  return (\n    <Heading theme={theme} type={type} {...rest}>\n      {children}\n    </Heading>\n  );\n};\n","import React, { FunctionComponent, useRef } from \"react\";\nimport { Backdrop, Container, InnerContainer, Wrapper } from \"./Modal.styles\";\nimport { useKeyDown } from \"../../hooks/useKeyDown\";\nimport { useOnClickOutside } from \"../../hooks/useOnClickOutside\";\nimport { Header } from \"../../elements/Header/Header\";\n\ntype Props = {\n  children: any;\n  isOpen: boolean;\n  onClose: any;\n  title?: string;\n};\n\nconst Modal: FunctionComponent<Props> = ({\n  title,\n  children,\n  isOpen,\n  onClose,\n}) => {\n  const ref = useRef();\n  const scrollRef = useRef<HTMLDivElement>();\n\n  useKeyDown(() => {\n    if (ref.current) {\n      onClose();\n    }\n  }, [27]);\n\n  useOnClickOutside(ref, () => {\n    onClose();\n  });\n\n  if (!isOpen) {\n    return null;\n  }\n  return (\n    <Wrapper>\n      <Backdrop />\n      <Container id=\"mainmodal\" ref={ref}>\n        <InnerContainer ref={scrollRef}>\n          {title && <Header>{title}</Header>}\n          {children}\n        </InnerContainer>\n      </Container>\n    </Wrapper>\n  );\n};\n\nexport default Modal;\n","import { useEffect } from \"react\";\n\nexport function useKeyDown(callback: () => void, keysToListenTo: number[]) {\n  useEffect(() => {\n    function onKeyDown(e: any) {\n      if (keysToListenTo.indexOf(e.which) !== -1) {\n        callback();\n      }\n    }\n    document.addEventListener(\"keydown\", onKeyDown);\n    return () => document.removeEventListener(\"keydown\", onKeyDown);\n  });\n}\n","import { useEffect } from \"react\";\n\n// https://usehooks.com/useOnClickOutside/\nexport function useOnClickOutside(ref: any, handler: any) {\n  useEffect(\n    () => {\n      const listener = (event: any) => {\n        // Do nothing if clicking ref's element or descendent elements. Also checks for Material UI menu.\n        if (\n          !ref.current ||\n          ref.current.contains(event.target) ||\n          event.target.closest(\".MuiDialog-root\") !== null ||\n          event.target.closest(\".MuiPopover-root\") !== null\n        ) {\n          return;\n        }\n\n        handler(event);\n      };\n\n      document.addEventListener(\"mousedown\", listener);\n      document.addEventListener(\"touchstart\", listener);\n\n      return () => {\n        document.removeEventListener(\"mousedown\", listener);\n        document.removeEventListener(\"touchstart\", listener);\n      };\n    }, // ... but to optimize you can wrap handler in useCallback before ... // ... callback/cleanup to run every render. It's not a big deal ... // ... function on every render that will cause this effect ... // It's worth noting that because passed in handler is a new ... // Add ref and handler to effect dependencies\n    // ... passing it into this hook.\n    [ref, handler]\n  );\n}\n","export default __webpack_public_path__ + \"static/media/Mellometasje.ed6a3eae.png\";","import React, { FunctionComponent } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { Select } from \"../../components/Select/Select\";\nimport Logo from \"../../assets/img/Mellometasje.png\";\nimport { OfferOptionType } from \"../../types/OfferOption\";\nimport { ExtendedPrecut } from \"../../types/DraftOrder/ExtendedPrecut\";\nimport { useAppState } from \"../../overmind\";\nimport { BlockButton } from \"../../components/Buttons/Buttons.styles\";\n\ninterface PrecutModalFormProps {\n  setPlans: (plans: ExtendedPrecut[]) => void;\n  plans: ExtendedPrecut[];\n  setSelectedPlan: (plans: ExtendedPrecut) => void;\n  selectedPlan: ExtendedPrecut | undefined;\n  setFormActive: (active: boolean) => void;\n}\n\nconst svills = [\n  {\n    label: \"36mm\",\n    value: \"36mm\",\n  },\n  {\n    label: \"2x36mm\",\n    value: \"2x36mm\",\n  },\n  {\n    label: \"48mm\",\n    value: \"48mm\",\n  },\n  {\n    label: \"2x48mm\",\n    value: \"2x48mm\",\n  },\n];\nconst PrecutModalForm: FunctionComponent<PrecutModalFormProps> = ({\n  setPlans,\n  plans,\n  selectedPlan,\n  setSelectedPlan,\n  setFormActive,\n}) => {\n  const { modals, offerOptions } = useAppState();\n\n  const dimensions = offerOptions\n    .filter((o) => o.type === OfferOptionType.PRECUT_DIMENSION)\n    .map((o) => ({ label: o.description, value: o.description }));\n\n  const onSubmit = (data: ExtendedPrecut) => {\n    if (selectedPlan !== undefined) {\n      const newPlans = plans.map((x) => {\n        if (x.name === data.name) {\n          return {\n            ...x,\n            bruttoVegghoyde: data.bruttoVegghoyde,\n            hoydeOverkantApning: data.hoydeOverkantApning,\n            dimensjonToppsvill: data.dimensjonToppsvill,\n            dimensjonStender: data.dimensjonStender,\n            dimensjonBunnsvill: data.dimensjonBunnsvill,\n            klaringTilKarm: data.klaringTilKarm,\n            biv1: data.biv1,\n            dimToppsvill1: data.dimToppsvill1,\n            dimBunnsvill1: data.dimBunnsvill1,\n            biv2: data.biv2,\n            dimToppsvill2: data.dimToppsvill2,\n            dimBunnsvill2: data.dimBunnsvill2,\n            biv3: data.biv3,\n            dimToppsvill3: data.dimToppsvill3,\n            dimBunnsvill3: data.dimBunnsvill3,\n          };\n        }\n        return x;\n      });\n      setPlans(newPlans);\n    } else {\n      const newPlan = {\n        ...data,\n        name: `Plan ${plans.length + 1}`,\n        projectId: modals.precutModal.projectId,\n      };\n      setPlans([...plans, newPlan]);\n    }\n    setSelectedPlan(undefined);\n    setFormActive(false);\n  };\n  const onCancel = () => {\n    setFormActive(false);\n    setSelectedPlan(undefined);\n  };\n  const { register, handleSubmit } = useForm<ExtendedPrecut>({\n    defaultValues: selectedPlan,\n  });\n  return (\n    <form onSubmit={handleSubmit(onSubmit)} style={{ width: \"100%\" }}>\n      <div style={{ display: \"flex\" }}>\n        <div>\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n          <input ref={register} type=\"hidden\" name=\"name\" />\n          <FormInput\n            label=\"Brutto vegghøyde\"\n            type=\"number\"\n            name=\"bruttoVegghoyde\"\n            suffix=\"mm\"\n            inputRef={register}\n          />\n          <FormInput\n            label=\"Høyde overkant åpning\"\n            type=\"number\"\n            name=\"hoydeOverkantApning\"\n            suffix=\"mm\"\n            inputRef={register}\n          />\n          <Select\n            name=\"dimensjonToppsvill\"\n            label=\"Dimensjon toppsvill\"\n            options={svills}\n            inputRef={register}\n          />\n          <Select\n            name=\"dimensjonStender\"\n            label=\"Dimensjon stender\"\n            options={dimensions}\n            inputRef={register}\n          />\n          <Select\n            name=\"dimensjonBunnsvill\"\n            label=\"Dimensjon bunnsvill\"\n            options={svills}\n            inputRef={register}\n          />\n          <FormInput\n            label=\"Klaring til karm\"\n            type=\"number\"\n            name=\"klaringTilKarm\"\n            suffix=\"mm\"\n            inputRef={register}\n          />\n        </div>\n        <div>\n          <img style={{ margin: \"0.5rem\" }} src={Logo} alt=\"logo\" />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            alignContent: \"center\",\n            alignItems: \"center\",\n            flexDirection: \"column\",\n            justifyContent: \"center\",\n            width: \"30%\",\n          }}\n        >\n          <BlockButton style={{ marginBottom: \"2em\" }} type=\"submit\">\n            {selectedPlan !== undefined\n              ? ` Oppdater ${selectedPlan.name}`\n              : `Legg til Plan ${plans.length + 1}`}\n          </BlockButton>\n          <BlockButton onClick={() => onCancel()} type=\"button\">\n            Avbryt\n          </BlockButton>\n        </div>\n      </div>\n      <div style={{ fontSize: \"1.125rem\", fontWeight: \"bolder\" }}>\n        Bærende innervegger:\n      </div>\n      <div\n        style={{\n          width: \"100%\",\n          display: \"flex\",\n          alignContent: \"flex-start\",\n        }}\n      >\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n          }}\n        >\n          <Select\n            align\n            selectWidth=\"12em\"\n            name=\"biv1\"\n            label=\"Dimensjon stender\"\n            options={dimensions}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"biv2\"\n            options={dimensions}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"biv3\"\n            options={dimensions}\n            inputRef={register}\n          />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            marginLeft: \"4em\",\n          }}\n        >\n          <Select\n            align\n            selectWidth=\"12em\"\n            name=\"dimToppsvill1\"\n            label=\"Dimensjon toppsvill\"\n            options={svills}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"dimToppsvill2\"\n            options={svills}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"dimToppsvill3\"\n            options={svills}\n            inputRef={register}\n          />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            marginLeft: \"4em\",\n          }}\n        >\n          <Select\n            align\n            selectWidth=\"12em\"\n            name=\"dimBunnsvill1\"\n            label=\"Dimensjon bunnsvill\"\n            options={svills}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"dimBunnsvill2\"\n            options={svills}\n            inputRef={register}\n          />\n          <Select\n            selectWidth=\"12em\"\n            name=\"dimBunnsvill3\"\n            options={svills}\n            inputRef={register}\n          />\n        </div>\n      </div>\n    </form>\n  );\n};\n\nexport default PrecutModalForm;\n","import React, { FunctionComponent } from \"react\";\nimport { BlockButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { ExtendedPrecut } from \"../../types/DraftOrder/ExtendedPrecut\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ninterface props {\n  setPlans: (plans: ExtendedPrecut[]) => void;\n  plans: ExtendedPrecut[];\n  selectedPlan: ExtendedPrecut;\n  setSelectedPlan: (plan: ExtendedPrecut) => void;\n  setFormActive: (form: boolean) => void;\n  autoFill: boolean;\n}\nexport const PrecutPlans: FunctionComponent<props> = ({\n  plans,\n  setPlans,\n  selectedPlan,\n  setSelectedPlan,\n  setFormActive,\n  autoFill,\n}) => {\n  const deleteProject = (plan: ExtendedPrecut) => {\n    if (autoFill) {\n      const precuts = plans.filter((x) => x.name !== plan.name);\n      setPlans([...precuts, { ...plan, deleted: true }]);\n    } else {\n      const projects = plans.filter((x) => x.name !== plan.name);\n      setPlans(projects);\n    }\n  };\n  /*\n  const unDeleteProject = (subProject: DraftOrderSubProject) => {\n    const map = subProjects.map((x) => {\n      if (x.projectId === subProject.projectId) {\n        return {\n          ...x,\n          deleted: false,\n        };\n      }\n      return x;\n    });\n    setSubProjects(map);\n  };\n\n  */\n  const onClickPlan = (plan: ExtendedPrecut) => {\n    if (plan.deleted !== true) {\n      setSelectedPlan(plan);\n      setFormActive(true);\n    }\n  };\n  return (\n    <div\n      style={{\n        width: \"20vw\",\n        backgroundColor: PreTreColors.borderlineGray,\n        borderRadius: \"10px\",\n        minHeight: \"50vh\",\n        maxHeight: \"50vh\",\n      }}\n    >\n      <div\n        style={{\n          backgroundColor: PreTreColors.pretre,\n          color: \"white\",\n          fontSize: \"1.2rem\",\n          padding: \"15px 0\",\n          borderRadius: \"10px\",\n          textAlign: \"center\",\n          height: \"3.5em\",\n        }}\n      >\n        Etasjehøyder\n      </div>\n      <div style={{ overflowY: \"auto\", maxHeight: \"45vh\" }}>\n        {plans.map((plan) => {\n          return (\n            <div\n              style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                padding: \"1em\",\n              }}\n              key={plan.name}\n            >\n              <div\n                style={{\n                  backgroundColor: selectedPlan === plan ? \"gray\" : \"white\",\n                  display: \"flex\",\n                  justifyContent: \"space-between\",\n                  color: plan.deleted !== true ? \"black\" : \"gray\",\n                  padding: \"1em\",\n                  borderRadius: \"10px\",\n                }}\n              >\n                {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n                <div\n                  style={{ display: \"flex\", flexDirection: \"column\", flex: 1 }}\n                  onClick={() => onClickPlan(plan)}\n                >\n                  <span\n                    style={{ fontSize: \"1.2rem\", textDecoration: \"underline\" }}\n                  >\n                    {plan.name}\n                  </span>\n                </div>\n\n                <BlockButton\n                  type=\"button\"\n                  style={{ width: \"20%\", height: \"2.5em\" }}\n                  onClick={() => deleteProject(plan)}\n                >\n                  Fjern\n                </BlockButton>\n              </div>\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n","import React, { FunctionComponent, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../components/Buttons/Buttons.styles\";\nimport { ExtendedPrecut } from \"../../types/DraftOrder/ExtendedPrecut\";\nimport PrecutModalForm from \"./PrecutModalForm\";\nimport { PrecutPlans } from \"./PrecutPlans\";\n\nexport const PrecutModal: FunctionComponent = () => {\n  const { modals } = useAppState();\n  const { t } = useTranslation();\n  const [plans, setPlans] = useState<ExtendedPrecut[]>([]);\n  const [selectedPlan, setSelectedPlan] = useState<ExtendedPrecut | undefined>(\n    undefined\n  );\n  const [formActive, setFormActive] = useState<boolean>(true);\n  const { modals: modalsActions } = useActions();\n\n  if (!modals.precutModal.isCurrent) {\n    return null;\n  }\n\n  const onSubmit = () => {\n    modalsActions.precutModal.close(plans);\n  };\n  return (\n    <Modal\n      isOpen={modals.precutModal.isCurrent}\n      onClose={() => modalsActions.precutModal.close(null)}\n    >\n      <div\n        style={{\n          width: \"80vw\",\n          display: \"flex\",\n          flexDirection: \"column\",\n          minHeight: \"90vh\",\n        }}\n      >\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"row\",\n            minHeight: \"85vh\",\n          }}\n        >\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n              justifyContent: \"space-between\",\n            }}\n          >\n            <PrecutPlans\n              setPlans={setPlans}\n              plans={plans}\n              selectedPlan={selectedPlan}\n              setSelectedPlan={setSelectedPlan}\n              setFormActive={setFormActive}\n              autoFill={false}\n            />\n            <BlockButton\n              onClick={() => setFormActive(true)}\n              disabled={formActive}\n            >\n              Legg til plan\n            </BlockButton>\n          </div>\n          <div style={{ display: \"flex\", flex: \"1\", marginLeft: \"4em\" }}>\n            {formActive && (\n              <PrecutModalForm\n                plans={plans}\n                setPlans={setPlans}\n                selectedPlan={selectedPlan}\n                setFormActive={setFormActive}\n                setSelectedPlan={setSelectedPlan}\n              />\n            )}\n          </div>\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            justifyContent: \"space-evenly\",\n            justifySelf: \"flex-end\",\n            width: \"100%\",\n          }}\n        >\n          <div style={{ display: \"flex\", width: \"20%\" }}>\n            <BlockButton type=\"button\" onClick={() => onSubmit()}>\n              {t(\"Done\")}\n            </BlockButton>\n            <LinkButton\n              as=\"a\"\n              onClick={() => modalsActions.precutModal.close(null)}\n            >\n              {t(\"Avbryt\")}\n            </LinkButton>\n          </div>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nimport { baseInputStyles } from \"../../styles/baseInput\";\n\ntype Props = {\n  error?: boolean;\n};\nexport const Input = styled(\"input\")<Props>`\n  ${baseInputStyles}\n  display: inline-block;\n  position: relative;\n  width: 100%;\n  ::placeholder {\n    color: ${PreTreColors.beis};\n    opacity: 0.7;\n  }\n`;\nexport const InputWrapper = styled(\"div\")`\n  width: 100%;\n`;\nexport const Suffix = styled(\"span\")`\n  width: 100%;\n  justify-content: end;\n`;\n","import React, { ChangeEvent, FunctionComponent } from \"react\";\nimport { Input } from \"./FileInput.styles\";\nimport { Label } from \"../Label/Label\";\nimport { FormControl, Error } from \"../FormControl/FormControl\";\nimport { RequiredFieldIndicator } from \"../RequiredFieldIndicator/RequiredFieldIndicator\";\n\ntype Props = {\n  htmlFor?: string;\n  label?: string;\n  name: string;\n  inputRef?: any;\n  error?: any;\n  required?: boolean;\n  onChange?: (value: FileList) => void;\n  multiple?: any;\n};\n\nexport const FileInput: FunctionComponent<Props> = ({\n  htmlFor,\n  label,\n  name,\n  inputRef,\n  error,\n  required,\n  onChange,\n  multiple,\n}) => {\n  return (\n    <FormControl>\n      <Label htmlFor={htmlFor}>\n        {label || null}\n        {required ? <RequiredFieldIndicator /> : \"\"}\n      </Label>\n      <Input\n        name={name}\n        type=\"file\"\n        ref={inputRef}\n        error={!!error}\n        multiple={multiple}\n        onChange={(e: ChangeEvent<HTMLInputElement>) =>\n          onChange ? onChange(e.target.files) : () => {}\n        }\n      />\n      {error ? <Error>{error}</Error> : null}\n    </FormControl>\n  );\n};\n","import React, { FunctionComponent, useState } from \"react\";\nimport { FileInput } from \"@frontend/common/src/elements/FileInput/FileInput\";\nimport { useTranslation } from \"react-i18next\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../components/Buttons/Buttons.styles\";\n\nexport const FileUploadModal: FunctionComponent = () => {\n  const { modals } = useAppState();\n\n  const { modals: modalsActions } = useActions();\n\n  const { t } = useTranslation();\n\n  const [files, setFiles] = useState<File[]>([]);\n\n  if (!modals.fileUploadModal.isCurrent) {\n    return null;\n  }\n  const addFiles = (f: FileList) => {\n    const file = files.concat(Array.from(f));\n    setFiles(file);\n  };\n  const removeFile = (name: string) => {\n    setFiles(files.filter((x) => x.name !== name));\n  };\n  return (\n    <Modal\n      isOpen={modals.fileUploadModal.isCurrent}\n      onClose={() => modalsActions.fileUploadModal.close(null)}\n    >\n      <div\n        style={{\n          minHeight: \"20vh\",\n          display: \"flex\",\n          flexDirection: \"column\",\n          justifyContent: \"space-between\",\n        }}\n      >\n        <FileInput\n          name=\"upload\"\n          label={t(\"Attach document\")}\n          multiple\n          onChange={(f) => {\n            addFiles(f);\n          }}\n        />\n        {files.map((x) => {\n          return (\n            <div style={{ marginBottom: \"0.5em\" }}>\n              <button\n                type=\"button\"\n                onClick={() => removeFile(x.name)}\n                style={{ marginRight: \"2em\" }}\n              >\n                Fjern fil\n              </button>\n              {x.name}\n            </div>\n          );\n        })}\n        <div style={{ display: \"flex\", justifySelf: \"flex-end\" }}>\n          <BlockButton\n            type=\"button\"\n            onClick={() => modalsActions.fileUploadModal.close(files)}\n          >\n            {t(\"Done\")}\n          </BlockButton>\n          <LinkButton\n            as=\"a\"\n            onClick={() => modalsActions.fileUploadModal.close(null)}\n          >\n            {t(\"Avbryt\")}\n          </LinkButton>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n","import styled from \"styled-components\";\n\nimport { PreTreColors } from \"../../../styles/constants\";\n\nexport const ColumnWrapper = styled(\"div\")`\n  padding: 20px;\n  width: 100%;\n  max-width: 550px;\n`;\nexport const PageFlexConstraint = styled.div<{ itemWidth?: string }>`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 2rem;\n  width: 100%;\n  padding: 0 2rem 0 2rem;\n  & > * {\n    min-width: 300px;\n    width: ${(props) => props.itemWidth ?? \"20vw\"};\n  }\n`;\nexport const HeaderWrapper = styled(\"div\")`\n  width: 100%;\n  padding: 20px 0 0 20px;\n`;\nexport const Text = styled(\"p\")`\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n`;\nexport const BoldText = styled(\"p\")`\n  font-size: 1.125rem;\n  color: ${PreTreColors.beis};\n  font-weight: bold;\n  margin-top: 15px;\n`;\nexport const ButtonSectionWrapper = styled(\"div\")`\n  max-width: 30vw;\n  margin-left: 20px;\n`;\n\nexport const ButtonWrapper = styled(\"div\")`\n  display: flex;\n  justify-content: space-between;\n  margin-left: 2em;\n  width: 80%;\n  @media (max-width: 1024px) {\n    width: 100%;\n    margin-left: 0;\n    margin-top: 1em;\n  }\n`;\n\nexport const StyledList = styled.li`\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  &:before {\n    content: \"-\";\n    margin: 0 0.5rem;\n  }\n`;\n\nexport const StyledSection = styled.section`\n  display: flex;\n  flex-direction: column;\n  gap: 2rem;\n`;\n\nexport const ChooseProductPageMainContainer = styled.div`\n  display: flex;\n  min-height: 50vh;\n  margin-top: 2em;\n  margin-left: 2rem;\n  @media (max-width: 1024px) {\n    flex-direction: column;\n  }\n`;\n","import React, { FunctionComponent } from \"react\";\n\ntype Props = {\n  activeStep: any;\n  steps: { title: string; slug: string }[];\n};\nexport const BreadCrumbs: FunctionComponent<Props> = ({\n  activeStep,\n  steps,\n}) => {\n  return (\n    <div\n      style={{\n        alignSelf: \"center\",\n        padding: \"2rem\",\n        color: \"white\",\n        fontSize: \"1rem\",\n        display: \"inherit\",\n      }}\n    >\n      {steps.map((step, idx) => (\n        <div key={idx}>\n          <a\n            style={{\n              padding: \"0 0.5rem\",\n              fontWeight:\n                steps.indexOf(step) === activeStep ? \"bold\" : \"normal\",\n            }}\n            href={step.slug}\n          >\n            {step.title}\n          </a>\n          {steps.indexOf(step) < steps.length - 1 ? \">\" : \"\"}\n        </div>\n      ))}\n    </div>\n  );\n};\n","import * as yup from \"yup\";\n\nexport const string = yup.string();\nexport const boolean = yup.boolean();\nexport const requiredField = yup.string().required(\"Påkrevd\");\n\nexport const dateInFuture = yup\n  .date()\n  .typeError(\"Vennligst velg en dato\")\n  .min(new Date(), \"Dato kan ikke være i fortiden\");\n\nconst nextWeek = new Date();\n\nnextWeek.setDate(nextWeek.getDate() + 13);\nexport const dateTwoWeekInFuture = yup\n  .date()\n  .when(\"preferredDeliveryDate\", (value) => {\n    if (value && value instanceof Date && !Number.isNaN(value)) {\n      return yup\n        .date()\n        .typeError(\"Vennligst velg en dato\")\n        .min(nextWeek, \"Må være minst to uker frem i tid\");\n    }\n    return yup.string().optional();\n  });\n\nexport const dateTwoWeekInFutureRequired = yup\n  .date()\n  .typeError(\"Vennligst velg en dato\")\n  .min(nextWeek, \"Må være minst to uker frem i tid\")\n  .required();\nexport const positiveNumeric = yup\n  .number()\n  .nullable()\n  .transform((value, originalValue) =>\n    String(originalValue).trim() === \"\" ? null : value\n  )\n  .typeError(\"Må være tall\")\n  .positive(\"Vennligst velg en gyldig verdi\");\n\nexport const decimalField = yup\n  .number()\n  .nullable()\n  .typeError(\"Må være tall\")\n  .positive(\"Vennligst velg en gyldig verdi\")\n  .transform((value: string, originalValue: string) => {\n    if (String(originalValue).trim() === \"\") {\n      return null;\n    }\n    return parseFloat(originalValue.replace(\",\", \".\"));\n  })\n  .min(0.0, \"Må være mellom 0 - 60\")\n  .max(60.0, \"Må være mellom 0 - 60\")\n  .typeError(\"Må være tall\");\n\nexport const positiveRequiredNumeric = positiveNumeric.required(\"Påkrevd\");\n\nexport const name = requiredField;\nexport const address = requiredField;\nexport const zipcode = requiredField;\nexport const city = requiredField;\nexport const email = yup.string().email();\nexport const requiredEmail = yup\n  .string()\n  .email()\n  .required(\"Vennligst fyll inn epost\");\nexport const deliveryDate = yup\n  .date()\n  .typeError(\"Vennligst velg en gyldig dato\")\n  .min(new Date(), \"Vennligst velg en gyldig dato\")\n  .required(\"Vennligst velg en gyldig dato\");\nexport const customerOrderNumber = yup\n  .number()\n  .typeError(\"Vennligst fyll inn gyldig nummer\")\n  .positive(\"Vennligst fyll inn et positivt nummer\")\n  .required(\"Vennligst fyll inn kundens ordrenummer\");\n\nexport const heightAboveSeaLevel = yup\n  .number()\n  .typeError(\"Vennligst fyll inn gyldig nummer\")\n  .positive(\"Vennligst fyll inn et positivt nummer\")\n  .required(\"Vennligst fyll inn moh\");\n\nexport const phoneNumber8digits = yup\n  .string()\n  .max(8, \"Telefonnummer kan ikke være lengre enn 8 tegn\")\n  .matches(/^\\d*$/, \"Vennligst fyll inn gyldig telefonnummer\");\n","import { Page } from \"@frontend/common/src/types/Page\";\nimport { OrderListPage } from \"../pages/order/OrderListPage/OrderListPage\";\nimport { ForgotPasswordPage } from \"../pages/Guest/ForgotPasswordPage/ForgotPasswordPage\";\nimport { LoginPage } from \"../pages/Guest/LoginPage/LoginPage\";\nimport { HomePage } from \"../pages/Home/HomePage\";\n\nimport { ViewOrderPage } from \"../pages/order/ViewOrderPage/ViewOrderPage\";\nimport { ViewOrderProjectPage } from \"../pages/order/ViewOrderProjectPage/ViewOrderProjectPage\";\nimport { TechnicalServicesPage } from \"../pages/TechnicalServicesPage/TechnicalServicesPage\";\nimport { CreateOrderPage } from \"../pages/order/CreateOrderPage/CreateOrderPage\";\nimport { UserPage } from \"../pages/user/UserPage\";\nimport { CompanyPage } from \"../pages/company/CompanyPage\";\nimport { DocumentationPage } from \"../pages/Documentation/DocumentationPage\";\n\nimport { ErrorPage } from \"../pages/error/ErrorPage\";\nimport Auth from \"../pages/Auth/Auth\";\nimport CompanySelectorPage from \"../pages/user/CompanySelectorPage\";\n\n// eslint-disable-next-line no-shadow\nexport enum PageAccess {\n  GUEST,\n  AUTH,\n}\n\ntype PageConfig = {\n  component: any;\n  restrictedTo: PageAccess | null;\n  route: string;\n};\nexport const pages: { [index: string]: PageConfig } = {\n  [Page.LOGIN]: {\n    component: LoginPage,\n    restrictedTo: PageAccess.GUEST,\n    route: \"/logg-inn\",\n  },\n  [Page.RESET_PASSWORD]: {\n    component: ForgotPasswordPage,\n    restrictedTo: PageAccess.GUEST,\n    route: \"/glemt-passord\",\n  },\n\n  [Page.HOME]: {\n    component: HomePage,\n    restrictedTo: null,\n    route: \"/\",\n  },\n\n  [Page.TECHNICAL_SERVICES]: {\n    component: TechnicalServicesPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/tekniske-tjenester\",\n  },\n\n  [Page.ORDER_LIST]: {\n    component: OrderListPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/mine-prosjekt/:side?\",\n  },\n  [Page.VIEW_ORDER]: {\n    component: ViewOrderPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/mine-prosjekt/vis/:id\",\n  },\n  [Page.VIEW_ORDER_PROJECT]: {\n    component: ViewOrderProjectPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/mine-prosjekt/prosjekt/:id\",\n  },\n\n  [Page.CREATE_ORDER]: {\n    component: CreateOrderPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/nytt-prosjekt/:slug?\",\n  },\n  [Page.USER]: {\n    component: UserPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/profil\",\n  },\n  [Page.COMPANY]: {\n    component: CompanyPage,\n    restrictedTo: PageAccess.AUTH,\n    route: \"/bedrift\",\n  },\n  [Page.DOCUMENTATION]: {\n    component: DocumentationPage,\n    restrictedTo: PageAccess.AUTH, // TODO Set this to ADMIN when implemented\n    route: \"/dokumentasjon\",\n  },\n  [Page.ERROR]: {\n    component: ErrorPage,\n    restrictedTo: null,\n    route: \"/error\",\n  },\n  [Page.EMULATE]: {\n    restrictedTo: PageAccess.AUTH,\n    route: \"/emulate/:customerId/:customerEmployeeId?\",\n    component: null,\n  },\n  [Page.AUTH]: {\n    restrictedTo: PageAccess.GUEST,\n    route: \"/auth\",\n    component: Auth,\n  },\n  [Page.CUSTOMER_SELECTOR]: {\n    restrictedTo: PageAccess.AUTH,\n    route: \"/kundevelger\",\n    component: CompanySelectorPage,\n  },\n};\n\nexport const getNavigationRoute = (page: Page): string => {\n  const p = pages[page];\n\n  if (!pages[page]) {\n    throw new Error(`Page not found: ${page}`);\n  }\n\n  return p.route;\n};\n\nexport const createUrl = (\n  page: Page,\n  params: { [index: string]: string | number } = null\n): string => {\n  const p = pages[page];\n\n  if (!pages[page]) {\n    throw new Error(`Page not found: ${page}`);\n  }\n\n  let { route } = p;\n  if (params) {\n    // eslint-disable-next-line guard-for-in,no-restricted-syntax\n    for (const key in params) {\n      route = route.replace(`:${key}`, params[key] as string); // replace required key\n      route = route.replace(`:${key}?`, params[key] as string); // replace optional key\n    }\n  }\n\n  route = route.replace(/:.+\\?/gi, \"\");\n  route = route.replace(/\\/\\//gi, \"/\");\n\n  return route;\n};\n","// TODO: kan ikke bruke i18next.t her..\nexport const yesNoOptions = [\n  { label: \"Ja\", value: \"1\" },\n  { label: \"Nei\", value: \"2\" },\n];\n","import styled from \"styled-components\";\nimport { PreTreColors } from \"../../styles/constants\";\n\nimport { baseInputStyles } from \"../../styles/baseInput\";\n\ntype Props = {\n  error?: boolean;\n};\nexport const Input = styled(\"input\")<Props>`\n  ${baseInputStyles}\n  display: inline-block;\n  position: relative;\n  width: 100%;\n  ::placeholder {\n    color: ${PreTreColors.beis};\n    opacity: 0.7;\n  }\n  &[disabled] {\n    background-color: #ccc;\n  }\n`;\nexport const InputWrapper = styled(\"div\")`\n  width: 100%;\n`;\nexport const Suffix = styled(\"span\")`\n  width: 100%;\n  justify-content: end;\n`;\n","import React, { FunctionComponent, useEffect, useMemo, useState } from \"react\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { useTranslation } from \"react-i18next\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport * as validators from \"@frontend/common/src/validators/index\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { DateFormat, formatDate } from \"@frontend/common/src/helpers/date\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { createUrl } from \"../../../app/pages\";\nimport { PageFlexConstraint } from \"../ChooseProductPage/CreateOrderPage.styles\";\nimport { DraftOrder } from \"../../../types/DraftOrder/DraftOrder\";\nimport { yesNoOptions } from \"../../../data/selectOptions\";\nimport { InputWrapper } from \"../../../components/FormInput/FormInput.styles\";\n\nexport const CustomerInformation: FunctionComponent = () => {\n  const { router } = useEffects();\n  const actions = useActions();\n  const state = useAppState();\n  const effects = useEffects();\n  const { t } = useTranslation();\n  const [sameAddressSelection, setSameAddressSelection] = useState(\n    yesNoOptions[0].value\n  );\n  const isSameAddress = useMemo(\n    () =>\n      sameAddressSelection ===\n      yesNoOptions.find((opt) => opt.label === \"Ja\").value,\n    [sameAddressSelection]\n  );\n  const customerInformationSchema = useMemo(() => {\n    return yup.object().shape(\n      {\n        // Customer information\n        customerContactId: validators.requiredField,\n        marked: validators.requiredField,\n\n        // Construction site\n        deliveryAddress: validators.address,\n        zipCode: validators.requiredField,\n        city: validators.requiredField,\n        // city: validators.requiredField, // not required.\n        farmNumber: validators.positiveNumeric,\n        subFarmNumber: validators.positiveNumeric,\n        mamsl: validators.positiveNumeric,\n\n        // deliveryAddressSameAsBuilding: validators.requiredField,\n        arrivalSemi: !state.orders.currentNewOrder.quotation\n          ? validators.requiredField\n          : null,\n        buildingType: !state.orders.currentNewOrder.quotation\n          ? validators.requiredField\n          : null,\n        deliveryTerms: !state.orders.currentNewOrder.quotation\n          ? validators.requiredField\n          : null,\n        preferredDeliveryDate: !state.orders.currentNewOrder.quotation\n          ? validators.dateTwoWeekInFutureRequired\n          : null,\n\n        deliveryAddress2:\n          !isSameAddress && !state.orders.currentNewOrder.quotation\n            ? validators.requiredField\n            : null,\n        zipCode2:\n          !isSameAddress && !state.orders.currentNewOrder.quotation\n            ? validators.requiredField\n            : null,\n        city2:\n          !isSameAddress && !state.orders.currentNewOrder.quotation\n            ? validators.requiredField\n            : null,\n\n        contactPersonPhoneNr: validators.phoneNumber8digits,\n      },\n      [[\"preferredDeliveryDate\", \"preferredDeliveryDate\"]]\n    );\n  }, [isSameAddress, state.orders.currentNewOrder.quotation]);\n\n  const { register, handleSubmit, errors, watch, setValue } =\n    useForm<DraftOrder>({\n      resolver: yupResolver(customerInformationSchema),\n      defaultValues: {\n        ...state.orders.autofill,\n        customerContactId: state.orders.autofill?.customerContactId,\n        preferredDeliveryDate: formatDate(\n          state.orders.autofill?.preferredDeliveryDate,\n          DateFormat.ISO_DATE\n        ),\n        ...state.orders.currentNewOrder,\n      },\n    });\n  const streetAddress = watch(\"deliveryAddress\");\n  const zipCode = watch(\"zipCode\");\n  const zipCode2 = watch(\"zipCode2\");\n  const city = watch(\"city\");\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const city2 = watch(\"city2\");\n\n  const contactPersons: { label: string; value: any }[] = useMemo(() => {\n    return state.customerEmployees\n      .filter((c) => c.hasQuit === false)\n      .map((c) => ({ label: `${c.name}`, value: c.id }));\n  }, []);\n\n  const deliveryOptions: { label: string; value: any }[] = useMemo(() => {\n    return [\n      { label: \"Hentes fabrikk\", value: \"Hentes fabrikk\" },\n      {\n        label: \"Pretre leverer ihht. standard\",\n        value: \"Pretre leverer ihht. standard\",\n      },\n    ];\n  }, []);\n\n  const onSubmit = (data: DraftOrder) => {\n    actions.orders.updateDraftOrder(data);\n    router.navigateTo(createUrl(Page.CREATE_ORDER, { slug: \"produktvalg\" }));\n  };\n\n  useEffect(() => {\n    if (zipCode && zipCode.length === 4) {\n      effects.api.lookups\n        .getCountyForZipcode(zipCode)\n        .then((county) => {\n          setValue(\"city\", county);\n        })\n        .catch(() => {});\n    }\n  }, [zipCode]);\n\n  useEffect(() => {\n    if (zipCode2 && zipCode2.length === 4) {\n      effects.api.lookups\n        .getCountyForZipcode(zipCode2)\n        .then((county) => {\n          setValue(\"city2\", county);\n        })\n        .catch(() => {});\n    }\n  }, [zipCode2]);\n\n  const onDeliveryAddressSameAsBuildingChanged = (value: string) =>\n    actions.orders.updateDraftOrder({\n      deliveryAddressSameAsBuilding: value === \"1\",\n    } as DraftOrder);\n\n  useEffect(\n    () => onDeliveryAddressSameAsBuildingChanged(sameAddressSelection),\n    [sameAddressSelection]\n  );\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <PageFlexConstraint>\n        <div>\n          <Header type=\"secondary\">1. {t(\"Kundeinformasjon\")}</Header>\n          <FormInput\n            disabled\n            label=\"Kundenavn\"\n            type=\"text\"\n            name=\"customerName\"\n            defaultValue={state.customer.name}\n          />\n          <Select\n            name=\"customerContactId\"\n            required\n            label=\"Kontaktperson\"\n            options={contactPersons}\n            inputRef={register}\n            error={errors.customerContactId?.message}\n          />\n          <FormInput\n            required\n            label=\"Prosjektnavn\"\n            type=\"text\"\n            name=\"marked\"\n            inputRef={register}\n            error={errors.marked?.message}\n          />\n          <FormInput\n            name=\"preferredDeliveryDate\"\n            type=\"date\"\n            label={t(\"Ønsket leveringsdato\")}\n            inputRef={register}\n            error={errors.preferredDeliveryDate?.message}\n            required={!state.orders.currentNewOrder.quotation}\n          />\n          <FormInput\n            label=\"Kundes bestillingsnr\"\n            type=\"text\"\n            name=\"customerOrderNumber\"\n            inputRef={register}\n          />\n        </div>\n\n        {/** ********** */}\n        {/* Section 2 */}\n        {/** ********** */}\n\n        <div>\n          <Header type=\"secondary\">2. Byggeplass</Header>\n          <FormInput\n            required\n            label=\"Addresse\"\n            type=\"text\"\n            name=\"deliveryAddress\"\n            inputRef={register}\n            error={errors.deliveryAddress?.message}\n          />\n          <div>\n            <InputWrapper style={{ display: \"flex\" }}>\n              <div style={{ marginRight: 10 }}>\n                <FormInput\n                  name=\"zipCode\"\n                  label=\"Postnummer\"\n                  type=\"number\"\n                  required\n                  inputRef={register}\n                  error={errors.zipCode?.message}\n                />\n              </div>\n              <div style={{ marginLeft: 10 }}>\n                <FormInput\n                  name=\"city\"\n                  label=\"Poststed\"\n                  required\n                  type=\"text\"\n                  inputRef={register}\n                  error={errors.city?.message}\n                />\n              </div>\n            </InputWrapper>\n          </div>\n          <div style={{ marginTop: 10 }}>\n            <InputWrapper style={{ display: \"flex\" }}>\n              <div style={{ marginRight: 10 }}>\n                <FormInput\n                  label=\"Gardsnr\"\n                  name=\"farmNumber\"\n                  inputRef={register}\n                  type=\"text\"\n                />\n              </div>\n              <div style={{ marginLeft: 10 }}>\n                <FormInput\n                  label=\"Bruksnr\"\n                  name=\"subFarmNumber\"\n                  inputRef={register}\n                  type=\"text\"\n                />\n              </div>\n            </InputWrapper>\n          </div>\n          <div style={{ marginTop: 10 }}>\n            <Label>Høyde over havet</Label>\n            <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\" }}>\n              <div style={{ marginRight: 10 }}>\n                <FormInput\n                  type=\"number\"\n                  name=\"mamsl\"\n                  inputRef={register}\n                  error={errors.mamsl?.message}\n                />\n              </div>\n\n              {streetAddress && zipCode && city ? (\n                <BlockButton\n                  as=\"a\"\n                  style={{\n                    fontSize: \"1rem\",\n                    padding: \"0rem\",\n                    margin: \"1rem 0.5rem .5rem\",\n                    textAlign: \"center\",\n                    paddingTop: \".9rem\",\n                  }}\n                  href={`https://www.norgeskart.no/#!?project=norgeskart&zoom=13&layers=panel=searchOptionsPanel&sok=${streetAddress}, ${zipCode} ${city}`}\n                  target=\"_blank\"\n                >\n                  Norgeskart\n                </BlockButton>\n              ) : (\n                <BlockButton\n                  disabled\n                  style={{\n                    fontSize: \"1rem\",\n                    padding: \"0rem\",\n                    margin: \"1rem 0.5rem .5rem\",\n                  }}\n                >\n                  Norgeskart\n                </BlockButton>\n              )}\n            </div>\n          </div>\n          <FormInput\n            label=\"Kontaktperson byggeplass\"\n            type=\"text\"\n            name=\"contactPersonSite\"\n            inputRef={register}\n          />\n          <FormInput\n            label=\"Telefon byggeplass\"\n            type=\"text\"\n            name=\"contactPersonPhoneNr\"\n            inputRef={register}\n            error={errors.contactPersonPhoneNr?.message}\n          />\n        </div>\n\n        <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"2rem\" }}>\n          <div>\n            <Header type=\"secondary\">3. Leveringsaddresse</Header>\n\n            <Select\n              name=\"deliveryAddressSameAsBuilding\"\n              required={!state.orders.currentNewOrder.quotation}\n              label=\"Samme som byggeplass?\"\n              options={yesNoOptions}\n              onSelectionChanged={(val) => setSameAddressSelection(val)}\n              error={errors.deliveryAddressSameAsBuilding?.message}\n            />\n\n            <FormInput\n              label=\"Adresse\"\n              name=\"deliveryAddress2\"\n              type=\"text\"\n              inputRef={register}\n              required={!isSameAddress}\n              disabled={isSameAddress}\n              error={errors?.deliveryAddress2?.message}\n            />\n\n            <div>\n              <InputWrapper style={{ display: \"flex\" }}>\n                <div style={{ marginRight: 10 }}>\n                  <FormInput\n                    label=\"Postnummer\"\n                    name=\"zipCode2\"\n                    type=\"number\"\n                    required={!isSameAddress}\n                    inputRef={register}\n                    disabled={isSameAddress}\n                    error={errors?.zipCode2?.message}\n                  />\n                </div>\n                <div style={{ marginLeft: 10 }}>\n                  <FormInput\n                    label=\"Poststed\"\n                    name=\"city2\"\n                    type=\"text\"\n                    required={!isSameAddress}\n                    inputRef={register}\n                    disabled={isSameAddress}\n                    error={errors?.city2?.message}\n                  />\n                </div>\n              </InputWrapper>\n            </div>\n          </div>\n\n          <div>\n            <Header type=\"secondary\">4. Annet</Header>\n            <Select\n              required={!state.orders.currentNewOrder.quotation}\n              name=\"arrivalSemi\"\n              label=\"Tilkomst for semi på byggeplass?\"\n              options={yesNoOptions}\n              inputRef={register}\n              error={errors.arrivalSemi?.message}\n            />\n            <Select\n              name=\"deliveryTerms\"\n              required={!state.orders.currentNewOrder.quotation}\n              label=\"Levering\"\n              inputRef={register}\n              options={deliveryOptions}\n              error={errors.deliveryTerms?.message}\n            />\n\n            <Select\n              name=\"buildingType\"\n              required={!state.orders.currentNewOrder.quotation}\n              label=\"Byggtype\"\n              inputRef={register}\n              options={state.buildingTypes.map((p) => ({\n                label: p.name,\n                value: p.id,\n              }))}\n              error={errors.buildingType?.message}\n            />\n\n            <div\n              style={{\n                display: \"flex\",\n                width: \"30vw\",\n                marginTop: \"2rem\",\n                position: \"relative\",\n                bottom: 0,\n              }}\n            >\n              <BlockButton\n                // onClick={() => router.navigateTo(createUrl(Page.CREATE_ORDER, { slug: \"produktvalg\" }))}\n                onClick={() => false}\n                style={{ width: \"1000px\" }}\n                type=\"submit\"\n              >\n                Neste\n              </BlockButton>\n              <LinkButton onClick={() => actions.orders.cancelCreateOrder()}>\n                Avbryt\n              </LinkButton>\n            </div>\n          </div>\n        </div>\n      </PageFlexConstraint>\n    </form>\n  );\n};\n","import styled from \"styled-components\";\n\nimport { baseInputStyles } from \"webapp/src/styles/baseInput\";\n\nexport const InputArea = styled(\"textarea\")`\n  ${baseInputStyles}\n  width: 100%;\n  &[disabled] {\n    background: #ddd;\n    border: 1px solid #b7b7b7;\n  }\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport { FormControl } from \"@frontend/common/src/elements/FormControl/FormControl\";\nimport { InputArea } from \"./TextArea.styles\";\n\ntype Props = {\n  label?: string;\n  name?: string;\n  rows?: number;\n  cols?: number;\n  htmlFor?: string;\n  inputRef?: any;\n  as?: any;\n} & React.HTMLProps<HTMLTextAreaElement>;\n\nexport const TextArea: FunctionComponent<Props> = ({\n  label,\n  name,\n  rows,\n  cols,\n  htmlFor,\n  inputRef,\n  ...props\n}) => {\n  return (\n    <FormControl>\n      {label ? <Label htmlFor={htmlFor}>{label}</Label> : null}\n      <InputArea\n        name={name}\n        rows={rows}\n        cols={cols}\n        ref={inputRef}\n        {...props}\n      />\n    </FormControl>\n  );\n};\n","export const makeId = (length: number) => {\n  let result = \"\";\n  const characters =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n  const charactersLength = characters.length;\n  for (let i = 0; i < length; i++) {\n    result += characters.charAt(Math.floor(Math.random() * charactersLength));\n  }\n  return result;\n};\n","import React, { FunctionComponent } from \"react\";\n\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { useAppState } from \"../../../overmind\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\n\nimport { yesNoOptions } from \"../../../data/selectOptions\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\n\nexport type FormProps = {\n  subProjects: DraftOrderSubProject[];\n  setSubProjects: (projects: DraftOrderSubProject[]) => void;\n  setActiveForm: (form: string) => void;\n  selectedSubProject: DraftOrderSubProject | undefined;\n  setSelectedSubProject: (project: DraftOrderSubProject | undefined) => void;\n  autoFill: boolean;\n};\n\nexport const RoofForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  autoFill,\n}) => {\n  const { t } = useTranslation();\n\n  const { offerOptions, orders } = useAppState();\n\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            rangeDistance:\n              data.rangeDistance ?? selectedSubProject.rangeDistance,\n            roofType: data.roofType ?? selectedSubProject.roofType,\n            roofingType: data.roofingType ?? selectedSubProject.roofingType,\n            angle: data.angle ?? selectedSubProject.angle,\n            protrusion: data.protrusion ?? selectedSubProject.protrusion,\n            workingWidth: data.workingWidth ?? selectedSubProject.workingWidth,\n            additionalCrane:\n              data.additionalCrane ?? selectedSubProject.additionalCrane,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n\n  const roof = yup.object().shape({\n    roofType: validators.requiredField,\n    roofingType: validators.requiredField,\n    angle: validators.decimalField,\n    rangeDistance: validators.positiveNumeric,\n    protrusion: validators.positiveNumeric.min(0, \"Må være over 0\"),\n    additionalCrane: !orders.currentNewOrder.quotation\n      ? validators.requiredField\n      : null,\n    workingWidth: validators.positiveNumeric,\n  });\n  const { register, handleSubmit, errors } = useForm<DraftOrderSubProject>({\n    // @ts-ignore\n    resolver: yupResolver(roof),\n    defaultValues: selectedSubProject,\n  });\n  const roofTypes = offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOF)\n    .map((o) => ({ label: o.description, value: o.id }));\n\n  const roofingTypes = offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOFING)\n    .map((o) => ({ label: o.description, value: o.id }));\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input ref={register} type=\"hidden\" value=\"roof\" name=\"type\" />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n\n          <Select\n            name=\"roofType\"\n            label={t(\"Pick roof type\")}\n            options={roofTypes}\n            required\n            inputRef={register}\n            error={errors.roofType?.message}\n            disabled={\n              autoFill &&\n              selectedSubProject.roofType !== null &&\n              selectedSubProject.roofType.length > 0\n            }\n          />\n          <Select\n            name=\"roofingType\"\n            label={t(\"Roofing\")}\n            options={roofingTypes}\n            inputRef={register}\n            error={errors.roofingType?.message}\n            disabled={\n              autoFill &&\n              selectedSubProject.roofingType !== null &&\n              selectedSubProject.roofType.length > 0\n            }\n            required\n          />\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            <FormInput\n              label={t(\"Roof angle\")}\n              type=\"number\"\n              name=\"angle\"\n              suffix=\"grader\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.angle?.message}\n            />\n            <FormInput\n              label={t(\"Range distance\")}\n              type=\"number\"\n              suffix=\"mm\"\n              name=\"rangeDistance\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.rangeDistance?.message}\n            />\n          </div>\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            <FormInput\n              label={t(\"Protrusion\")}\n              type=\"number\"\n              name=\"protrusion\"\n              suffix=\"mm\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.protrusion?.message}\n            />\n\n            <FormInput\n              label={t(\"Virkesbredde\")}\n              type=\"number\"\n              name=\"workingWidth\"\n              suffix=\"mm\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.workingWidth?.message}\n            />\n          </div>\n\n          <Select\n            name=\"additionalCrane\"\n            label={t(\"Ekstra kraning \")}\n            options={yesNoOptions}\n            inputRef={register}\n            error={errors.additionalCrane?.message}\n            disabled={\n              autoFill &&\n              selectedSubProject.additionalCrane !== null &&\n              selectedSubProject.additionalCrane.length > 0\n            }\n            required={!orders.currentNewOrder.quotation}\n          />\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n          />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            alignContent: \"center\",\n            alignItems: \"center\",\n            flexDirection: \"column\",\n            justifyContent: \"center\",\n            width: \"30%\",\n          }}\n        >\n          <BlockButton style={{ marginBottom: \"2em\" }} type=\"submit\">\n            {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n          </BlockButton>\n          <BlockButton onClick={() => onCancel()} type=\"button\">\n            Avbryt\n          </BlockButton>\n        </div>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent, useMemo } from \"react\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { PreTreColors } from \"../../../styles/constants\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { useAppState } from \"../../../overmind\";\n\ninterface props {\n  subProjects: DraftOrderSubProject[];\n  setSubProjects: (projects: DraftOrderSubProject[]) => void;\n  selectedSubProject: DraftOrderSubProject;\n  setSelectedSubProject: (project: DraftOrderSubProject) => void;\n  setActiveForm: (form: string) => void;\n  autoFill: boolean;\n}\n\nexport const SubProjects: FunctionComponent<props> = ({\n  subProjects,\n  setSubProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  setActiveForm,\n  autoFill,\n}) => {\n  const state = useAppState();\n  const roofTypes = state.offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOF)\n    .map((o) => ({ label: o.description, value: o.id }));\n\n  const joistsTypes = useMemo(\n    () =>\n      state.offerOptions\n        .filter((o) => o.type === OfferOptionType.JOIST_TYPE)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [state.offerOptions]\n  );\n\n  const dimensions = useMemo(\n    () =>\n      state.offerOptions\n        .filter((o) => o.type === OfferOptionType.PRECUT_DIMENSION)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [state.offerOptions]\n  );\n\n  const deterimineProductName = (subProj: DraftOrderSubProject) => {\n    let returnVal = \"\";\n    if (subProj.type === \"technical\") {\n      returnVal = \"Tekniske tjenester\";\n    } else if (subProj.type === \"roof\" || subProj.type === \"extendedRoof\") {\n      const roof = roofTypes.find(\n        (x) => x.value.toString() === subProj.roofType\n      );\n      returnVal = roof ? roof.label : \"\";\n    } else if (\n      subProj.type === \"beamlayer\" ||\n      subProj.type === \"extendedBeamlayer\"\n    ) {\n      const joist = joistsTypes.find(\n        (x) => x.value.toString() === subProj.joistsType\n      );\n      returnVal = joist ? joist.label : \"\";\n    } else if (subProj.type === \"precut\" || subProj.type === \"extendedPrecut\") {\n      const dim = dimensions.find(\n        (x) => x.value.toString() === subProj.dimensions\n      );\n      returnVal = `Precut ${dim ? dim.label : \"\"}`;\n    } else {\n      returnVal = subProj.type;\n    }\n    return returnVal !== \"\" ? returnVal : subProj.type;\n  };\n  const deleteProject = (subProject: DraftOrderSubProject) => {\n    if (autoFill) {\n      const projects = subProjects.filter(\n        (x) => x.projectId !== subProject.projectId\n      );\n      setSubProjects([...projects, { ...subProject, deleted: true }]);\n    } else {\n      const projects = subProjects.filter(\n        (x) => x.projectId !== subProject.projectId\n      );\n      setSubProjects(projects);\n    }\n  };\n\n  const unDeleteProject = (subProject: DraftOrderSubProject) => {\n    const map = subProjects.map((x) => {\n      if (x.projectId === subProject.projectId) {\n        return {\n          ...x,\n          deleted: false,\n        };\n      }\n      return x;\n    });\n    setSubProjects(map);\n  };\n  const onClickProject = (subProject: DraftOrderSubProject) => {\n    if (subProject.deleted !== true) {\n      setSelectedSubProject(subProject);\n      setActiveForm(subProject.type);\n    }\n  };\n  return (\n    <div\n      style={{\n        minWidth: \"20vw\",\n        backgroundColor: PreTreColors.borderlineGray,\n        borderRadius: \"10px\",\n        height: \"50vh\",\n      }}\n    >\n      <div\n        style={{\n          backgroundColor: PreTreColors.pretre,\n          color: \"white\",\n          fontSize: \"1.2rem\",\n          padding: \"15px 0\",\n          borderRadius: \"10px\",\n          textAlign: \"center\",\n          height: \"3.5em\",\n        }}\n      >\n        Valgte produkter i prosjektet:\n      </div>\n      <div style={{ overflowY: \"auto\", maxHeight: \"45vh\" }}>\n        {subProjects.map((proj, index) => {\n          return (\n            <div\n              style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                padding: \"1em\",\n              }}\n            >\n              <div\n                style={{\n                  backgroundColor:\n                    selectedSubProject === proj ? \"gray\" : \"white\",\n                  display: \"flex\",\n                  justifyContent: \"space-between\",\n                  color: proj.deleted !== true ? \"black\" : \"gray\",\n                  padding: \"1em\",\n                  borderRadius: \"10px\",\n                }}\n              >\n                {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n                <div\n                  style={{ display: \"flex\", flexDirection: \"column\", flex: 1 }}\n                  onClick={() => onClickProject(proj)}\n                >\n                  <span\n                    style={{ fontSize: \"1.2rem\", textDecoration: \"underline\" }}\n                  >\n                    {index + 1}. {deterimineProductName(proj)}\n                  </span>\n                  <span>\n                    {proj.comment?.length > 0 ? `(${proj.comment})` : \"\"}\n                  </span>\n                </div>\n                {proj.deleted === true ? (\n                  <BlockButton\n                    type=\"button\"\n                    style={{ width: \"30%\", height: \"2.5em\", fontSize: \"1rem\" }}\n                    onClick={() => unDeleteProject(proj)}\n                  >\n                    Legg til\n                  </BlockButton>\n                ) : (\n                  <BlockButton\n                    type=\"button\"\n                    style={{ width: \"20%\", fontSize: \"1rem\" }}\n                    onClick={() => deleteProject(proj)}\n                  >\n                    Fjern\n                  </BlockButton>\n                )}\n              </div>\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n","import React, { FunctionComponent, useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { useAppState } from \"../../../overmind\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { FormProps } from \"./RoofForm\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\n\nexport const JoistsForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  setSelectedSubProject,\n  selectedSubProject,\n  autoFill,\n}) => {\n  const { t } = useTranslation();\n  const { offerOptions } = useAppState();\n  const joists = yup.object().shape({\n    joistsType: validators.string,\n    submergeWetRoom: autoFill ? validators.string : validators.requiredField,\n    millimetersImmersed: validators.positiveNumeric,\n  });\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            joistsType: data.joistsType ?? selectedSubProject.joistsType,\n            submergeWetRoom:\n              data.submergeWetRoom ?? selectedSubProject.submergeWetRoom,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n\n  const { register, handleSubmit, errors } = useForm<DraftOrderSubProject>({\n    // @ts-ignore\n    resolver: yupResolver(joists),\n    defaultValues: selectedSubProject,\n  });\n  const joistsTypes = useMemo(\n    () =>\n      offerOptions\n        .filter((o) => o.type === OfferOptionType.JOIST_TYPE)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [offerOptions]\n  );\n\n  const submergeWetRooms = useMemo(\n    () =>\n      offerOptions\n        .filter((o) => o.type === OfferOptionType.SUBMERGE_WETROOM)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [offerOptions]\n  );\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input ref={register} type=\"hidden\" value=\"beamlayer\" name=\"type\" />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n\n          <Select\n            name=\"joistsType\"\n            label={t(\"Pick joist type\")}\n            options={joistsTypes}\n            inputRef={register}\n            disabled={\n              autoFill &&\n              selectedSubProject.joistsType !== null &&\n              selectedSubProject.joistsType.length > 0\n            }\n            error={errors.joistsType?.message}\n          />\n          <Select\n            name=\"submergeWetRoom\"\n            label={t(\"Immerse wetroom\")}\n            options={submergeWetRooms}\n            inputRef={register}\n            disabled={\n              autoFill &&\n              selectedSubProject.submergeWetRoom !== null &&\n              selectedSubProject.submergeWetRoom.length > 0\n            }\n            error={errors.submergeWetRoom?.message}\n            required={!autoFill}\n          />\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n          />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            alignContent: \"center\",\n            alignItems: \"center\",\n            flexDirection: \"column\",\n            justifyContent: \"center\",\n            width: \"30%\",\n          }}\n        >\n          <BlockButton style={{ marginBottom: \"2em\" }} type=\"submit\">\n            {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n          </BlockButton>\n          <BlockButton onClick={() => onCancel()} type=\"button\">\n            Avbryt\n          </BlockButton>\n        </div>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { useAppState } from \"../../../overmind\";\n\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { FormProps } from \"./RoofForm\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\n\nconst precut = yup.object().shape({\n  dimensions: validators.string.required(),\n  comment: validators.string,\n});\n\nexport const PrecutForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  autoFill,\n}) => {\n  const { t } = useTranslation();\n  const { offerOptions } = useAppState();\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            dimensions: data.dimensions ?? selectedSubProject.dimensions,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const dimensions = offerOptions\n    .filter((o) => o.type === OfferOptionType.PRECUT_DIMENSION)\n    .map((o) => ({ label: o.description, value: o.id }));\n  const { register, handleSubmit, errors } = useForm<DraftOrderSubProject>({\n    resolver: yupResolver(precut),\n    defaultValues: selectedSubProject,\n  });\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input ref={register} type=\"hidden\" value=\"precut\" name=\"type\" />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n\n          <Select\n            name=\"dimensions\"\n            label={t(\"Dimension\")}\n            options={dimensions}\n            inputRef={register}\n            error={errors.dimensions?.message}\n            required\n            disabled={\n              autoFill &&\n              selectedSubProject.dimensions !== null &&\n              selectedSubProject.dimensions.length > 0\n            }\n          />\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n            defaultValue={errors.comment?.message}\n          />\n          <CMSContent contentId={CMSArticles.PRECUT_INFO} />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            alignContent: \"center\",\n            alignItems: \"center\",\n            flexDirection: \"column\",\n            justifyContent: \"center\",\n            width: \"30%\",\n          }}\n        >\n          <BlockButton style={{ marginBottom: \"2em\" }} type=\"submit\">\n            {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n          </BlockButton>\n          <BlockButton onClick={() => onCancel()} type=\"button\">\n            Avbryt\n          </BlockButton>\n        </div>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { useAppState } from \"../../../overmind\";\n\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { FormProps } from \"./ExtendedRoofForm\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\n\nconst technicalServices = yup.object().shape({\n  technical: validators.string,\n  comment: validators.string,\n});\n\nexport const TechnicalServicesForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  autoFill,\n  quickChoice,\n  onMainCancel,\n}) => {\n  const { t } = useTranslation();\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const { offerOptions } = useAppState();\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            technicalType: data.technicalType,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n    if (quickChoice !== null) {\n      onMainCancel();\n    }\n  };\n\n  const technical = [\n    {\n      label: \"Arbeidstegninger\",\n      value: \"1\",\n    },\n    {\n      label: \"Søknadstegninger\",\n      value: \"2\",\n    },\n    {\n      label: \"Teknisk rådgiving\",\n      value: \"3\",\n    },\n    {\n      label: \"Byggesøknad\",\n      value: \"4\",\n    },\n    {\n      label: \"Mengdeberegning\",\n      value: \"5\",\n    },\n    {\n      label: \"Energiberegning\",\n      value: \"6\",\n    },\n    {\n      label: \"Energimerking\",\n      value: \"7\",\n    },\n    {\n      label: \"Statiske beregninger\",\n      value: \"8\",\n    },\n    {\n      label: \"Stabilitetsberegning\",\n      value: \"9\",\n    },\n  ];\n  const { register, handleSubmit, errors } = useForm<DraftOrderSubProject>({\n    resolver: yupResolver(technicalServices),\n    defaultValues: selectedSubProject,\n  });\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input ref={register} type=\"hidden\" value=\"technical\" name=\"type\" />\n\n          <Select\n            name=\"technicalType\"\n            label={t(\"TechnicalType\")}\n            options={technical}\n            inputRef={register}\n            error={errors.dimensions?.message}\n            required\n            disabled={\n              autoFill && selectedSubProject.technicalType !== undefined\n            }\n          />\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n            defaultValue={errors.comment?.message}\n          />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            alignContent: \"center\",\n            alignItems: \"center\",\n            flexDirection: \"column\",\n            justifyContent: \"center\",\n            width: \"30%\",\n          }}\n        >\n          <BlockButton style={{ marginBottom: \"2em\" }} type=\"submit\">\n            {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n          </BlockButton>\n          <BlockButton onClick={() => onCancel()} type=\"button\">\n            Avbryt\n          </BlockButton>\n        </div>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { useAppState } from \"../../overmind\";\nimport { CMSContent } from \"../../components/CMSContent/CMSContent\";\nimport { PreTreColors } from \"../../styles/constants\";\n\ninterface ModalProps {\n  cancelCalculation: () => void;\n}\n\nexport const CalculatePriceModal: FunctionComponent<ModalProps> = ({\n  cancelCalculation,\n}: ModalProps) => {\n  const { modals } = useAppState();\n\n  if (!modals.calculatePriceModal.isCurrent) {\n    return null;\n  }\n\n  return (\n    <Modal\n      isOpen={modals.calculatePriceModal.isCurrent}\n      onClose={() => cancelCalculation()}\n    >\n      <div\n        style={{\n          backgroundColor: PreTreColors.pretre,\n          color: \"white\",\n          fontSize: \"2.2rem\",\n          padding: \"2rem\",\n          borderRadius: \"10px\",\n          textAlign: \"center\",\n          height: \"3.5em\",\n          width: \"100%\",\n          display: \"flex\",\n          justifyContent: \"center\",\n        }}\n      >\n        <span style={{ marginLeft: \"auto\", marginRight: \"auto\" }}>\n          <CMSContent contentId={1465} />\n        </span>\n        {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n        <span\n          style={{\n            display: \"flex\",\n            fontSize: \"2.2rem\",\n            cursor: \"pointer\",\n          }}\n          onClick={() => cancelCalculation()}\n        >\n          X\n        </span>\n      </div>\n      <div\n        style={{\n          display: \"flex\",\n          flexDirection: \"column\",\n          justifyContent: \"space-evenly\",\n          fontSize: \"2rem\",\n          height: \"10em\",\n        }}\n      >\n        <CMSContent contentId={1466} />\n      </div>\n    </Modal>\n  );\n};\n","export default __webpack_public_path__ + \"static/media/A-takstol med rafthøgde.0f234c3d.png\";","export default __webpack_public_path__ + \"static/media/A-takstol standard.e9299cac.png\";","export default __webpack_public_path__ + \"static/media/A-takstol undergurt ut.2d7cf607.png\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5gAAAHgCAYAAADAJsI4AAAAx3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio7gF8QehyRU6gYdvwaMlEQ9ifPFdg7j1L6fd3p1EEqSvGmxUsAhJkbVhcJEHYwggwdMgSN7y6e2JHnsLbMNtMyIKx8/rIjVVb4Y6RGF/V4wmZH0YRQXcZ+IXJxhZGHENAsYBnU+C4rpdn3C3uAOnSd1OtrwBozbnt+y+fbO7EkmauxpZ2aZA3A/nLi6yIPNG9EbqhfEWRhjEl/Ivz0tpB+gEVoVR5OKUwAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfW0u1VhzsUMQhQ3Wyi4o4lioWwUJpK7TqYHLpFzRpSFJcHAXXgoMfi1UHF2ddHVwFQfADxNXFSdFFSvxfUmgR48FxP97de9y9A7ytGlOMvjigqKaeSSaEfGFVCLzCjwEMIoKgyAwtlV3MwXV83cPD17sYz3I/9+cYkosGAzwCcZxpukm8QTy7aWqc94nDrCLKxOfEkzpdkPiR65LDb5zLNnt5ZljPZeaJw8RCuYelHmYVXSGeIY7Kikr53rzDMuctzkqtwTr35C8MFdWVLNdpjiGJJaSQhgAJDVRRg4kYrSopBjK0n3Dxj9r+NLkkclXByLGAOhSIth/8D353a5Smp5ykUALwv1jWxzgQ2AXaTcv6Pras9gngewau1K6/3gLmPklvdrXoETC8DVxcdzVpD7jcASJPmqiLtuSj6S2VgPcz+qYCMHILBNec3jr7OH0ActTV8g1wcAhMlCl73eXd/b29/Xum098PTr5ymNQJOLcAAA80aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjM4MWEyMDBhLTdjZmEtNDc2ZC1hMzNlLWFmNjNiMzE4Mjk0ZSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1MDhkZmZmMC1kN2Y3LTRkNzctYmMxYS1mMWFiMjU1NzA2NDEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphNDkyY2JmNS0xNDk0LTQwMDQtYTdkMi05ZWI5MjA0MjcxNmEiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTY4MzYzMTQ4MTU0NTM5OCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzowNTowOVQxMzoyNDo0MSswMjowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MDU6MDlUMTM6MjQ6NDErMDI6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNDM0NzU0OC1hYTJkLTQyYWQtYjdlNy0xNTU5NGI0N2M3YjkiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMDUtMDRUMTQ6MzA6MTgiLz4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDE0ZWIzOTMtNDFhNi00NzE0LWJjNjQtNzljZmU0YjgxOTBlIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKFdpbmRvd3MpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTA1LTA0VDE0OjMzOjIyIi8+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmI5OTE3YWExLWQxZDQtNDY2MC1iNjVkLTViMWI0OGUwMGRmZSIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0wNS0wOVQxMzoyNDo0MSIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7CGy2yAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAB3RJTUUH5wUJCxgpvoGutAAACWZJREFUeNrt1zEBAAAIwzDAv+ehgIs3kdCvnSQFAAAATyMBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAwGACAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAACAwQQAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgykBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAwGACAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAACAwQQAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgykBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAwGACAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAACAwQQAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgykBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAwGACAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAACAwQQAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgykBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAwGACAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAACAwQQAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgykBAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAABhMAAAAMJgAAAAYTAAAAAwmAAAAGEwAAAAMJgAAAAYTAAAAgwkAAAAGEwAAAIMJAACAwQQAAMBgAgAAgMEEAADAYAIAAGAwAQAAMJgAAABgMAEAADCYAAAAGEwAAAAwmAAAABhMAAAADCYAAAAGEwAAAAwmAAAABhMAAACDCQAAgMEEAAAAgwkAAIDBBAAAwGACAABgMAEAAMBgAgAAYDABAAAwmAAAAGAwAQAAMJgAAAAYTAAAAAwmAAAA3BbcDge8dfNuEgAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/Pulttakstol standard.79e85040.png\";","export default __webpack_public_path__ + \"static/media/Pulttakstol undergurt ut.128433ea.png\";","export default __webpack_public_path__ + \"static/media/Saksetakstol.b0bc8384.png\";","export default __webpack_public_path__ + \"static/media/W-takstol standard.46d384da.png\";","export default __webpack_public_path__ + \"static/media/W-takstol undergurt ut.7b44bf4b.png\";","import React, { FunctionComponent } from \"react\";\n\ninterface props {\n  show: boolean;\n}\nconst Tooltip: FunctionComponent<props> = ({ children, show }) => {\n  return (\n    <div\n      style={{\n        display: show ? \"\" : \"none\",\n        position: \"absolute\",\n        background: \"rgba(0, 0, 0, 0.7)\",\n        color: \"white\",\n        padding: \"5px\",\n        borderRadius: \"5px\",\n        bottom: \"250%\",\n        zIndex: \"100\",\n      }}\n    >\n      {children}\n      <span\n        style={{\n          position: \"absolute\",\n          top: \"100%\",\n          left: \"50%\",\n          borderWidth: \"5px\",\n          borderStyle: \"solid\",\n          borderColor: \"rgba(0, 0, 0, 0.7) transparent transparent\",\n        }}\n      />\n    </div>\n  );\n};\n\nexport default Tooltip;\n","import React from \"react\";\nimport { Calculation } from \"../../../types/DraftOrder/Calculation\";\nimport { Header } from \"../../../elements/Header/Header\";\n\nexport const CalcConditions = ({ calc }: { calc: Calculation }) => {\n  return (\n    // eslint-disable-next-line react/jsx-no-useless-fragment\n    <>\n      {calc !== undefined &&\n      (calc.error === undefined || calc.error === null) ? (\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            marginTop: \"2em\",\n          }}\n        >\n          <div>\n            <Header type=\"secondary\">Forutsetninger</Header>\n            <ul>\n              {calc.preconditions !== null\n                ? calc.preconditions.map((x) => <li>{x}</li>)\n                : null}\n            </ul>\n          </div>\n          <Header type=\"secondary\">Forbehold</Header>\n          <ul>\n            {calc.conditions !== null\n              ? calc.conditions.map((x) => <li>{x}</li>)\n              : null}\n          </ul>\n        </div>\n      ) : null}\n    </>\n  );\n};\n","export const approvedRoofTypes = [\"1\", \"10\", \"11\", \"2\", \"12\", \"4\", \"13\", \"6\"];\nexport const configParams = [\n  {\n    roofType: \"1\",\n    minProtrusion: 0,\n    maxProtrusion: 800,\n    minAngle: 30,\n    maxAngle: 45,\n    minRangeDistance: 3000,\n    maxRangeDistance: 9000,\n  },\n  {\n    roofType: \"10\",\n    minProtrusion: 0,\n    maxProtrusion: 800,\n    minAngle: 30,\n    maxAngle: 45,\n    minRangeDistance: 3000,\n    maxRangeDistance: 9000,\n  },\n  {\n    roofType: \"11\",\n    minProtrusion: 0,\n    maxProtrusion: 800,\n    minAngle: 30,\n    maxAngle: 45,\n    minRangeDistance: 3000,\n    maxRangeDistance: 9000,\n  },\n  {\n    roofType: \"2\",\n    minProtrusion: 0,\n    maxProtrusion: 650,\n    minAngle: 15,\n    maxAngle: 40,\n    minRangeDistance: 2000,\n    maxRangeDistance: 9000,\n  },\n  {\n    roofType: \"12\",\n    minProtrusion: 0,\n    maxProtrusion: 650,\n    minAngle: 15,\n    maxAngle: 40,\n    minRangeDistance: 2000,\n    maxRangeDistance: 9000,\n  },\n  {\n    roofType: \"4\",\n    minProtrusion: 0,\n    maxProtrusion: 650,\n    minAngle: 15,\n    maxAngle: 40,\n    minRangeDistance: 2000,\n    maxRangeDistance: 8000,\n  },\n  {\n    roofType: \"13\",\n    minProtrusion: 0,\n    maxProtrusion: 650,\n    minAngle: 15,\n    maxAngle: 40,\n    minRangeDistance: 2000,\n    maxRangeDistance: 8000,\n  },\n  {\n    roofType: \"6\",\n    minProtrusion: 0,\n    maxProtrusion: 650,\n    minAngle: 0,\n    maxAngle: 360,\n    minRangeDistance: 2000,\n    maxRangeDistance: 8000,\n  },\n];\n\nexport const ww = [\n  {\n    label: \"36mm\",\n    value: 36,\n  },\n  {\n    label: \"48mm\",\n    value: 48,\n  },\n];\n","import React from \"react\";\nimport { Calculation } from \"../../../types/DraftOrder/Calculation\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { formatMoney } from \"../../../helpers/money\";\n\nexport const CalculationPriceAndError = ({ calc }: { calc: Calculation }) => {\n  return (\n    // eslint-disable-next-line react/jsx-no-useless-fragment\n    <>\n      {calc && calc.error !== null && calc.error !== undefined ? (\n        <div>\n          <Header type=\"secondary\">Feil</Header>\n          <div>{calc.error} </div>\n        </div>\n      ) : calc === undefined ? (\n        <div>\n          <Header type=\"secondary\">Informasjon</Header>\n          <CMSContent contentId={1464} />\n        </div>\n      ) : (\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"row\",\n            width: \"100%\",\n          }}\n        >\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"column\",\n              marginBottom: \"2em\",\n            }}\n          >\n            <Header type=\"secondary\">Pris</Header>\n            <div\n              style={{\n                display: \"flex\",\n                flexDirection: \"column\",\n                justifyContent: \"space-evenly\",\n                height: \"100%\",\n              }}\n            >\n              <div>\n                <span\n                  style={{\n                    display: \"flex\",\n                    flexDirection: \"row\",\n                  }}\n                >\n                  <CMSContent contentId={1467} />\n                  <span style={{ fontWeight: \"bolder\", marginLeft: \"0.5rem\" }}>\n                    {formatMoney(calc.price)} eks mva.\n                  </span>\n                </span>\n                {calc.freight > 0 ? (\n                  <span>\n                    Herav frakt\n                    <span\n                      style={{\n                        fontWeight: \"bolder\",\n                        marginLeft: \"1.5rem\",\n                      }}\n                    >\n                      {formatMoney(calc.freight)} eks mva.{\" \"}\n                    </span>\n                  </span>\n                ) : null}\n                {calc.priceConditions !== null ? (\n                  <div style={{ fontSize: \"0.75rem\" }}>\n                    {calc.priceConditions.map((x) => (\n                      <p>{x}</p>\n                    ))}\n                  </div>\n                ) : null}\n              </div>\n            </div>\n          </div>\n        </div>\n      )}\n    </>\n  );\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport React, { FunctionComponent, useEffect, useRef, useState } from \"react\";\n\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport axios, { CancelTokenSource } from \"axios\";\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\n\nimport { yesNoOptions } from \"../../../data/selectOptions\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { CalculatePriceModal } from \"../../../modals/CalculatePriceModal/CalculatePriceModal\";\nimport {\n  Address,\n  Calculation,\n  CalculationPayload,\n} from \"../../../types/DraftOrder/Calculation\";\nimport roof11 from \"../../../assets/img/A-takstol med rafthøgde.png\";\nimport roof1 from \"../../../assets/img/A-takstol standard.png\";\nimport roof10 from \"../../../assets/img/A-takstol undergurt ut.png\";\nimport def from \"../../../assets/img/Blank.png\";\nimport roof4 from \"../../../assets/img/Pulttakstol standard.png\";\nimport roof13 from \"../../../assets/img/Pulttakstol undergurt ut.png\";\nimport roof6 from \"../../../assets/img/Saksetakstol.png\";\nimport roof2 from \"../../../assets/img/W-takstol standard.png\";\nimport roof12 from \"../../../assets/img/W-takstol undergurt ut.png\";\nimport Tooltip from \"./Tooltip\";\nimport { CalcConditions } from \"./CalcConditions\";\nimport {\n  approvedRoofTypes,\n  configParams,\n  ww,\n} from \"../../../helpers/PriceCalculatorConfig\";\nimport { CalculationPriceAndError } from \"./CalculationPriceAndError\";\n\nexport type FormProps = {\n  subProjects: DraftOrderSubProject[];\n  setSubProjects: (projects: DraftOrderSubProject[]) => void;\n  setActiveForm: (form: string) => void;\n  selectedSubProject: DraftOrderSubProject | undefined;\n  setSelectedSubProject: (project: DraftOrderSubProject | undefined) => void;\n  autoFill: boolean;\n  quickChoice?: string;\n  onMainCancel: () => void;\n};\n\nexport const ExtendedRoofForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  autoFill,\n  quickChoice,\n  onMainCancel,\n}) => {\n  const { t } = useTranslation();\n  const [calc, setCalc] = useState<Calculation | undefined>(undefined);\n  const { offerOptions, orders, modals, customer } = useAppState();\n  const actions = useActions();\n  const effects = useEffects();\n  const [img, setImg] = useState(def);\n  const [priceDisabled, setPriceDisabled] = useState<boolean>(true);\n  const [showPriceButton, setShowPriceButton] = useState<boolean>(false);\n  const [configParam, setConfigParam] = useState(undefined);\n  const [showToolTip, setShowToolTip] = useState<boolean>(false);\n  const cancelToken: React.MutableRefObject<CancelTokenSource | null> =\n    useRef(null);\n\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (calc !== undefined) {\n      // eslint-disable-next-line no-param-reassign\n      data.conditions = calc.conditions;\n      // eslint-disable-next-line no-param-reassign\n      data.preconditions = calc.preconditions;\n      // eslint-disable-next-line no-param-reassign\n      data.priceConditions = calc.priceConditions;\n    }\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            rangeDistance:\n              data.rangeDistance ?? selectedSubProject.rangeDistance,\n            roofType: data.roofType ?? selectedSubProject.roofType,\n            roofingType: data.roofingType ?? selectedSubProject.roofingType,\n            angle: data.angle ?? selectedSubProject.angle,\n            protrusion: data.protrusion ?? selectedSubProject.protrusion,\n            workingWidth: data.workingWidth ?? selectedSubProject.workingWidth,\n            additionalCrane:\n              data.additionalCrane ?? selectedSubProject.additionalCrane,\n            roomHeight: data.roomHeight ?? selectedSubProject.roomHeight,\n            roomWidth: data.roomWidth ?? selectedSubProject.roomWidth,\n            numberOfTrusses:\n              data.numberOfTrusses ?? selectedSubProject.numberOfTrusses,\n            price: data.price ?? selectedSubProject.price,\n            calculationId:\n              data.calculationId ?? selectedSubProject.calculationId,\n            priceConditions:\n              data.priceConditions ?? selectedSubProject.priceConditions,\n            conditions: data.conditions ?? selectedSubProject.conditions,\n            preconditions:\n              data.preconditions ?? selectedSubProject.preconditions,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n    if (quickChoice !== undefined) {\n      onMainCancel();\n    }\n  };\n\n  const cancelCalculation = () => {\n    if (cancelToken.current != null) {\n      cancelToken.current.cancel();\n    }\n    actions.modals.calculatePriceModal.close();\n  };\n\n  const roof = yup.object().shape({\n    roofType: validators.requiredField,\n    roofingType: validators.requiredField,\n    angle: validators.decimalField,\n    rangeDistance: validators.positiveNumeric,\n    protrusion: validators.positiveNumeric.min(0, \"Må være over 0\"),\n    additionalCrane: !orders.currentNewOrder.quotation\n      ? validators.requiredField\n      : null,\n    workingWidth: validators.positiveNumeric,\n    numberOfTrusses: validators.positiveNumeric,\n    roomWidth: validators.positiveNumeric,\n    roomHeight: validators.positiveNumeric,\n  });\n  const { register, handleSubmit, errors, setValue, watch, getValues } =\n    useForm<DraftOrderSubProject>({\n      // @ts-ignore\n      resolver: yupResolver(roof),\n      defaultValues: selectedSubProject,\n    });\n\n  const roofType = watch(\"roofType\");\n\n  const watcher = watch([\n    \"numberOfTrusses\",\n    \"protrusion\",\n    \"rangeDistance\",\n    \"angle\",\n    \"roofingType\",\n  ]);\n\n  useEffect(() => {\n    if (selectedSubProject) {\n      if (selectedSubProject.price) {\n        setCalc({\n          price: selectedSubProject.price,\n          uid: selectedSubProject.calculationId,\n          conditions: selectedSubProject.conditions ?? [],\n          preconditions: selectedSubProject.preconditions ?? [],\n          specifications: [],\n          freight: selectedSubProject.freight,\n          priceConditions: selectedSubProject.priceConditions ?? [],\n        });\n      }\n    }\n  }, [selectedSubProject]);\n  useEffect(() => {\n    switch (roofType) {\n      case \"1\":\n        setImg(roof1);\n        break;\n      case \"2\":\n        setImg(roof2);\n        break;\n      case \"4\":\n        setImg(roof4);\n        break;\n      case \"6\":\n        setImg(roof6);\n        break;\n      case \"10\":\n        setImg(roof10);\n        break;\n      case \"11\":\n        setImg(roof11);\n        break;\n      case \"12\":\n        setImg(roof12);\n        break;\n      case \"13\":\n        setImg(roof13);\n        break;\n      default:\n        setImg(def);\n    }\n  }, [roofType]);\n  const roofTypes = offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOF)\n    .map((o) => ({\n      label:\n        o.description +\n        (approvedRoofTypes.includes(o.id.toString()) ? \" (K)\" : \"\"),\n      value: o.id,\n    }))\n    .sort((a, b) => a.label.localeCompare(b.label));\n  const roofingTypes = offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOFING)\n    .map((o) => ({ label: o.description, value: o.id }));\n\n  const calclulatePrice = () => {\n    actions.modals.calculatePriceModal.open();\n    cancelToken.current = axios.CancelToken.source();\n    const formValues = getValues([\n      \"projectId\",\n      \"numberOfTrusses\",\n      \"angle\",\n      \"workingWidth\",\n      \"roofType\",\n      \"rangeDistance\",\n      \"roofingType\",\n      \"protrusion\",\n      \"roomHeight\",\n      \"roomWidth\",\n    ]);\n    const uid =\n      formValues.projectId !== null && formValues.projectId.length > 0\n        ? formValues.projectId\n        : makeId(4);\n    const { currentNewOrder } = orders;\n    const address: Address = {\n      street: currentNewOrder.deliveryAddress,\n      height: Number(currentNewOrder.mamsl),\n      city: currentNewOrder.city,\n      zipCode: currentNewOrder.zipCode,\n      gardsnr:\n        currentNewOrder.farmNumber !== null\n          ? currentNewOrder.farmNumber.toString()\n          : null,\n      bruksnr:\n        currentNewOrder.subFarmNumber !== null\n          ? currentNewOrder.subFarmNumber.toString()\n          : null,\n    };\n    const body: CalculationPayload = {\n      uid,\n      projectType: \"Takstol\",\n      buildingType:\n        currentNewOrder.buildingType.length > 0\n          ? currentNewOrder.buildingType\n          : null,\n      CustomerId: customer.id,\n      deliveryterms: currentNewOrder.deliveryTerms,\n      trussInfo: {\n        trussType: formValues.roofType,\n        Quantity: Number(formValues.numberOfTrusses),\n        SpanWidth: Number(formValues.rangeDistance),\n        RoofAngle: Number(formValues.angle),\n        TimberWidth: Number(formValues.workingWidth),\n        RoofSheeting: formValues.roofingType,\n        roofOverhang: Number(formValues.protrusion),\n        // roomHeight: Number(formValues.roomHeight),\n        // roomWidth: Number(formValues.roomWidth),\n      },\n      address,\n    };\n    effects.api.order\n      .calculateRoof(body, cancelToken.current)\n      .then((data) => {\n        setCalc(data);\n        setValue(\"price\", data.price);\n        setValue(\"calculationId\", data.uid);\n        setValue(\"freight\", data.freight);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      })\n      .catch(() => {\n        effects.toast(\"Noe gikk galt, vennligst prøv igjen senere\", 5000);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      });\n  };\n  const validatePriceButton = (roofParams: {\n    numberOfTrusses?: number;\n    rangeDistance?: number;\n    protrusion?: number;\n    angle?: number;\n    roofingType?: string;\n  }): boolean => {\n    if (configParam === undefined) {\n      return true;\n    }\n    if (\n      roofParams.roofingType === undefined ||\n      roofParams.roofingType === null ||\n      roofParams.roofingType.length === 0\n    ) {\n      return true;\n    }\n    const trusses = Number(roofParams.numberOfTrusses);\n    if (trusses >= 1 && trusses <= 99) {\n      const range = Number(roofParams.rangeDistance);\n      if (\n        range >= configParam.minRangeDistance &&\n        range <= configParam.maxRangeDistance\n      ) {\n        const protrusion = parseInt(roofParams.protrusion.toString(), 10);\n\n        if (\n          protrusion >= configParam.minProtrusion &&\n          protrusion <= configParam.maxProtrusion\n        ) {\n          const angle = Number(roofParams.angle);\n          if (angle >= configParam.minAngle && angle <= configParam.maxAngle) {\n            return false;\n          }\n        }\n      }\n    }\n    return true;\n  };\n\n  useEffect(() => {\n    const approvedRoof = approvedRoofTypes.includes(roofType);\n    if (approvedRoof) {\n      const param = configParams.find((x) => x.roofType === roofType);\n      setConfigParam(param);\n    }\n    setShowPriceButton(approvedRoof);\n    const disabled = validatePriceButton(watcher) && approvedRoof;\n    setPriceDisabled(disabled);\n  }, [roofType, watcher]);\n\n  const toolTipContent = () => {\n    if (configParam === undefined) return null;\n\n    return (\n      <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n        <span>\n          Nødvendige felter for{\" \"}\n          {roofTypes.find((x) => x.value.toString() === roofType).label}{\" \"}\n        </span>\n        <span>Antall takstoler: 1-99</span>\n        <span>\n          Takvinkel: {configParam.minAngle} - {configParam.maxAngle}\n        </span>\n        <span>\n          Spennvidde: {configParam.minRangeDistance} -{\" \"}\n          {configParam.maxRangeDistance}\n        </span>\n        <span>\n          Utstikk: {configParam.minProtrusion} - {configParam.maxProtrusion}{\" \"}\n        </span>\n      </div>\n    );\n  };\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n          fontSize: \"1rem\",\n          flexWrap: \"wrap\",\n        }}\n      >\n        <div>\n          <input\n            ref={register}\n            type=\"hidden\"\n            value=\"extendedRoof\"\n            name=\"type\"\n          />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n          <input ref={register} type=\"hidden\" name=\"price\" />\n          <input ref={register} type=\"hidden\" name=\"calculationId\" />\n          <input ref={register} type=\"hidden\" name=\"freight\" />\n          <Select\n            name=\"roofType\"\n            label={t(\"Pick roof type\")}\n            options={roofTypes}\n            required\n            inputRef={register}\n            readonly={calc !== undefined}\n            error={errors.roofType?.message}\n            disabled={\n              autoFill &&\n              selectedSubProject.roofType !== null &&\n              selectedSubProject.roofType.length > 0\n            }\n          />\n          <div style={{ fontSize: \"0.75rem\" }}>\n            <CMSContent contentId={1470} />\n          </div>\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            <Select\n              name=\"roofingType\"\n              label={t(\"Roofing\")}\n              options={roofingTypes}\n              inputRef={register}\n              readonly={calc !== undefined}\n              error={errors.roofingType?.message}\n              disabled={\n                autoFill &&\n                selectedSubProject.roofingType !== null &&\n                selectedSubProject.roofType.length > 0\n              }\n              required\n            />\n            <FormInput\n              readonly={calc !== undefined}\n              label={t(\"Antall takstoler\")}\n              type=\"number\"\n              name=\"numberOfTrusses\"\n              suffix=\"stk\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.angle?.message}\n            />\n          </div>\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            <FormInput\n              label={t(\"Roof angle\")}\n              type=\"number\"\n              name=\"angle\"\n              suffix=\"grader\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.angle?.message}\n            />\n            <FormInput\n              readonly={calc !== undefined}\n              label={t(\"Range distance\")}\n              type=\"number\"\n              suffix=\"mm\"\n              name=\"rangeDistance\"\n              inputRef={register}\n              disabled={autoFill}\n              error={errors.rangeDistance?.message}\n            />\n          </div>\n\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            <FormInput\n              label={t(\"Protrusion\")}\n              type=\"number\"\n              name=\"protrusion\"\n              suffix=\"mm\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.protrusion?.message}\n            />\n\n            <Select\n              label={t(\"Virkesbredde\")}\n              options={ww}\n              name=\"workingWidth\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.workingWidth?.message}\n              noDefault\n            />\n          </div>\n          <div\n            style={{\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              gap: \"1rem\",\n            }}\n          >\n            {/*\n              <FormInput\n              label={t(\"Romhøyde\")}\n              type=\"number\"\n              name=\"roomHeight\"\n              suffix=\"mm\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.protrusion?.message}\n            />\n\n            <FormInput\n              label={t(\"Rombredde\")}\n              type=\"number\"\n              name=\"roomWidth\"\n              suffix=\"mm\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.workingWidth?.message}\n            />\n               */}\n          </div>\n          {!orders.currentNewOrder.quotation && (\n            <Select\n              name=\"additionalCrane\"\n              label={t(\"Ekstra kraning \")}\n              options={yesNoOptions}\n              inputRef={register}\n              error={errors.additionalCrane?.message}\n              disabled={\n                autoFill &&\n                selectedSubProject.additionalCrane !== null &&\n                selectedSubProject.additionalCrane.length > 0\n              }\n              required={!orders.currentNewOrder.quotation}\n            />\n          )}\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n          />\n          {calc === undefined && showPriceButton ? (\n            <div\n              style={{\n                display: \"inline\",\n                position: \"relative\",\n              }}\n              onMouseEnter={() => setShowToolTip(true)}\n              onMouseLeave={() => setShowToolTip(false)}\n            >\n              <Tooltip show={showToolTip}>{toolTipContent()}</Tooltip>\n              <BlockButton\n                style={{\n                  marginRight: \"2em\",\n                  backgroundColor: priceDisabled ? \"gray\" : \"green\",\n                  width: \"12em\",\n                }}\n                onClick={() => calclulatePrice()}\n                type=\"button\"\n                disabled={priceDisabled}\n              >\n                Beregn pris\n              </BlockButton>\n            </div>\n          ) : calc ? (\n            <BlockButton\n              style={{\n                marginRight: \"2em\",\n                backgroundColor: \"green\",\n                width: \"12em\",\n              }}\n              onClick={() => setCalc(undefined)}\n              type=\"button\"\n            >\n              Rediger\n            </BlockButton>\n          ) : null}\n        </div>\n\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            justifyContent: \"space-between\",\n          }}\n        >\n          <div style={{ width: \"576px\" }}>\n            <img\n              style={{ width: \"576px\", height: \"288px\" }}\n              alt=\"takstol\"\n              src={img}\n            />\n            <CalculationPriceAndError calc={calc} />\n          </div>\n          <div\n            style={{\n              display: \"flex\",\n              alignContent: \"center\",\n              alignItems: \"flex-end\",\n              flexDirection: \"row\",\n              justifyContent: \"flex-start\",\n              marginTop: \"auto\",\n            }}\n          >\n            <BlockButton\n              style={{ marginRight: \"2em\", width: \"12em\", fontSize: \"1rem\" }}\n              type=\"submit\"\n            >\n              {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n            </BlockButton>\n            <BlockButton\n              style={{ width: \"12em\", fontSize: \"1rem\" }}\n              onClick={() => onCancel()}\n              type=\"button\"\n            >\n              Avbryt\n            </BlockButton>\n          </div>\n          <CalcConditions calc={calc} />\n        </div>\n      </div>\n      {modals.calculatePriceModal.isCurrent ? (\n        <CalculatePriceModal cancelCalculation={cancelCalculation} />\n      ) : null}\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { PrecutOpening } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { Select } from \"../../../components/Select/Select\";\nimport { Checkbox } from \"../../../components/Checkbox/Checkbox\";\n\ninterface Props {\n  opening: PrecutOpening;\n  changeOpening: (id: string, field: string, value: any) => void;\n  deleteOpening: (id: string) => void;\n  idx: number;\n}\nconst numOfOpenings = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nconst height = [\n  400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700,\n  1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000,\n  3100, 3200, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100, 4200, 4300,\n  4400, 4500, 4600, 4700, 4800, 4900, 5000, 5100, 5200,\n];\nconst width = [\n  400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700,\n  1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000,\n  3100, 3200, 3300, 3400, 3500, 4000, 4500, 5000, 5500,\n];\nconst PrecutOpeningRow: FunctionComponent<Props> = ({\n  opening,\n  deleteOpening,\n  changeOpening,\n  idx,\n}) => {\n  const openings = numOfOpenings.map((o) => ({\n    label: o.toString(),\n    value: o,\n  }));\n  const h = height.map((x) => ({ label: x.toString(), value: x }));\n  const w = width.map((x) => ({ label: x.toString(), value: x }));\n  return (\n    <div\n      style={{\n        display: \"flex\",\n        flexDirection: \"row\",\n        columnGap: \"2rem\",\n        alignItems: \"center\",\n        alignContent: \"center\",\n      }}\n    >\n      <span style={{ fontWeight: \"bold\", width: \"5rem\" }}>\n        Åpning #{idx + 1}{\" \"}\n      </span>\n      <Select\n        selectedValue={opening.quantity}\n        selectWidth=\"8rem\"\n        options={openings}\n        onSelectionChanged={(x) => changeOpening(opening.id, \"quantity\", x)}\n      />\n      <Select\n        selectedValue={opening.width}\n        selectWidth=\"8rem\"\n        options={w}\n        onSelectionChanged={(x) => changeOpening(opening.id, \"width\", x)}\n      />\n      <Select\n        selectedValue={opening.height}\n        selectWidth=\"8rem\"\n        options={h}\n        onSelectionChanged={(x) => changeOpening(opening.id, \"height\", x)}\n      />\n      <span style={{ alignSelf: \"end\" }}>\n        <Checkbox\n          checked={opening.bearing}\n          onChange={(x) =>\n            changeOpening(opening.id, \"bearing\", x.target.checked)\n          }\n        />\n      </span>\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n      <span\n        style={{ cursor: \"pointer\" }}\n        onClick={() => deleteOpening(opening.id)}\n      >\n        {\" \"}\n        Fjern{\" \"}\n      </span>\n    </div>\n  );\n};\n\nexport default PrecutOpeningRow;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { FunctionComponent, useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport * as yup from \"yup\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport axios, { CancelTokenSource } from \"axios\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\n\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { FormProps } from \"./RoofForm\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport {\n  DraftOrderSubProject,\n  PrecutOpening,\n} from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\nimport { CalculatePriceModal } from \"../../../modals/CalculatePriceModal/CalculatePriceModal\";\nimport {\n  Address,\n  Calculation,\n  CalculationPayload,\n} from \"../../../types/DraftOrder/Calculation\";\nimport { CalculationPriceAndError } from \"./CalculationPriceAndError\";\nimport { CalcConditions } from \"./CalcConditions\";\nimport Tooltip from \"./Tooltip\";\n\nimport { Header } from \"../../../elements/Header/Header\";\nimport PrecutOpeningRow from \"./PrecutOpening\";\n\nconst precut = yup.object().shape({\n  // dimensions: validators.string.required(),\n  comment: validators.string,\n});\n\nexport const ExtendedPrecutForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  selectedSubProject,\n  setSelectedSubProject,\n  autoFill,\n}) => {\n  const { t } = useTranslation();\n  const { offerOptions, modals, customer, orders } = useAppState();\n  const actions = useActions();\n  const effects = useEffects();\n  const cancelToken: React.MutableRefObject<CancelTokenSource | null> =\n    useRef(null);\n  const [calc, setCalc] = useState<Calculation | undefined>(undefined);\n  const [priceDisabled, setPriceDisabled] = useState<boolean>(true);\n  const [showPriceButton, setShowPriceButton] = useState<boolean>(false);\n  const [showToolTip, setShowToolTip] = useState<boolean>(false);\n  const [openings, setOpenings] = useState<PrecutOpening[]>([\n    {\n      id: makeId(4),\n      bearing: false,\n      height: 400,\n      width: 400,\n      quantity: 0,\n    },\n  ]);\n  const cancelCalculation = () => {\n    if (cancelToken.current != null) {\n      cancelToken.current.cancel();\n    }\n    // TODO remove\n    setPriceDisabled(false);\n    setShowPriceButton(false);\n    actions.modals.calculatePriceModal.close();\n  };\n\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (calc !== undefined) {\n      // eslint-disable-next-line no-param-reassign\n      data.conditions = calc.conditions;\n      // eslint-disable-next-line no-param-reassign\n      data.preconditions = calc.preconditions;\n      // eslint-disable-next-line no-param-reassign\n      data.priceConditions = calc.priceConditions;\n    }\n    // eslint-disable-next-line no-param-reassign\n    data.precutOpenings = openings;\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            dimensionOuter:\n              data.dimensionOuter ?? selectedSubProject.dimensionOuter,\n            lengthOuter: data.lengthOuter ?? selectedSubProject.lengthOuter,\n            numberOfCornersOuter:\n              data.numberOfCornersOuter ??\n              selectedSubProject.numberOfCornersOuter,\n            dimensionInner:\n              data.dimensionInner ?? selectedSubProject.dimensionInner,\n            lengthInner: data.lengthInner ?? selectedSubProject.lengthInner,\n            numberOfCornersInner:\n              data.numberOfCornersInner ??\n              selectedSubProject.numberOfCornersInner,\n            wallHeight: data.wallHeight ?? selectedSubProject.wallHeight,\n            precutOpenings: data.precutOpenings,\n            price: data.price ?? selectedSubProject.price,\n            calculationId:\n              data.calculationId ?? selectedSubProject.calculationId,\n            priceConditions:\n              data.priceConditions ?? selectedSubProject.priceConditions,\n            conditions: data.conditions ?? selectedSubProject.conditions,\n            preconditions:\n              data.preconditions ?? selectedSubProject.preconditions,\n            roofRef: data.roofRef ?? selectedSubProject.roofRef,\n            dimensionGavl:\n              data.dimensionGavl ?? selectedSubProject.dimensionGavl,\n            numberOfGavl: data.numberOfGavl ?? selectedSubProject.numberOfGavl,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const dimensions = offerOptions\n    .filter(\n      (o) =>\n        o.type === OfferOptionType.PRECUT_DIMENSION &&\n        !o.description.includes(\"Annet\")\n    )\n    .map((o) => ({ label: o.description, value: o.id }));\n  const { register, handleSubmit, errors, setValue, getValues } =\n    useForm<DraftOrderSubProject>({\n      resolver: yupResolver(precut),\n      defaultValues: selectedSubProject,\n    });\n  useEffect(() => {\n    if (selectedSubProject) {\n      if (selectedSubProject.price) {\n        setCalc({\n          price: selectedSubProject.price,\n          uid: selectedSubProject.calculationId,\n          conditions: selectedSubProject.conditions ?? [],\n          preconditions: selectedSubProject.preconditions ?? [],\n          specifications: [],\n          freight: selectedSubProject.freight,\n          priceConditions: selectedSubProject.priceConditions ?? [],\n        });\n      }\n      if (selectedSubProject.precutOpenings !== undefined) {\n        setOpenings(selectedSubProject.precutOpenings);\n      }\n    }\n  }, [selectedSubProject]);\n  const calclulatePrice = () => {\n    actions.modals.calculatePriceModal.open();\n    cancelToken.current = axios.CancelToken.source();\n    const formValues = getValues([\n      \"projectId\",\n      \"numberOfTrusses\",\n      \"angle\",\n      \"workingWidth\",\n      \"roofType\",\n      \"rangeDistance\",\n      \"roofingType\",\n      \"protrusion\",\n      \"roomHeight\",\n      \"roomWidth\",\n    ]);\n    const uid =\n      formValues.projectId !== null && formValues.projectId.length > 0\n        ? formValues.projectId\n        : makeId(4);\n    const { currentNewOrder } = orders;\n    const address: Address = {\n      street: currentNewOrder.deliveryAddress,\n      height: Number(currentNewOrder.mamsl),\n      city: currentNewOrder.city,\n      zipCode: currentNewOrder.zipCode,\n      gardsnr:\n        currentNewOrder.farmNumber !== null\n          ? currentNewOrder.farmNumber.toString()\n          : null,\n      bruksnr:\n        currentNewOrder.subFarmNumber !== null\n          ? currentNewOrder.subFarmNumber.toString()\n          : null,\n    };\n    const body: CalculationPayload = {\n      uid,\n      projectType: \"Takstol\",\n      buildingType:\n        currentNewOrder.buildingType.length > 0\n          ? currentNewOrder.buildingType\n          : null,\n      CustomerId: customer.id,\n      deliveryterms: currentNewOrder.deliveryTerms,\n\n      address,\n    };\n    effects.api.order\n      .calculateRoof(body, cancelToken.current)\n      .then((data) => {\n        setCalc(data);\n        setValue(\"price\", data.price);\n        setValue(\"calculationId\", data.uid);\n        setValue(\"freight\", data.freight);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      })\n      .catch(() => {\n        effects.toast(\"Noe gikk galt, vennligst prøv igjen senere\", 5000);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      });\n  };\n  const toolTipContent = () => {\n    return <div />;\n  };\n  const changeOpening = (id: string, field: string, value: any) => {\n    const op = openings.map((x) => {\n      if (x.id === id) {\n        return { ...x, [field]: value };\n      }\n      return x;\n    });\n    setOpenings(op);\n  };\n  const deleteOpening = (id: string) => {\n    const op = openings.filter((x) => x.id !== id);\n    setOpenings(op);\n  };\n  const roofs = subProjects\n    .filter((x) => x.type === \"extendedRoof\")\n    .map((o) => ({\n      label: o.comment.length > 0 ? o.comment : \"Tak\",\n      value: o.projectId,\n    }));\n  const addOpening = () => {\n    const opening: PrecutOpening = {\n      id: makeId(4),\n      bearing: false,\n      height: 400,\n      width: 400,\n      quantity: 0,\n    };\n    setOpenings([...openings, opening]);\n  };\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input\n            ref={register}\n            type=\"hidden\"\n            value=\"extendedPrecut\"\n            name=\"type\"\n          />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n          <input ref={register} type=\"hidden\" name=\"price\" />\n          <input ref={register} type=\"hidden\" name=\"calculationId\" />\n          <input ref={register} type=\"hidden\" name=\"freight\" />\n          {subProjects.some(\n            (x) => x.calculationId !== undefined && x.type === \"extendedRoof\"\n          ) ? (\n            <div>\n              <Header type=\"secondary\">Gavl</Header>\n              <Select\n                name=\"roofRef\"\n                label=\"Velg tak\"\n                options={roofs}\n                inputRef={register}\n                noDefault\n                error={errors.dimensions?.message}\n                disabled={\n                  autoFill &&\n                  selectedSubProject.dimensions !== null &&\n                  selectedSubProject.dimensions.length > 0\n                }\n              />\n              <Select\n                name=\"dimensionGavl\"\n                label=\"Dimensjon precut\"\n                options={dimensions}\n                inputRef={register}\n                error={errors.dimensions?.message}\n                disabled={\n                  autoFill &&\n                  selectedSubProject.dimensions !== null &&\n                  selectedSubProject.dimensions.length > 0\n                }\n              />\n              <FormInput\n                label=\"Antall gavler\"\n                type=\"number\"\n                name=\"numberOfGavl\"\n                inputRef={register}\n                readonly={calc !== undefined}\n                disabled={autoFill}\n                error={errors.angle?.message}\n              />\n            </div>\n          ) : null}\n          <Header type=\"secondary\">Precut</Header>\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"row\",\n              width: \"100%\",\n              justifyContent: \"space-between\",\n            }}\n          >\n            <div style={{ width: \"45%\" }}>\n              <Select\n                name=\"dimensionOuter\"\n                label=\"Dimensjon yttervegg\"\n                options={dimensions}\n                inputRef={register}\n                error={errors.dimensions?.message}\n                required\n                disabled={\n                  autoFill &&\n                  selectedSubProject.dimensions !== null &&\n                  selectedSubProject.dimensions.length > 0\n                }\n              />\n              <FormInput\n                label=\"Total vegglengde yttervegg\"\n                type=\"number\"\n                name=\"lengthOuter\"\n                suffix=\"m\"\n                inputRef={register}\n                readonly={calc !== undefined}\n                disabled={autoFill}\n                error={errors.angle?.message}\n              />\n              <FormInput\n                label=\"Antall ender / hjørner (yttervegg)\"\n                type=\"number\"\n                name=\"numberOfCornersOuter\"\n                inputRef={register}\n                readonly={calc !== undefined}\n                disabled={autoFill}\n                error={errors.angle?.message}\n              />\n            </div>\n            <div style={{ width: \"45%\" }}>\n              <Select\n                name=\"dimensionInner\"\n                label=\"Dimensjon innervegg\"\n                options={dimensions}\n                inputRef={register}\n                error={errors.dimensions?.message}\n                required\n                disabled={\n                  autoFill &&\n                  selectedSubProject.dimensions !== null &&\n                  selectedSubProject.dimensions.length > 0\n                }\n              />\n              <FormInput\n                label=\"Total vegglengde innervegg\"\n                type=\"number\"\n                name=\"lengthInner\"\n                suffix=\"m\"\n                inputRef={register}\n                readonly={calc !== undefined}\n                disabled={autoFill}\n                error={errors.angle?.message}\n              />\n              <FormInput\n                label=\"Antall ender / hjørner (innervegg)\"\n                type=\"number\"\n                name=\"numberOfCornersInner\"\n                inputRef={register}\n                readonly={calc !== undefined}\n                disabled={autoFill}\n                error={errors.angle?.message}\n              />\n            </div>\n          </div>\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"row\",\n              columnGap: \"2rem\",\n              alignItems: \"center\",\n              alignContent: \"center\",\n            }}\n          >\n            <FormInput\n              label=\"Vegghøyde\"\n              type=\"number\"\n              name=\"wallHeight\"\n              suffix=\"mm\"\n              inputRef={register}\n              readonly={calc !== undefined}\n              disabled={autoFill}\n              error={errors.angle?.message}\n            />\n\n            <BlockButton\n              style={{\n                width: \"12em\",\n                fontSize: \"1rem\",\n                alignSelf: \"center\",\n                marginTop: \"2rem\",\n              }}\n              disabled={openings.length >= 6}\n              type=\"button\"\n              onClick={() => addOpening()}\n            >\n              Legg til ny åpning\n            </BlockButton>\n          </div>\n          {openings.length > 0 ? (\n            <div\n              style={{\n                display: \"flex\",\n                flexDirection: \"row\",\n                columnGap: \"2rem\",\n                alignItems: \"center\",\n                alignContent: \"center\",\n              }}\n            >\n              <span style={{ width: \"5rem\" }} />\n              <span style={{ width: \"8rem\" }}>Antall åpninger</span>\n              <span style={{ width: \"8rem\" }}>Bredde(mm)</span>\n              <span style={{ width: \"8rem\" }}>Høyde(mm)</span>\n              <span>Bærende</span>\n              <span />\n            </div>\n          ) : null}\n          {openings.map((x, idx) => {\n            return (\n              <PrecutOpeningRow\n                key={x.id}\n                opening={x}\n                changeOpening={changeOpening}\n                deleteOpening={deleteOpening}\n                idx={idx}\n              />\n            );\n          })}\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n            defaultValue={errors.comment?.message}\n          />\n          {/* calc === undefined && showPriceButton ? (\n            <div\n              style={{\n                display: \"inline\",\n                position: \"relative\",\n              }}\n              onMouseEnter={() => setShowToolTip(true)}\n              onMouseLeave={() => setShowToolTip(false)}\n            >\n              <Tooltip show={showToolTip}>{toolTipContent()}</Tooltip>\n              {<BlockButton\n                  style={{\n                    marginRight: \"2em\",\n                    backgroundColor: priceDisabled ? \"gray\" : \"green\",\n                    width: \"12em\",\n                  }}\n                  onClick={() => calclulatePrice()}\n                  type=\"button\"\n                  disabled={priceDisabled}\n              >\n                Beregn pris\n              </BlockButton> }\n            </div>\n          ) : calc ? (\n            <BlockButton\n              style={{\n                marginRight: \"2em\",\n                backgroundColor: \"green\",\n                width: \"12em\",\n              }}\n              onClick={() => setCalc(undefined)}\n              type=\"button\"\n            >\n              Rediger\n            </BlockButton>\n          ) : null */}\n          <CMSContent contentId={1475} />\n          <CMSContent contentId={CMSArticles.PRECUT_INFO} />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            justifyContent: \"space-between\",\n          }}\n        >\n          <div style={{ width: \"576px\" }}>\n            <CalculationPriceAndError calc={calc} />\n          </div>\n          <div\n            style={{\n              display: \"flex\",\n              alignContent: \"center\",\n              alignItems: \"flex-end\",\n              flexDirection: \"row\",\n              justifyContent: \"flex-start\",\n              marginTop: \"auto\",\n            }}\n          >\n            <BlockButton\n              style={{ marginRight: \"2em\", width: \"12em\", fontSize: \"1rem\" }}\n              type=\"submit\"\n            >\n              {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n            </BlockButton>\n            <BlockButton\n              style={{ width: \"12em\", fontSize: \"1rem\" }}\n              onClick={() => onCancel()}\n              type=\"button\"\n            >\n              Avbryt\n            </BlockButton>\n          </div>\n          <CalcConditions calc={calc} />\n        </div>\n      </div>\n      {modals.calculatePriceModal.isCurrent ? (\n        <CalculatePriceModal cancelCalculation={cancelCalculation} />\n      ) : null}\n    </form>\n  );\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, {\n  FunctionComponent,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { useForm } from \"react-hook-form\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport axios, { CancelTokenSource } from \"axios\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport { Select } from \"../../../components/Select/Select\";\n\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { FormProps } from \"./RoofForm\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { makeId } from \"../../../helpers/GenerateId\";\nimport { CalculationPriceAndError } from \"./CalculationPriceAndError\";\nimport { CalcConditions } from \"./CalcConditions\";\nimport { CalculatePriceModal } from \"../../../modals/CalculatePriceModal/CalculatePriceModal\";\nimport {\n  Address,\n  Calculation,\n  CalculationPayload,\n} from \"../../../types/DraftOrder/Calculation\";\nimport Tooltip from \"./Tooltip\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\n\nexport const ExtendedBeamLayerForm: FunctionComponent<FormProps> = ({\n  setSubProjects,\n  setActiveForm,\n  subProjects,\n  setSelectedSubProject,\n  selectedSubProject,\n  autoFill,\n}) => {\n  const { t } = useTranslation();\n  const { offerOptions, modals, orders, customer } = useAppState();\n  const actions = useActions();\n  const effects = useEffects();\n  const cancelToken: React.MutableRefObject<CancelTokenSource | null> =\n    useRef(null);\n  const [calc, setCalc] = useState<Calculation | undefined>(undefined);\n  const [priceDisabled, setPriceDisabled] = useState<boolean>(true);\n  const [showPriceButton, setShowPriceButton] = useState<boolean>(false);\n  const [showToolTip, setShowToolTip] = useState<boolean>(false);\n  const joists = yup.object().shape({\n    joistsType: validators.string,\n    // submergeWetRoom: autoFill ? validators.string : validators.requiredField,\n    millimetersImmersed: validators.positiveNumeric,\n  });\n\n  const cancelCalculation = () => {\n    if (cancelToken.current != null) {\n      cancelToken.current.cancel();\n    }\n    // TODO remove\n    setPriceDisabled(false);\n    setShowPriceButton(false);\n    actions.modals.calculatePriceModal.close();\n  };\n  const onSubmit = (data: DraftOrderSubProject) => {\n    if (data.projectId === undefined || data.projectId.length < 1) {\n      // eslint-disable-next-line no-param-reassign\n      data.projectId = makeId(8);\n    }\n    if (calc !== undefined) {\n      // eslint-disable-next-line no-param-reassign\n      data.conditions = calc.conditions;\n      // eslint-disable-next-line no-param-reassign\n      data.preconditions = calc.preconditions;\n      // eslint-disable-next-line no-param-reassign\n      data.priceConditions = calc.priceConditions;\n    }\n    // eslint-disable-next-line no-param-reassign\n    data.submergeWetRoom = data.totalAmountImmersed > 0 ? \"Ja\" : \"Nei\";\n    if (selectedSubProject !== undefined) {\n      const newProjs = subProjects.map((x) => {\n        if (x.projectId === data.projectId) {\n          return {\n            ...x,\n            comment: data.comment,\n            joistsType: data.joistsType ?? selectedSubProject.joistsType,\n            submergeWetRoom:\n              data.submergeWetRoom ?? selectedSubProject.submergeWetRoom,\n            totalAmountJoists:\n              data.totalAmountJoists ?? selectedSubProject.totalAmountJoists,\n            totalAmountImmersed:\n              data.totalAmountImmersed ??\n              selectedSubProject.totalAmountImmersed,\n            steelBeamLength:\n              data.steelBeamLength ?? selectedSubProject.steelBeamLength,\n          };\n        }\n        return x;\n      });\n      setSubProjects(newProjs);\n    } else {\n      setSubProjects([...subProjects, data]);\n    }\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n  const onCancel = () => {\n    setActiveForm(\"\");\n    setSelectedSubProject(undefined);\n  };\n\n  const { register, handleSubmit, errors, getValues, setValue } =\n    useForm<DraftOrderSubProject>({\n      // @ts-ignore\n      resolver: yupResolver(joists),\n      defaultValues: selectedSubProject,\n    });\n  const joistsTypes = useMemo(\n    () =>\n      offerOptions\n        .filter((o) => o.type === OfferOptionType.JOIST_TYPE)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [offerOptions]\n  );\n\n  useEffect(() => {\n    if (selectedSubProject) {\n      if (selectedSubProject.price) {\n        setCalc({\n          price: selectedSubProject.price,\n          uid: selectedSubProject.calculationId,\n          conditions: selectedSubProject.conditions ?? [],\n          preconditions: selectedSubProject.preconditions ?? [],\n          specifications: [],\n          freight: selectedSubProject.freight,\n          priceConditions: selectedSubProject.priceConditions ?? [],\n        });\n      }\n    }\n  }, [selectedSubProject]);\n  const calclulatePrice = () => {\n    actions.modals.calculatePriceModal.open();\n    cancelToken.current = axios.CancelToken.source();\n    const formValues = getValues([\n      \"projectId\",\n      \"numberOfTrusses\",\n      \"angle\",\n      \"workingWidth\",\n      \"roofType\",\n      \"rangeDistance\",\n      \"roofingType\",\n      \"protrusion\",\n      \"roomHeight\",\n      \"roomWidth\",\n    ]);\n    const uid =\n      formValues.projectId !== null && formValues.projectId.length > 0\n        ? formValues.projectId\n        : makeId(4);\n    const { currentNewOrder } = orders;\n    const address: Address = {\n      street: currentNewOrder.deliveryAddress,\n      height: Number(currentNewOrder.mamsl),\n      city: currentNewOrder.city,\n      zipCode: currentNewOrder.zipCode,\n      gardsnr:\n        currentNewOrder.farmNumber !== null\n          ? currentNewOrder.farmNumber.toString()\n          : null,\n      bruksnr:\n        currentNewOrder.subFarmNumber !== null\n          ? currentNewOrder.subFarmNumber.toString()\n          : null,\n    };\n    const body: CalculationPayload = {\n      uid,\n      projectType: \"Takstol\",\n      buildingType:\n        currentNewOrder.buildingType.length > 0\n          ? currentNewOrder.buildingType\n          : null,\n      CustomerId: customer.id,\n      deliveryterms: currentNewOrder.deliveryTerms,\n\n      address,\n    };\n    effects.api.order\n      .calculateRoof(body, cancelToken.current)\n      .then((data) => {\n        setCalc(data);\n        setValue(\"price\", data.price);\n        setValue(\"calculationId\", data.uid);\n        setValue(\"freight\", data.freight);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      })\n      .catch(() => {\n        effects.toast(\"Noe gikk galt, vennligst prøv igjen senere\", 5000);\n        cancelToken.current = null;\n        actions.modals.calculatePriceModal.close();\n      });\n  };\n  const toolTipContent = () => {\n    return <div />;\n  };\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <div\n        style={{\n          display: \"flex\",\n          justifyContent: \"space-evenly\",\n          width: \"100%\",\n        }}\n      >\n        <div>\n          <input\n            ref={register}\n            type=\"hidden\"\n            value=\"extendedBeamlayer\"\n            name=\"type\"\n          />\n          <input ref={register} type=\"hidden\" name=\"projectId\" />\n\n          <Select\n            name=\"joistsType\"\n            label={t(\"Pick joist type\")}\n            options={joistsTypes}\n            inputRef={register}\n            disabled={\n              autoFill &&\n              selectedSubProject.joistsType !== null &&\n              selectedSubProject.joistsType.length > 0\n            }\n            error={errors.joistsType?.message}\n          />\n          <FormInput\n            label=\"Total mengde bjelkelag\"\n            type=\"number\"\n            name=\"totalAmountJoists\"\n            suffix=\"m2\"\n            inputRef={register}\n            readonly={calc !== undefined}\n            disabled={autoFill}\n            error={errors.angle?.message}\n          />\n          <FormInput\n            label=\"Andel nedsenket bjelkelag\"\n            type=\"number\"\n            name=\"totalAmountImmersed\"\n            suffix=\"m2\"\n            inputRef={register}\n            readonly={calc !== undefined}\n            disabled={autoFill}\n            error={errors.angle?.message}\n          />\n          <FormInput\n            label=\"Lengde innfelt stålbjelke\"\n            type=\"number\"\n            name=\"steelBeamLength\"\n            suffix=\"m\"\n            inputRef={register}\n            readonly={calc !== undefined}\n            disabled={autoFill}\n            error={errors.angle?.message}\n          />\n\n          <TextArea\n            label={t(\"Kommentar\")}\n            name=\"comment\"\n            rows={3}\n            inputRef={register}\n            placeholder={t(\"Write other required info here\")}\n          />\n          {/* calc === undefined && showPriceButton ? (\n            <div\n              style={{\n                display: \"inline\",\n                position: \"relative\",\n              }}\n              onMouseEnter={() => setShowToolTip(true)}\n              onMouseLeave={() => setShowToolTip(false)}\n            >\n              <Tooltip show={showToolTip}>{toolTipContent()}</Tooltip>\n              <BlockButton\n                style={{\n                  marginRight: \"2em\",\n                  backgroundColor: priceDisabled ? \"gray\" : \"green\",\n                  width: \"12em\",\n                }}\n                onClick={() => calclulatePrice()}\n                type=\"button\"\n                disabled={priceDisabled}\n              >\n                Beregn pris\n              </BlockButton>\n            </div>\n          ) : calc ? (\n            <BlockButton\n              style={{\n                marginRight: \"2em\",\n                backgroundColor: \"green\",\n                width: \"12em\",\n              }}\n              onClick={() => setCalc(undefined)}\n              type=\"button\"\n            >\n              Rediger\n            </BlockButton>\n          ) : null */}\n          <CMSContent contentId={1475} />\n        </div>\n        <div\n          style={{\n            display: \"flex\",\n            flexDirection: \"column\",\n            justifyContent: \"space-between\",\n          }}\n        >\n          <div style={{ width: \"576px\" }}>\n            <CalculationPriceAndError calc={calc} />\n          </div>\n          <div\n            style={{\n              display: \"flex\",\n              alignContent: \"center\",\n              alignItems: \"flex-end\",\n              flexDirection: \"row\",\n              justifyContent: \"flex-start\",\n              marginTop: \"auto\",\n            }}\n          >\n            <BlockButton\n              style={{ marginRight: \"2em\", width: \"12em\", fontSize: \"1rem\" }}\n              type=\"submit\"\n            >\n              {selectedSubProject !== undefined ? \"Oppdater\" : \"Legg til\"}\n            </BlockButton>\n            <BlockButton\n              style={{ width: \"12em\", fontSize: \"1rem\" }}\n              onClick={() => onCancel()}\n              type=\"button\"\n            >\n              Avbryt\n            </BlockButton>\n          </div>\n          <CalcConditions calc={calc} />\n        </div>\n      </div>\n      {modals.calculatePriceModal.isCurrent ? (\n        <CalculatePriceModal cancelCalculation={cancelCalculation} />\n      ) : null}\n    </form>\n  );\n};\n","import React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { RoofForm } from \"./RoofForm\";\nimport {\n  BlockButton,\n  ChooseProductPageButton,\n  LinkButton,\n} from \"../../../components/Buttons/Buttons.styles\";\nimport { createUrl } from \"../../../app/pages\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport {\n  ButtonWrapper,\n  ChooseProductPageMainContainer,\n  PageFlexConstraint,\n} from \"./CreateOrderPage.styles\";\n\nimport { SubProjects } from \"./SubProjects\";\nimport { JoistsForm } from \"./JointsForm\";\nimport { PrecutForm } from \"./PrecutForm\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\nimport { TechnicalServicesForm } from \"./TechnicalServicesForm\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { ExtendedRoofForm } from \"./ExtendedRoofForm\";\nimport { ExtendedPrecutForm } from \"./ExtendedPrecutForm\";\nimport { ExtendedBeamLayerForm } from \"./ExtendedBeamLayerForm\";\n\nexport const ChooseProductPage: FunctionComponent = () => {\n  const effects = useEffects();\n  const actions = useActions();\n  const { t } = useTranslation();\n  const { orders } = useAppState();\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const [subProjects, setSubProjects] = useState<DraftOrderSubProject[]>([]);\n  const [selectedSubProject, setSelectedSubProject] = useState<\n    DraftOrderSubProject | undefined\n  >(undefined);\n  const [activeForm, setActiveForm] = useState<string>(\"\");\n  useEffect(() => {\n    if (orders.quickChoice !== null) {\n      setActiveForm(orders.quickChoice);\n    }\n  }, [orders.quickChoice]);\n  useEffect(() => {\n    if (orders.currentNewOrder.subProjects) {\n      setSubProjects(orders.currentNewOrder.subProjects);\n      if (\n        orders.quickChoice !== undefined &&\n        orders.currentNewOrder.subProjects.length > 0 &&\n        orders.autofill !== null\n      ) {\n        setSelectedSubProject(orders.currentNewOrder.subProjects[0]);\n      }\n    } else if (orders.autofill?.subProjects !== undefined) {\n      setSubProjects(orders.autofill.subProjects);\n    }\n  }, [orders.currentNewOrder.subProjects, orders.autofill]);\n\n  const onSubmit = () => {\n    actions.orders.setSubProjectsOnDraftOrder(subProjects);\n    effects.router.navigateTo(\n      createUrl(Page.CREATE_ORDER, { slug: \"vedlegg\" })\n    );\n  };\n  useEffect(() => {\n    if (\n      subProjects.length === 1 &&\n      orders.quickChoice !== undefined &&\n      activeForm.length === 0\n    ) {\n      onSubmit();\n    }\n  }, [subProjects, activeForm]);\n  const onBackButtonClicked = () => {\n    actions.orders.setSubProjectsOnDraftOrder(subProjects);\n    effects.router.navigateTo(\n      createUrl(Page.CREATE_ORDER, { slug: \"kundeinfo\" })\n    );\n  };\n  const onFormButtonClick = (form: string) => {\n    setActiveForm(form);\n    setSelectedSubProject(undefined);\n  };\n  return (\n    <div\n      style={{\n        width: \"100%\",\n      }}\n    >\n      <PageFlexConstraint>\n        <div\n          style={{\n            width: \"100%\",\n          }}\n        >\n          <Header type=\"secondary\">4. Produktvalg</Header>\n          <CMSContent contentId={CMSArticles.ORDER_SELECTION_HELPER} />\n        </div>\n      </PageFlexConstraint>\n\n      <ChooseProductPageMainContainer>\n        {orders.quickChoice !== undefined ? null : (\n          <SubProjects\n            selectedSubProject={selectedSubProject}\n            setSelectedSubProject={setSelectedSubProject}\n            subProjects={subProjects}\n            setSubProjects={setSubProjects}\n            setActiveForm={setActiveForm}\n            autoFill={orders.autofill?.offerId !== undefined}\n          />\n        )}\n        <div style={{ width: \"100%\" }}>\n          {orders.quickChoice !== undefined ||\n          (activeForm !== \"\" && activeForm !== undefined) ? null : (\n            <ButtonWrapper>\n              {orders.isQuote ? (\n                <ChooseProductPageButton\n                  onClick={() => onFormButtonClick(\"extendedRoof\")}\n                  active={false}\n                  disabled={orders.autofill?.offerId !== undefined}\n                  extended\n                >\n                  {t(\"AddRoof\")}\n                </ChooseProductPageButton>\n              ) : (\n                <ChooseProductPageButton\n                  onClick={() => onFormButtonClick(\"roof\")}\n                  active={false}\n                  disabled={orders.autofill?.offerId !== undefined}\n                >\n                  {t(\"AddRoof\")}\n                </ChooseProductPageButton>\n              )}\n\n              <ChooseProductPageButton\n                onClick={() => onFormButtonClick(\"beamlayer\")}\n                active={false}\n                disabled={orders.autofill?.offerId !== undefined}\n              >\n                {t(\"AddBeamlayer\")}\n              </ChooseProductPageButton>\n\n              <ChooseProductPageButton\n                onClick={() => onFormButtonClick(\"precut\")}\n                active={false}\n                disabled={orders.autofill?.offerId !== undefined}\n              >\n                {t(\"AddPrecut\")}\n              </ChooseProductPageButton>\n\n              <ChooseProductPageButton\n                onClick={() => onFormButtonClick(\"technical\")}\n                active={false}\n                disabled={orders.autofill?.offerId !== undefined}\n              >\n                {t(\"AddTechnical\")}\n              </ChooseProductPageButton>\n            </ButtonWrapper>\n          )}\n          {activeForm === \"roof\" && (\n            <RoofForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n            />\n          )}\n          {activeForm === \"extendedRoof\" && (\n            <ExtendedRoofForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n              quickChoice={orders.quickChoice}\n              onMainCancel={onBackButtonClicked}\n            />\n          )}\n          {activeForm === \"beamlayer\" && (\n            <JoistsForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n            />\n          )}\n          {activeForm === \"extendedBeamlayer\" && (\n            <ExtendedBeamLayerForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n            />\n          )}\n          {activeForm === \"precut\" && (\n            <PrecutForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n            />\n          )}\n          {activeForm === \"extendedPrecut\" && (\n            <ExtendedPrecutForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n            />\n          )}\n          {activeForm === \"technical\" && (\n            <TechnicalServicesForm\n              setSelectedSubProject={setSelectedSubProject}\n              selectedSubProject={selectedSubProject}\n              setActiveForm={setActiveForm}\n              setSubProjects={setSubProjects}\n              subProjects={subProjects}\n              autoFill={orders.autofill?.offerId !== undefined}\n              quickChoice={orders.quickChoice}\n              onMainCancel={onBackButtonClicked}\n            />\n          )}\n        </div>\n      </ChooseProductPageMainContainer>\n      <div\n        style={{\n          display: activeForm ? \"none\" : \"flex\",\n          justifyContent: \"flex-end\",\n        }}\n      >\n        <div style={{ display: \"flex\", width: \"30vw\", marginTop: \"2rem\" }}>\n          <BlockButton\n            disabled={subProjects.length === 0}\n            style={{ width: \"1000px\" }}\n            onClick={() => onSubmit()}\n          >\n            Neste\n          </BlockButton>\n          <LinkButton as=\"a\" onClick={onBackButtonClicked}>\n            {t(\"Tilbake\")}\n          </LinkButton>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Label } from \"@frontend/common/src/elements/Label/Label\";\nimport { Input } from \"./FormInput.styles\";\nimport { FormControl, Error } from \"../../elements/FormControl/FormControl\";\nimport { RequiredFieldIndicator } from \"../../elements/RequiredFieldIndicator/RequiredFieldIndicator\";\n\ntype Props = {\n  htmlFor?: string;\n  label?: string;\n  name: string;\n  type: string;\n  placeholder?: string;\n  defaultValue?: string;\n  inputRef?: any;\n  error?: any;\n  required?: boolean;\n  // eslint-disable-next-line no-unused-vars\n  onChange?: (value: string) => void;\n  readonly?: any;\n  disabled?: any;\n};\nexport const FormInput: FunctionComponent<Props> = ({\n  htmlFor,\n  label,\n  name,\n  type,\n  placeholder,\n  defaultValue,\n  inputRef,\n  error,\n  required,\n  onChange,\n  disabled,\n  readonly,\n}) => {\n  return (\n    <FormControl>\n      <Label htmlFor={htmlFor}>\n        {label || null}\n        {required ? <RequiredFieldIndicator /> : \"\"}\n      </Label>\n      {/* <InputWrapper> */}\n      <Input\n        readOnly={readonly}\n        name={name}\n        type={type}\n        placeholder={placeholder}\n        defaultValue={defaultValue}\n        ref={inputRef}\n        error={!!error}\n        disabled={disabled}\n        onChange={(e) => (onChange ? onChange(e.target.value) : () => {})}\n      />\n      {/* {suffix ? <Suffix>test</Suffix> : null} */}\n      {/* </InputWrapper> */}\n\n      {error ? <Error>{error}</Error> : null}\n    </FormControl>\n  );\n};\n","import React, { ChangeEvent, FunctionComponent, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { FileInput } from \"@frontend/common/src/elements/FileInput/FileInput\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport * as validators from \"@frontend/common/src/validators\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\n\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { useActions, useEffects } from \"../../../overmind\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { createUrl } from \"../../../app/pages\";\n\nimport { FormInput } from \"../../../components/FormInput/FormInput\";\nimport { Checkbox } from \"../../../components/Checkbox/Checkbox\";\nimport { DraftOrder } from \"../../../types/DraftOrder/DraftOrder\";\nimport { ColumnWrapper, HeaderWrapper, Text } from \"./CreateOrderPage.styles\";\n\nexport const Attachments: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const effects = useEffects();\n  const actions = useActions();\n\n  const [comment, setComment] = useState(\"\");\n\n  const [files, setFiles] = useState<File[]>([]);\n\n  const { register, control, handleSubmit, errors, watch } =\n    useForm<DraftOrder>({\n      resolver: yupResolver(\n        yup.object().shape({\n          expectedDrawingDate: yup.mixed().when(\"hasDrawings\", {\n            is: true,\n            then: validators.dateInFuture.required(),\n          }),\n        })\n      ),\n    });\n\n  const hasDrawings = watch(\"hasDrawings\") as boolean;\n  const addFiles = (f: FileList) => {\n    const file = files.concat(Array.from(f));\n    setFiles(file);\n  };\n  const removeFile = (name: string) => {\n    setFiles(files.filter((x) => x.name !== name));\n  };\n  const onSubmit = (data: DraftOrder) => {\n    actions.orders.updateDraftOrder({ ...data, additionalInfo: comment });\n    actions.orders.setDraftOfferFiles(files);\n    effects.router.navigateTo(\n      createUrl(Page.CREATE_ORDER, { slug: \"oppsummering\" })\n    );\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit(onSubmit)}\n      style={{ display: \"flex\", flexDirection: \"row\" }}\n    >\n      <div>\n        <HeaderWrapper>\n          <Header type=\"secondary\">5. {t(\"Attachments\")}</Header>\n        </HeaderWrapper>\n        <ColumnWrapper>\n          <Text>\n            <CMSContent contentId={CMSArticles.ATTACHMENT_INFO_ORDERS} />\n          </Text>\n          <FileInput\n            name=\"upload\"\n            label={t(\"Attach document\")}\n            multiple\n            onChange={(f) => {\n              addFiles(f);\n            }}\n          />\n          <TextArea\n            label={t(\"Add additional info here\")}\n            name=\"additionalInfo\"\n            rows={7}\n            value={comment}\n            onChange={(e: ChangeEvent<HTMLTextAreaElement>) =>\n              setComment(e.target.value)\n            }\n          />\n          <div style={{ display: \"flex\" }}>\n            <BlockButton style={{ width: \"1000px\" }} type=\"submit\">\n              Neste\n            </BlockButton>\n            <LinkButton\n              as=\"a\"\n              href={createUrl(Page.CREATE_ORDER, { slug: \"produktvalg\" })}\n            >\n              {t(\"Tilbake\")}\n            </LinkButton>\n          </div>\n        </ColumnWrapper>\n      </div>\n\n      <ColumnWrapper>\n        <Controller\n          name=\"expectedDrawingDate\"\n          control={control}\n          render={(props) => (\n            <Checkbox\n              name=\"hasDrawings\"\n              checked={props.value}\n              onChange={(e) => props.onChange(e.target.checked)}\n              label=\"Har ikke tegninger\"\n              inputRef={register}\n            />\n          )}\n        />\n        <CMSContent contentId={CMSArticles.ORDER_NO_DRAWINGS} />\n        <FormInput\n          name=\"expectedDrawingDate\"\n          type=\"date\"\n          label={t(\"Forventet levering på tegninger\")}\n          inputRef={register}\n          error={errors.expectedDrawingDate?.message}\n          required={hasDrawings}\n          disabled={!hasDrawings}\n        />\n        <Text>Valgte filer for prosjekt: </Text>\n        {files.map((x) => {\n          return (\n            <div style={{ marginBottom: \"0.5em\" }}>\n              <button\n                type=\"button\"\n                onClick={() => removeFile(x.name)}\n                style={{ marginRight: \"2em\" }}\n              >\n                Fjern fil\n              </button>\n              {x.name}\n            </div>\n          );\n        })}\n      </ColumnWrapper>\n    </form>\n  );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { CMSArticles } from \"@frontend//common/src/types/CMSArticle\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { DateFormat, formatDate } from \"@frontend/common/src/helpers/date\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { Checkbox } from \"../../../components/Checkbox/Checkbox\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../../components/Buttons/Buttons.styles\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { createUrl } from \"../../../app/pages\";\nimport {\n  PageFlexConstraint,\n  StyledList,\n  StyledSection,\n} from \"./CreateOrderPage.styles\";\nimport { OfferOptionType } from \"../../../types/OfferOption\";\nimport { DraftOrderSubProject } from \"../../../types/DraftOrder/DraftOrderSubProject\";\n\nexport const Summary: React.FunctionComponent = () => {\n  const { t } = useTranslation();\n  const actions = useActions();\n  const effects = useEffects();\n  const {\n    customer,\n    offerOptions,\n    orders: { currentNewOrder: order, autofill },\n  } = useAppState();\n\n  const roofTypes = offerOptions\n    .filter((o) => o.type === OfferOptionType.ROOF)\n    .map((o) => ({ label: o.description, value: o.id }));\n\n  const joistsTypes = useMemo(\n    () =>\n      offerOptions\n        .filter((o) => o.type === OfferOptionType.JOIST_TYPE)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [offerOptions]\n  );\n\n  const dimensions = useMemo(\n    () =>\n      offerOptions\n        .filter((o) => o.type === OfferOptionType.PRECUT_DIMENSION)\n        .map((o) => ({ label: o.description, value: o.id })),\n    [offerOptions]\n  );\n\n  const deterimineProductName = (subProj: DraftOrderSubProject) => {\n    let returnVal = \"\";\n    if (subProj.type === \"technical\") {\n      returnVal = \"Tekniske tjenester\";\n    } else if (subProj.type === \"roof\" || subProj.type === \"extendedRoof\") {\n      const roof = roofTypes.find(\n        (x) => x.value.toString() === subProj.roofType\n      );\n      returnVal = roof ? roof.label : \"\";\n    } else if (\n      subProj.type === \"beamlayer\" ||\n      subProj.type === \"extendedBeamlayer\"\n    ) {\n      const joist = joistsTypes.find(\n        (x) => x.value.toString() === subProj.joistsType\n      );\n      returnVal = joist ? joist.label : \"\";\n    } else if (subProj.type === \"precut\" || subProj.type === \"extendedPrecut\") {\n      const dim = dimensions.find(\n        (x) => x.value.toString() === subProj.dimensions\n      );\n      returnVal = `Precut ${dim ? dim.label : \"\"}`;\n    } else {\n      returnVal = subProj.type;\n    }\n    return returnVal !== \"\" ? returnVal : subProj.type;\n  };\n  const requiredCheckboxItems = offerOptions.filter((o) => o.type === 10);\n\n  const [checkboxes, setChecboxes] = useState<{ [index: string]: boolean }>({});\n  const [submitting, setSumbitting] = useState(false);\n  const onConfirm = async () => {\n    const cb = Object.values(checkboxes);\n    if (cb.length !== requiredCheckboxItems.length || cb.some((c) => !c)) {\n      effects.toast(\"Se over sjekkliste\", 5000);\n      return;\n    }\n    setSumbitting(true);\n    await actions.orders\n      .commitDraftOrder({\n        customerId: customer.id,\n        order,\n        offerId: autofill?.offerId,\n      })\n      .finally(() => {\n        setSumbitting(false);\n      });\n  };\n  const deliveryText = (deleted: boolean) => {\n    if (deleted) {\n      return \", fjernet\";\n    }\n    if (\n      order.preferredDeliveryDate !== null &&\n      order.preferredDeliveryDate !== undefined\n    ) {\n      const formatted = formatDate(\n        order.preferredDeliveryDate,\n        DateFormat.REGULAR\n      );\n      if (formatted === null) return \"\";\n      return `, levering ${formatted}`;\n    }\n    return \"\";\n  };\n  return (\n    <PageFlexConstraint\n      itemWidth=\"40vw\"\n      style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\" }}\n    >\n      <StyledSection>\n        <Header type=\"secondary\">6. {t(\"Oppsummering\")}</Header>\n        <article>\n          <p>Oppsummering: </p>\n          <ul style={{ paddingLeft: \"20px\" }}>\n            {order.subProjects.map((x) => {\n              return (\n                <StyledList key={x.projectId}>\n                  {deterimineProductName(x)} {deliveryText(x.deleted)}\n                </StyledList>\n              );\n            })}\n          </ul>\n          {order.subProjects.length > 1 ? (\n            <CMSContent contentId={CMSArticles.ORDER_SUMMARY_MULTIPLE} />\n          ) : null}\n        </article>\n\n        <article>\n          <b>Byggeaddresse:</b>\n          <p>{order.deliveryAddress}</p>\n          <p>{`${order.zipCode} ${order.city}`}</p>\n        </article>\n\n        {order.deliveryTerms === \"Hentes fabrikk\" ? (\n          <article>\n            <p>{order.deliveryTerms}</p>\n          </article>\n        ) : (\n          <article>\n            <b>Leveringsadresse:</b>\n            <p>{order.deliveryAddress2 ?? order.deliveryAddress}</p>\n            <p>\n              {order.deliveryAddress2\n                ? `${order.zipCode2} ${order.city2}`\n                : `${order.zipCode} ${order.city}`}\n            </p>\n          </article>\n        )}\n\n        <article>\n          {offerOptions\n            .filter((o) => o.type === 10)\n            .map((option) => (\n              <Checkbox\n                key={option.id}\n                label={option.description}\n                checked={checkboxes[option.id]}\n                onChange={(e) => {\n                  setChecboxes({\n                    ...checkboxes,\n                    [option.id]: e.target.checked,\n                  });\n                }}\n              />\n            ))}\n        </article>\n\n        <section\n          style={{\n            display: \"grid\",\n            gridTemplateColumns: \"2fr 1fr\",\n            gap: \"1rem\",\n          }}\n        >\n          <BlockButton onClick={onConfirm} type=\"submit\" disabled={submitting}>\n            {t(\"Done\")}\n          </BlockButton>\n          <LinkButton\n            as=\"a\"\n            href={createUrl(Page.CREATE_ORDER, { slug: \"vedlegg\" })}\n          >\n            {t(\"Tilbake\")}\n          </LinkButton>\n        </section>\n      </StyledSection>\n    </PageFlexConstraint>\n  );\n};\n","import React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { createUrl } from \"../../../app/pages\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { useActions, useAppState } from \"../../../overmind\";\nimport {\n  Text,\n  BoldText,\n  PageFlexConstraint,\n  StyledSection,\n} from \"./CreateOrderPage.styles\";\n\nexport const Receipt: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const actions = useActions();\n\n  const {\n    orders: { currentNewOrder: order, orderConverted, isQuote, autofill },\n    customer,\n  } = useAppState();\n  const [orderId, setOrderId] = useState<string>();\n\n  useEffect(() => {\n    if (order.orderId) {\n      actions.orders.commitSubProjs({\n        customerId: customer.id,\n        order,\n        projectId: order.orderId,\n        offerId: autofill?.offerId,\n      });\n      setOrderId(order.orderId);\n    }\n    actions.orders.clearAutofillAndDraftOrder();\n  }, []);\n  return (\n    <PageFlexConstraint>\n      <StyledSection>\n        <Header type=\"secondary\">7. {t(\"Summary\")}</Header>\n        <article>\n          <Text>\n            <CMSContent\n              contentId={\n                orderConverted\n                  ? 1457\n                  : isQuote\n                  ? CMSArticles.OFFER_SUMMARY\n                  : CMSArticles.ORDER_SUMMARY\n              }\n            />\n          </Text>\n          <BoldText>Ditt referansenummer er #{orderId}</BoldText>\n        </article>\n        <article style={{ padding: \"1rem 0\" }}>\n          <BlockButton\n            as=\"a\"\n            href={createUrl(Page.ORDER_LIST)}\n            style={{ paddingLeft: \"1rem\", paddingRight: \"1rem\" }}\n          >\n            {t(\"Back to my orders\")}\n          </BlockButton>\n        </article>\n      </StyledSection>\n    </PageFlexConstraint>\n  );\n};\n","import React, { FunctionComponent, useState, useEffect } from \"react\";\nimport styled from \"styled-components\";\n\nconst Menu = styled.section`\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  gap: 1rem;\n`;\n\nconst MenuItem = styled.section`\n  text-align: center;\n  padding: 0.25rem;\n`;\n\nconst MenuItemHeader = styled.h4``;\n\nconst MenuItemImg = styled.img<{ isSelected?: boolean }>`\n  max-width: 200px;\n  border-radius: 0.25rem;\n  border: 0.125rem solid\n    ${(props) => (props.isSelected ? \"red\" : \"transparent\")};\n`;\n\ninterface Props {\n  key: number;\n  /** Header text */\n  text: string;\n  /** The URL for the image */\n  src: string;\n}\n\nexport const SelectionGrid: FunctionComponent<{\n  items: Props[];\n  // eslint-disable-next-line no-unused-vars\n  onItemClicked: (i: Props, e: any) => void;\n}> = ({ items, onItemClicked }) => {\n  const [elements, setElements]: any[] = useState<Element[]>();\n  const [selected, setSelected] = useState<Props | undefined>();\n\n  const renderer = (i: Props) => {\n    return (\n      <MenuItem\n        onClick={(e) => {\n          setSelected(i);\n          onItemClicked(i, e);\n        }}\n      >\n        <MenuItemHeader>{i.text}</MenuItemHeader>\n        <MenuItemImg\n          isSelected={selected && selected.key === i.key}\n          src={i.src}\n          alt={i.text}\n        />\n      </MenuItem>\n    );\n  };\n\n  useEffect(() => setElements(items.map(renderer)), [items, selected]);\n\n  return <Menu>{elements}</Menu>;\n};\n","import React, { useState, FunctionComponent } from \"react\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { SelectionGrid } from \"../../components/SelectionGrid/SelectionGrid\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../components/Buttons/Buttons.styles\";\nimport { useActions, useAppState } from \"../../overmind\";\n\ninterface Props {\n  key: number;\n  /** Header text */\n  text: string;\n  /** The URL for the image */\n  src: string;\n}\n\n/**\n * Creates a modal which the user picks one of the items and returns the element to parent when user submits.\n * @param items     a pool of items\n * @constructor     -\n */\nexport const SelectionGridModal: FunctionComponent = () => {\n  const [selectedItem, setSelectedItem] = useState<Props>();\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const onItemClicked = (i: Props, e: any) => setSelectedItem(i);\n  const { modals: modalsAction } = useActions();\n  const { modals: modalsState } = useAppState();\n  /**\n   * Sends the selected item to parent.\n   */\n  const emitOnSubmit = () => {\n    modalsAction.selectionGridModal.close(selectedItem);\n  };\n\n  const closeModal = () => {\n    modalsAction.selectionGridModal.close(null);\n  };\n\n  const { items } = modalsState.selectionGridModal;\n\n  return (\n    <Modal\n      isOpen={modalsState.selectionGridModal.isCurrent}\n      onClose={() => closeModal()}\n    >\n      <SelectionGrid items={items} onItemClicked={onItemClicked} />\n\n      <div style={{ display: \"grid\", gridTemplateColumns: \"2fr 1fr 1fr\" }}>\n        <span />\n        <BlockButton onClick={() => emitOnSubmit()}>Velg</BlockButton>\n        <LinkButton onClick={() => closeModal()}>Avbryt</LinkButton>\n      </div>\n    </Modal>\n  );\n};\n","import React, { useEffect } from \"react\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { BlockButton } from \"../../../components/Buttons/Buttons.styles\";\nimport { createUrl } from \"../../../app/pages\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { PreTreColors } from \"../../../styles/constants\";\n\nexport const ChooseProjectType = () => {\n  const actions = useActions();\n  const effects = useEffects();\n  const state = useAppState();\n\n  useEffect(() => {\n    if (state.orders.autofill?.offerId !== undefined) {\n      actions.orders.setQuotationOnDraftOrder({\n        isQuotation: false,\n        quickChoice: undefined,\n      });\n      actions.orders.setOrderConverted(false);\n      effects.router.navigateTo(\n        createUrl(Page.CREATE_ORDER, { slug: \"kundeinfo\" })\n      );\n    }\n  }, [state.orders.autofill]);\n  const onSubmit = (isQuotation: boolean, quickChoice?: string) => {\n    actions.orders.setQuotationOnDraftOrder({ isQuotation, quickChoice });\n    actions.orders.setOrderConverted(false);\n    effects.router.navigateTo(\n      createUrl(Page.CREATE_ORDER, { slug: \"kundeinfo\" })\n    );\n  };\n\n  return (\n    <div\n      style={{\n        display: \"flex\",\n        justifyContent: \"center\",\n        marginTop: \"2em\",\n      }}\n    >\n      <div\n        style={{\n          display: \"flex\",\n          flexDirection: \"column\",\n          width: \"35vw\",\n          justifyContent: \"space-evenly\",\n        }}\n      >\n        <div>\n          <div style={{ color: PreTreColors.beis, fontSize: \"1.5rem\" }}>\n            Forespørsel\n          </div>\n          <CMSContent contentId={1454} />\n          <BlockButton onClick={() => onSubmit(true, undefined)}>\n            Lag ny forespørsel\n          </BlockButton>\n        </div>\n        <div style={{ marginTop: \"5em\" }}>\n          <div style={{ color: PreTreColors.beis, fontSize: \"1.5rem\" }}>\n            Bestilling\n          </div>\n          <CMSContent contentId={1455} />\n          <BlockButton onClick={() => onSubmit(false, undefined)}>\n            Lag ny bestilling\n          </BlockButton>\n        </div>\n\n        <div style={{ marginTop: \"5em\" }}>\n          <div style={{ color: PreTreColors.beis, fontSize: \"1.5rem\" }}>\n            Hurtigvalg\n          </div>\n          <div\n            style={{\n              display: \"flex\",\n              flexDirection: \"row\",\n              justifyContent: \"space-evenly\",\n              flexWrap: \"wrap\",\n            }}\n          >\n            <BlockButton\n              onClick={() => onSubmit(true, \"extendedRoof\")}\n              style={{ width: \"10em\", marginTop: \"1em\" }}\n            >\n              Takstolkalkulator\n            </BlockButton>\n            <BlockButton\n              onClick={() => onSubmit(true, \"technical\")}\n              style={{ width: \"10em\", marginTop: \"1em\" }}\n            >\n              Tekniske tjenester\n            </BlockButton>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { Grid, Row, Col } from \"@frontend/common/src/elements/Grid/Grid\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport * as validators from \"@frontend//common/src/validators\";\nimport {\n  CustomerEmployee,\n  UpdateCustomerEmployee,\n} from \"@frontend/common/src/types/CustomerEmployee\";\nimport { UserType } from \"@frontend/common/src/types/User\";\nimport { useAppState } from \"../../../overmind\";\nimport { BlockButton } from \"../../Buttons/Buttons.styles\";\n\nconst validationSchema = yup.object().shape({\n  name: validators.name,\n  email: validators.requiredEmail,\n  phone: validators.string,\n  mobile: validators.string,\n  position: validators.string,\n  password: validators.string,\n  newPassword: validators.string,\n});\n\ntype Props = {\n  customerEmployee: CustomerEmployee;\n  // eslint-disable-next-line no-unused-vars\n  onSubmit: (data: UpdateCustomerEmployee) => void;\n};\nexport const UserForm: FunctionComponent<Props> = ({\n  customerEmployee,\n  onSubmit,\n}) => {\n  const state = useAppState();\n\n  const requiresVerifyPassword =\n    state.auth.user.type === UserType.EMPLOYEE && customerEmployee != null;\n\n  const { register, handleSubmit, errors } = useForm<UpdateCustomerEmployee>({\n    resolver: yupResolver(validationSchema),\n    defaultValues: customerEmployee,\n  });\n\n  // AnsvarligSelger_ID\n  return (\n    <form\n      onSubmit={(e) => {\n        e.preventDefault();\n        handleSubmit(onSubmit)(e);\n      }}\n    >\n      <Grid>\n        <Row>\n          <Col size={1}>\n            <input type=\"hidden\" name=\"active\" ref={register} />\n            <FormInput\n              required\n              label=\"Navn\"\n              type=\"text\"\n              name=\"name\"\n              inputRef={register}\n              error={errors.name?.message}\n            />\n\n            <FormInput\n              required\n              label=\"Epost\"\n              type=\"text\"\n              name=\"email\"\n              inputRef={register}\n              error={errors.email?.message}\n            />\n\n            <FormInput\n              label=\"Telefon\"\n              type=\"text\"\n              name=\"phone\"\n              inputRef={register}\n              error={errors.phone?.message}\n            />\n            <FormInput\n              label=\"Mobil\"\n              type=\"text\"\n              name=\"mobile\"\n              inputRef={register}\n              error={errors.mobile?.message}\n            />\n            <FormInput\n              label=\"Stilling\"\n              type=\"text\"\n              name=\"position\"\n              inputRef={register}\n              error={errors.position?.message}\n            />\n\n            {requiresVerifyPassword ? (\n              <FormInput\n                label=\"Gammelt passord\"\n                type=\"text\"\n                name=\"password\"\n                inputRef={register}\n                error={errors.password?.message}\n              />\n            ) : null}\n\n            <FormInput\n              label=\"Nytt passord\"\n              type=\"text\"\n              name=\"newPassword\"\n              inputRef={register}\n              error={errors.newPassword?.message}\n            />\n          </Col>\n        </Row>\n      </Grid>\n\n      <div style={{ display: \"flex\" }}>\n        <BlockButton type=\"submit\">\n          {customerEmployee != null ? \"Oppdater\" : \"Opprett\"}\n        </BlockButton>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Table, Column } from \"@frontend/common/src/components/Table/Table\";\nimport { CustomerEmployee } from \"@frontend/common/src/types/CustomerEmployee\";\nimport { Link } from \"../../elements/Link/Link\";\nimport { useActions } from \"../../overmind\";\nimport { BlockButton } from \"../Buttons/Buttons.styles\";\n\ntype ColumnKey = keyof CustomerEmployee;\n\ntype Props = {\n  users: CustomerEmployee[];\n  columns?: ColumnKey[];\n  // eslint-disable-next-line no-unused-vars\n  onRowSelected?: (row: CustomerEmployee) => void;\n};\n\nconst createColumns = (actions: any): Column<CustomerEmployee>[] => {\n  const allColumns: Column<CustomerEmployee>[] = [\n    {\n      headerName: \"Navn\",\n      field: \"name\",\n      render: (row) => `${row.name}`,\n    },\n    {\n      headerName: \"Epost\",\n      field: \"email\",\n    },\n    {\n      headerName: \"Telefon\",\n      field: \"phone\",\n      render: (row) => <Link href=\"tel:row.phone\">{row.phone}</Link>,\n    },\n    {\n      headerName: \"Stilling\",\n      field: \"position\",\n    },\n\n    {\n      headerName: \"Aktiv\",\n      field: \"active\",\n      render: (row) => (\n        <BlockButton\n          style={{ fontSize: \".75rem\", padding: \".2rem\" }}\n          onClick={(e) => {\n            e.preventDefault();\n            e.stopPropagation();\n\n            actions.changeUserActive({\n              userId: row.id,\n              activeState: !row.active,\n            });\n          }}\n        >\n          {row.active ? \"Deaktiver\" : \"Aktiver\"}\n        </BlockButton>\n      ),\n    },\n    {\n      headerName: \"Har Passord\",\n      field: \"hasPassword\",\n      render: (row: CustomerEmployee) =>\n        row.hasPassword ? (\n          <svg height=\"1rem\" viewBox=\"0 0 24 18\">\n            <path\n              d=\"M0 9.91357L2.60829 6.52202L9.39163 12.2615L20.3488 0L23.4791 2.86985L9.65201 18L0 9.91357Z\"\n              fill=\"#CA0000\"\n            />\n          </svg>\n        ) : (\n          \"\"\n        ),\n    },\n    {\n      headerName: \"Handlinger\",\n      field: \"hasPassword\",\n      render: (row) => (\n        <div style={{ display: \"flex\" }}>\n          <BlockButton\n            style={{\n              fontSize: \".75rem\",\n              padding: \".2rem\",\n              marginRight: \"1rem\",\n            }}\n            onClick={(e: any) => {\n              e.preventDefault();\n              e.stopPropagation();\n\n              actions.onResetPassword(row.id);\n            }}\n          >\n            Send passord\n          </BlockButton>\n        </div>\n      ),\n    },\n  ];\n\n  return allColumns;\n};\n\nexport const UserList: FunctionComponent<Props> = ({\n  users,\n  columns,\n  onRowSelected,\n}) => {\n  const actions = useActions();\n  const allColumns = createColumns(actions);\n  let columnsToUse = null;\n  if (!columns) {\n    columnsToUse = allColumns;\n  } else {\n    columnsToUse = columns.map((c) => allColumns.find((a) => a.field === c));\n  }\n\n  return (\n    <Table\n      keyField=\"id\"\n      data={users}\n      columns={columnsToUse}\n      availableColumns={allColumns}\n      onRowSelected={onRowSelected}\n    />\n  );\n};\n","import styled from \"styled-components\";\n\nexport const Grid = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: start;\n`;\ntype RowProps = {\n  size?: number;\n};\nexport const Row = styled(\"div\")<RowProps>`\n  display: flex;\n  ${(props) => (props.size ? { flex: props.size } : null)};\n  @media only screen and (max-width: 850px) {\n    flex-direction: column;\n  }\n`;\ntype ColProps = {\n  size: number;\n};\nexport const Col = styled(\"div\")<ColProps>`\n  flex: ${(props) => props.size};\n  margin: 1rem;\n`;\n","import React, { FunctionComponent } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { Grid, Row, Col } from \"@frontend/common/src/elements/Grid/Grid\";\nimport { FormInput } from \"@frontend/common/src/elements/FormInput/FormInput\";\nimport * as validators from \"@frontend//common/src/validators\";\nimport { BlockButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { Customer } from \"@frontend/common/src/types/Customer\";\nimport { useActions, useAppState } from \"../../../../overmind\";\n\nconst validationSchema = yup.object().shape({\n  address: validators.address,\n  zipcode: validators.zipcode,\n  email: validators.requiredEmail,\n  drawingsEmail: validators.email,\n  orderConfimEmail: validators.email,\n  orderConfrimEmailAlt: validators.email,\n});\n\nexport const CompanyForm: FunctionComponent = () => {\n  const actions = useActions();\n  const state = useAppState();\n\n  const { register, handleSubmit, errors } = useForm<Customer>({\n    resolver: yupResolver(validationSchema),\n    defaultValues: state.customer,\n  });\n\n  const onSubmitData = (data: Customer) => {\n    // eslint-disable-next-line no-param-reassign\n    data.id = state.customer.id;\n    actions.changeCustomer(data);\n  };\n\n  return (\n    <form onSubmit={handleSubmit(onSubmitData)}>\n      <Grid>\n        <Row>\n          <Col size={1}>\n            <FormInput\n              required\n              label=\"Kundenavn\"\n              type=\"text\"\n              name=\"name\"\n              readonly\n              inputRef={register}\n              error={errors.name?.message}\n            />\n            <FormInput\n              required\n              label=\"Adresse\"\n              type=\"text\"\n              name=\"address\"\n              inputRef={register}\n              error={errors.address?.message}\n            />\n            <FormInput\n              required\n              label=\"Postnummer\"\n              type=\"text\"\n              name=\"zipcode\"\n              inputRef={register}\n              error={errors.zipcode?.message}\n            />\n            <FormInput\n              required\n              label=\"Sted\"\n              type=\"text\"\n              name=\"city\"\n              readonly\n              inputRef={register}\n              error={errors.city?.message}\n            />\n            <FormInput\n              required\n              label=\"Epost\"\n              type=\"text\"\n              name=\"email\"\n              inputRef={register}\n              error={errors.email?.message}\n            />\n          </Col>\n          <Col size={1}>\n            <FormInput\n              label=\"Epost tegninger\"\n              type=\"text\"\n              name=\"drawingsEmail\"\n              inputRef={register}\n              error={errors.drawingsEmail?.message}\n            />\n            <FormInput\n              label=\"Epost ordrebekreftelse\"\n              type=\"text\"\n              name=\"orderConfimEmail\"\n              inputRef={register}\n              error={errors.orderConfimEmail?.message}\n            />\n            <FormInput\n              label=\"Epost ordresbekreftelse\"\n              type=\"text\"\n              name=\"orderConfrimEmailAlt\"\n              inputRef={register}\n              error={errors.orderConfrimEmailAlt?.message}\n            />\n          </Col>\n        </Row>\n      </Grid>\n\n      <div style={{ display: \"flex\" }}>\n        <BlockButton type=\"submit\">Lagre endringer</BlockButton>\n      </div>\n    </form>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { UpdateCustomerEmployee } from \"@frontend/common/src/types/CustomerEmployee\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport { UserForm } from \"../../components/forms/UserForm/UserForm\";\n\nexport const EditEmployeeModal: FunctionComponent = () => {\n  const state = useAppState();\n  const actions = useActions();\n  const { modals } = useAppState();\n\n  const { modals: modalsActions } = useActions();\n\n  if (!modals.editEmployeeModal.isCurrent) {\n    return null;\n  }\n\n  const onSubmitData = (data: UpdateCustomerEmployee) => {\n    if (modals.editEmployeeModal.employeeId) {\n      // eslint-disable-next-line no-param-reassign\n      data.id = modals.editEmployeeModal.employeeId;\n      actions\n        .changeCustomerEmployee(data)\n        .then(() => modalsActions.editEmployeeModal.close());\n    } else {\n      actions\n        .createCustomerEmployee(data)\n        .then(() => modalsActions.editEmployeeModal.close());\n    }\n  };\n\n  return (\n    <Modal\n      isOpen={modals.editEmployeeModal.isCurrent}\n      onClose={() => modalsActions.editEmployeeModal.close()}\n    >\n      <UserForm\n        customerEmployee={state.customerEmployees.find(\n          (e) => e.id === modals.editEmployeeModal.employeeId\n        )}\n        onSubmit={onSubmitData}\n      />\n    </Modal>\n  );\n};\n","import styled from \"styled-components\";\n\nexport const Callout = styled(\"label\")`\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  width: 100%;\n  padding: 1rem;\n  border: 1px solid yellow;\n  background: lightyellow;\n  margin-top: 1rem;\n  a {\n    display: inline-block;\n  }\n`;\n","import React from \"react\";\nimport { EmployeeMessageReferenceType } from \"@frontend/common/src/types/EmployeeMessage\";\nimport { Callout } from \"@frontend/common/src/elements/Callout/Callout\";\nimport { useAppState } from \"../../overmind\";\nimport { EmployeeLink } from \"../EmployeeLink/EmployeeLink\";\n\ntype Props = {\n  employeeId?: string;\n};\nexport const SalesPersonBox = ({ employeeId }: Props) => {\n  const state = useAppState();\n  const employee = state.pretreEmplyees.find((e) => e.id === employeeId);\n\n  return (\n    <Callout>\n      <span>Ansvarlig uteselger</span>\n\n      {employee ? (\n        <EmployeeLink\n          employee={employee}\n          referenceId=\"0\"\n          referenceType={EmployeeMessageReferenceType.CUSTOMER}\n        />\n      ) : (\n        <div>Ingen ansvarlig uteselger</div>\n      )}\n    </Callout>\n  );\n};\n","import React from \"react\";\n\nconst Auth = () => {\n  return <div>Autentiserer....</div>;\n};\n\nexport default Auth;\n","import { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport React, { FunctionComponent } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\nimport { BlockButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport { Select } from \"../../components/Select/Select\";\n\nconst schema = yup.object().shape({\n  customerId: yup.string().required(),\n});\n\nconst CompanySelectorPage: FunctionComponent = () => {\n  const state = useAppState();\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const actions = useActions();\n  const onSubmit = (data: any) => {\n    actions.auth.onMesterIdSelectCustomer(data.customerId);\n  };\n\n  const { register, handleSubmit } = useForm({\n    resolver: yupResolver(schema),\n  });\n  return (\n    <Page title=\"Velg kunde\">\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <Select\n          name=\"customerId\"\n          required\n          label=\"Kunde\"\n          options={state.mesterIdCustomers.map((a) => {\n            return { label: `${a.name}`, value: a.id };\n          })}\n          inputRef={register}\n        />\n        <BlockButton type=\"submit\"> Velg kunde</BlockButton>\n      </form>\n    </Page>\n  );\n};\n\nexport default CompanySelectorPage;\n","import React, { FunctionComponent, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { LinkButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\n\nconst buildVersion = process.env.REACT_APP_BUILD_VERSION;\n\nexport const LoginPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const { loginWithRedirect } = useAuth0();\n  // eslint-disable-next-line no-undef\n  useEffect(() => {\n    loginWithRedirect();\n  }, []);\n  // TODO: Sjekk om maxwidth kan ligge i form\n  return (\n    <Page title={t(\"Login\")}>\n      <LinkButton onClick={() => loginWithRedirect()}>\n        Logg inn med MesterID\n      </LinkButton>\n      <p style={{ marginTop: \"1rem\" }}> Versjon: {buildVersion}</p>\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { CMSContent } from \"../../components/CMSContent/CMSContent\";\nimport { Heading } from \"../../elements/Header/Header.styles\";\nimport { useAppState } from \"../../overmind\";\nimport {\n  ColumnWrapper,\n  Text,\n  BoldText,\n} from \"../order/ChooseProductPage/CreateOrderPage.styles\";\n\nexport const TechnicalServicesPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const state = useAppState();\n\n  return (\n    <Page title={t(\"Technical services\")}>\n      <CMSContent contentId={CMSArticles.TECHNICAL_SERVICES} />\n\n      <div style={{ display: \"flex\", flexWrap: \"wrap\" }}>\n        {state.technicalServices.map((service) => (\n          <ColumnWrapper key={service.id}>\n            <img src={service.bildeURL} alt=\"bilde av tjeneste\" /> : <div />\n            <Heading type=\"secondary\">{service.navn}</Heading>\n            <Text>{service.beskrivelse}</Text>\n            <BoldText>Fra kr: {service.pris},-</BoldText>\n          </ColumnWrapper>\n        ))}\n      </div>\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page as PageConstants } from \"@frontend/common/src/types/Page\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { useAppState } from \"../../../overmind\";\nimport { OrderFilter } from \"./components/OrderFilter/OrderFilter\";\nimport { OrderList } from \"../../../components/OrderList/OrderList\";\nimport { Pager } from \"../../../components/Pager/Pager\";\nimport { createUrl } from \"../../../app/pages\";\n\nexport const OrderListPage: FunctionComponent = () => {\n  const state = useAppState();\n  const { t } = useTranslation();\n  return (\n    <Page title={t(\"My orders and projects\")}>\n      <OrderFilter orders={state.orders.orders} />\n      {state.orders.isFetching ? (\n        <div>Laster</div>\n      ) : (\n        <>\n          <OrderList\n            noResultsText=\"Fant ingen ordre, sjekk filter over\"\n            orders={state.orders.currentPageItems}\n            columns={[\n              \"id\",\n              \"projectName\",\n              \"status\",\n              \"constructionName\",\n              \"calculationName\",\n              \"customerOrderNumber\",\n              \"delivery\",\n              \"sum\",\n            ]}\n          />\n          <Pager\n            pageCount={state.orders.pageCount}\n            currentPage={state.orders.currentPage}\n            link={createUrl(PageConstants.ORDER_LIST)}\n          />\n        </>\n      )}\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\n\nimport { Grid, Row, Col } from \"@frontend/common/src/elements/Grid/Grid\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\n\nimport { formatDate } from \"@frontend/common/src/helpers/date\";\nimport { Page as PageConstants } from \"@frontend/common/src/types/Page\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { PhoneLink } from \"@frontend/common/src/components/PhoneLink/PhoneLink\";\nimport { CMSContent } from \"../../../components/CMSContent/CMSContent\";\nimport { DocumentList } from \"../../../components/DocumentList/DocumentList\";\nimport { OrderList } from \"../../../components/OrderList/OrderList\";\n\nimport {\n  DetailsBox,\n  Legend,\n  Text,\n  Group,\n} from \"../../../components/DetailsBox/DetailsBox\";\nimport { SketchFabEmbed } from \"../../../components/SketchFabEmbed/SketchFabEmbed\";\nimport { useActions, useAppState } from \"../../../overmind\";\nimport { Link } from \"../../../elements/Link/Link\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { createUrl } from \"../../../app/pages\";\nimport { formatMoney } from \"../../../helpers/money\";\nimport { getDeliveryDateText } from \"../../../helpers/order\";\nimport { router } from \"../../../overmind/effects\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../../components/Buttons/Buttons.styles\";\nimport { PrecutModal } from \"../../../modals/PrecutModal/PrecutModal\";\nimport { FileUploadModal } from \"../../../modals/FileUploadModal/FileUploadModal\";\n\nexport const ViewOrderPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const actions = useActions();\n  const {\n    customerEmployees,\n    customer,\n    orders: { orders, currentOrder, masterProjects },\n    modals: { precutModal, fileUploadModal },\n  } = useAppState();\n\n  if (!currentOrder) {\n    return <div>{t(\"Loading\")}</div>;\n  }\n\n  const customerContact = customerEmployees.find(\n    (e) => e.id === currentOrder.customerEmployeeId\n  );\n\n  const ordersInSameProject = orders\n    .find((x) => x.id === currentOrder.projectId)\n    .subProjects.filter((o) => o.id !== currentOrder.id);\n\n  const backLink = masterProjects[currentOrder.projectId]\n    ? {\n        label: `Prosjekt #${currentOrder.projectId}`,\n        url: createUrl(PageConstants.VIEW_ORDER_PROJECT, {\n          id: masterProjects[currentOrder.projectId],\n        }),\n      }\n    : null;\n\n  const onNewOrderClicked = async () => {\n    await actions.orders.getOrderAutofill({\n      customerId: customer.id,\n      offerId: currentOrder.projectId,\n    });\n    actions.orders.setOrderConverted(true);\n    router.navigateTo(\n      createUrl(PageConstants.CREATE_ORDER, { slug: \"kundeinfo\" })\n    );\n  };\n  return (\n    <Page title={`Prosjekt #${currentOrder.id}`} backLink={backLink}>\n      <Grid>\n        <Row>\n          <Col size={1}>\n            <DetailsBox>\n              <tbody>\n                <Group>\n                  <Legend>{t(\"Created\")}</Legend>\n                  <Text>{formatDate(currentOrder.orderDate)}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Product\")}</Legend>\n                  <Text>\n                    {currentOrder.product && currentOrder.product !== \"\"\n                      ? currentOrder.product\n                      : \"Ukjent\"}\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Status\")}</Legend>\n                  <Text>{currentOrder.status}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Delivery date\")}</Legend>\n                  <Text>{getDeliveryDateText(currentOrder)}</Text>\n                </Group>\n\n                <Group>\n                  <Legend>Prosjektnavn</Legend>\n                  <Text>{currentOrder.projectName}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Customer order no\")}</Legend>\n                  <Text>{currentOrder.customerOrderNumber || \"Ikke satt\"}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Customer ref.\")}</Legend>\n                  <Text>\n                    {customerContact ? customerContact.name : \"Ikke satt\"}\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Delivery addr.\")}</Legend>\n                  {currentOrder.deliveryTerms.toLowerCase() === \"avhentet\" ? (\n                    <Text>Avhentet</Text>\n                  ) : (\n                    <Text>\n                      <Link\n                        target=\"_blank\"\n                        href={`https://www.google.no/maps/search/${encodeURI(\n                          currentOrder.deliveryAddress\n                        )}`}\n                      >\n                        {currentOrder.deliveryAddress}\n                      </Link>\n                    </Text>\n                  )}\n                </Group>\n                <Group>\n                  <Legend>{t(\"Order price\")}</Legend>\n                  <Text>\n                    {currentOrder.isOrderPriceCalculated &&\n                    currentOrder.sum > 0 ? (\n                      <span style={{ display: \"flex\" }}>\n                        {formatMoney(currentOrder.sum)}\n                        <CMSContent contentId={CMSArticles.NOT_CALCULATED} />\n                      </span>\n                    ) : (\n                      formatMoney(currentOrder.sum)\n                    )}\n                  </Text>\n                </Group>\n              </tbody>\n            </DetailsBox>\n          </Col>\n          <Col size={1}>\n            <DetailsBox>\n              <tbody>\n                <Group>\n                  <Legend>{t(\"Constructor\")}</Legend>\n                  <Text>{currentOrder.constructionName}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Site phone\")}</Legend>\n                  <Text>\n                    <PhoneLink number={currentOrder.constructionContactPhone} />\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Site contact\")}</Legend>\n                  <Text>{currentOrder.constructionContactName}</Text>\n                </Group>\n                <Group>\n                  <Legend>Ønsket leveringsdato</Legend>\n                  <Text>{getDeliveryDateText(currentOrder)}</Text>\n                </Group>\n              </tbody>\n            </DetailsBox>\n            {currentOrder.valueChainStatus === 1 && (\n              <BlockButton\n                style={{\n                  width: \"33%\",\n                  height: \"25%\",\n                  fontSize: \"1rem\",\n                  padding: \"10px 0\",\n                }}\n                onClick={() => onNewOrderClicked()}\n              >\n                {\" \"}\n                Sett tilbud til ordre{\" \"}\n              </BlockButton>\n            )}\n            {currentOrder.valueChainStatus === 4 && (\n              <BlockButton\n                style={{\n                  width: \"33%\",\n                  height: \"25%\",\n                  fontSize: \"1rem\",\n                  padding: \"10px 0\",\n                }}\n              >\n                {\" \"}\n                Godkjenn ordre{\" \"}\n              </BlockButton>\n            )}\n            {currentOrder.product.toLowerCase() === \"precut\" && (\n              <BlockButton\n                style={{\n                  width: \"33%\",\n                  height: \"25%\",\n                  fontSize: \"1rem\",\n                  padding: \"10px 0\",\n                }}\n                onClick={() =>\n                  actions.onPrecutForm({\n                    projectId: currentOrder.id,\n                    openedFromProjectPage: true,\n                  })\n                }\n              >\n                Åpne Precut-skjema\n              </BlockButton>\n            )}\n          </Col>\n\n          <Col size={1}>\n            {currentOrder.embedId ? (\n              <SketchFabEmbed\n                embedHash={currentOrder.embedHash}\n                embedId={currentOrder.embedId}\n              />\n            ) : null}\n          </Col>\n        </Row>\n        <Row>\n          <Col size={2}>\n            <div style={{ marginBottom: 10 }}>\n              <Header type=\"secondary\">{t(\"Other orders in project\")}</Header>\n            </div>\n            <OrderList\n              noResultsText=\"Ingen andre ordre i prosjektet\"\n              orders={ordersInSameProject}\n              columns={[\n                \"id\",\n                \"projectName\",\n                \"status\",\n                \"delivery\",\n                \"constructionName\",\n              ]}\n            />\n          </Col>\n\n          <Col size={1}>\n            <div style={{ marginBottom: 10 }}>\n              <Header type=\"secondary\">{t(\"Documents\")}</Header>\n            </div>\n            {currentOrder.valueChainStatus === 0 && (\n              <LinkButton\n                as=\"a\"\n                onClick={() => actions.promptFileUpload(currentOrder.projectId)}\n              >\n                Legg til\n              </LinkButton>\n            )}\n            <DocumentList documents={currentOrder.documents} />\n          </Col>\n        </Row>\n      </Grid>\n      {fileUploadModal.isCurrent ? <FileUploadModal /> : null}\n      {precutModal.isCurrent ? <PrecutModal /> : null}\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\n\nimport { Grid, Row, Col } from \"@frontend/common/src/elements/Grid/Grid\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { formatDate } from \"@frontend/common/src/helpers/date\";\nimport { PhoneLink } from \"@frontend/common/src/components/PhoneLink/PhoneLink\";\nimport { Page as PageConstants } from \"@frontend/common/src/types/Page\";\nimport { Link } from \"../../../elements/Link/Link\";\n\nimport { DocumentList } from \"../../../components/DocumentList/DocumentList\";\nimport { OrderList } from \"../../../components/OrderList/OrderList\";\n\nimport {\n  DetailsBox,\n  Legend,\n  Text,\n  Group,\n} from \"../../../components/DetailsBox/DetailsBox\";\nimport { SketchFabEmbed } from \"../../../components/SketchFabEmbed/SketchFabEmbed\";\nimport { useActions, useAppState } from \"../../../overmind\";\nimport { Header } from \"../../../elements/Header/Header\";\nimport { formatMoney } from \"../../../helpers/money\";\nimport {\n  BlockButton,\n  LinkButton,\n} from \"../../../components/Buttons/Buttons.styles\";\nimport { router } from \"../../../overmind/effects\";\nimport { createUrl } from \"../../../app/pages\";\nimport { FileUploadModal } from \"../../../modals/FileUploadModal/FileUploadModal\";\nimport { getDeliveryDateText } from \"../../../helpers/order\";\n\nexport const ViewOrderProjectPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const actions = useActions();\n  const {\n    customerEmployees,\n    orders,\n    customer,\n    modals: { fileUploadModal },\n  } = useAppState();\n\n  const { currentOrderProject } = orders;\n  if (!currentOrderProject) {\n    return <div>{t(\"Loading\")}</div>;\n  }\n\n  const customerContactPerson = customerEmployees.find(\n    (e) => e.id === currentOrderProject.customerEmployeeId\n  );\n\n  const projectSum =\n    currentOrderProject.subProjects.length > 0\n      ? currentOrderProject.subProjects\n          .map((o) => o.sum)\n          .reduce((sum, val) => sum + val)\n      : 0;\n  const onNewOrderClicked = async () => {\n    await actions.orders.getOrderAutofill({\n      customerId: customer.id,\n      offerId: currentOrderProject.id,\n    });\n    actions.orders.setOrderConverted(true);\n    router.navigateTo(\n      createUrl(PageConstants.CREATE_ORDER, { slug: \"kundeinfo\" })\n    );\n  };\n  return (\n    <Page title={`Prosjekt #${currentOrderProject.id}`}>\n      <Grid>\n        <Row>\n          <Col size={1}>\n            <DetailsBox>\n              <tbody>\n                <Group>\n                  <Legend>{t(\"Created\")}</Legend>\n                  <Text>{formatDate(currentOrderProject.orderDate)}</Text>\n                </Group>\n\n                <Group>\n                  <Legend>Prosjektnavn</Legend>\n                  <Text>{currentOrderProject.projectName}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Status\")}</Legend>\n                  <Text>{currentOrderProject.status}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Customer order no\")}</Legend>\n                  <Text>\n                    {currentOrderProject.customerOrderNumber || \"Ikke satt\"}\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Customer ref.\")}</Legend>\n                  <Text>\n                    {customerContactPerson\n                      ? customerContactPerson.name\n                      : \"Ikke satt\"}\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Delivery terms\")}</Legend>\n                  <Text>{currentOrderProject.deliveryTerms}</Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Delivery addr.\")}</Legend>\n                  {currentOrderProject.deliveryAddress.toLowerCase() ===\n                  \"avhentet\" ? (\n                    <Text>Avhentet</Text>\n                  ) : (\n                    <Text>\n                      <Link\n                        target=\"_blank\"\n                        href={`https://www.google.no/maps/search/${encodeURI(\n                          currentOrderProject.deliveryAddress\n                        )}`}\n                      >\n                        {currentOrderProject.deliveryAddress}\n                      </Link>\n                    </Text>\n                  )}\n                </Group>\n                <Group>\n                  <Legend>{t(\"Project price\")}</Legend>\n                  <Text>{formatMoney(projectSum)}</Text>\n                </Group>\n              </tbody>\n            </DetailsBox>\n          </Col>\n          <Col size={1}>\n            <DetailsBox>\n              <tbody>\n                <Group>\n                  <Legend>{t(\"Constructor\")}</Legend>\n                  <Text>{currentOrderProject.constructionName}</Text>\n                </Group>\n\n                <Group>\n                  <Legend>{t(\"Site phone\")}</Legend>\n                  <Text>\n                    <PhoneLink\n                      number={currentOrderProject.constructionContactPhone}\n                    />\n                  </Text>\n                </Group>\n                <Group>\n                  <Legend>{t(\"Site contact\")}</Legend>\n                  <Text>{currentOrderProject.constructionContactName}</Text>\n                </Group>\n                <Group>\n                  <Legend>Ønsket leveringsdato</Legend>\n                  <Text>{getDeliveryDateText(currentOrderProject)}</Text>\n                </Group>\n              </tbody>\n            </DetailsBox>\n            {currentOrderProject.valueChainStatus === 1 && (\n              <BlockButton\n                style={{\n                  width: \"33%\",\n                  height: \"25%\",\n                  fontSize: \"1rem\",\n                  padding: \"10px 0\",\n                }}\n                onClick={() => onNewOrderClicked()}\n              >\n                {\" \"}\n                Sett tilbud til ordre{\" \"}\n              </BlockButton>\n            )}\n            {currentOrderProject.valueChainStatus === 4 && (\n              <BlockButton\n                style={{\n                  width: \"33%\",\n                  height: \"25%\",\n                  fontSize: \"1rem\",\n                  padding: \"10px 0\",\n                }}\n              >\n                {\" \"}\n                Godkjenn ordre{\" \"}\n              </BlockButton>\n            )}\n          </Col>\n\n          <Col size={1}>\n            {currentOrderProject.embedId ? (\n              <SketchFabEmbed\n                embedHash={currentOrderProject.embedHash}\n                embedId={currentOrderProject.embedId}\n              />\n            ) : null}\n          </Col>\n        </Row>\n        <Row>\n          <Col size={2}>\n            <div style={{ marginBottom: 10 }}>\n              <Header type=\"secondary\">{t(\"Orders in project\")}</Header>\n            </div>\n            <OrderList\n              noResultsText=\"Ingen ordre i prosjektet\"\n              orders={currentOrderProject.subProjects}\n              columns={[\n                \"id\",\n                \"projectName\",\n                \"status\",\n                \"delivery\",\n                \"constructionName\",\n              ]}\n            />\n          </Col>\n          <Col size={1}>\n            <div style={{ marginBottom: 10 }}>\n              <Header type=\"secondary\" style={{ display: \"inline\" }}>\n                {t(\"Documents\")}\n              </Header>\n              {currentOrderProject.valueChainStatus === 0 && (\n                <LinkButton\n                  as=\"a\"\n                  onClick={() =>\n                    actions.promptFileUpload(currentOrderProject.id)\n                  }\n                >\n                  Legg til\n                </LinkButton>\n              )}\n            </div>\n            <DocumentList documents={currentOrderProject.documents} />\n          </Col>\n        </Row>\n      </Grid>\n      {fileUploadModal.isCurrent ? <FileUploadModal /> : null}\n    </Page>\n  );\n};\n","import React, { FunctionComponent, ReactChild } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page as PageConstants } from \"@frontend/common/src/types/Page\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { createUrl } from \"../../../app/pages\";\n// Elements\nimport { useAppState } from \"../../../overmind\";\nimport { CreateOrderSteps } from \"../../../types/CreateOrderSteps\";\nimport { BreadCrumbs } from \"../../../components/BreadCrumbs/BreadCrumbs\";\nimport { CustomerInformation } from \"./CustomerInformation\";\nimport { ChooseProductPage } from \"../ChooseProductPage/ChooseProductPage\";\n\nimport { Attachments } from \"../ChooseProductPage/Attachments\";\nimport { Summary } from \"../ChooseProductPage/Summary\";\nimport { Receipt } from \"../ChooseProductPage/Receipt\";\n\nimport { SelectionGridModal } from \"../../../modals/SelectionGridModal/SelectionGridModal\";\nimport { ChooseProjectType } from \"./ChooseProjectType\";\n\nconst createSteps = (t: any, lastCompletedOrderStep: number) => {\n  const steps: {\n    // eslint-disable-next-line no-unused-vars\n    [key in CreateOrderSteps]: {\n      title: string;\n      component: ReactChild;\n      slug: string;\n    };\n  } = {\n    [CreateOrderSteps.PROJECT_TYPE]: {\n      title: \"Start\",\n      component: <ChooseProjectType />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.PROJECT_TYPE\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"velg\" })\n          : \"#\",\n    },\n    [CreateOrderSteps.CUSTOMER_INFO]: {\n      title: t(\"Kundeinfo\"),\n      component: <CustomerInformation />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.CUSTOMER_INFO\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"kundeinfo\" })\n          : \"#\",\n    },\n    [CreateOrderSteps.CHOOSE_PRODUCT]: {\n      title: t(\"Produktvalg\"),\n      component: <ChooseProductPage />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.CHOOSE_PRODUCT\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"produktvalg\" })\n          : \"#\",\n    },\n    [CreateOrderSteps.ATTACHMENTS]: {\n      title: t(\"Vedlegg\"),\n      component: <Attachments />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.ATTACHMENTS\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"vedlegg\" })\n          : \"#\",\n    },\n    [CreateOrderSteps.SUMMARY]: {\n      title: t(\"Oppsummering\"),\n      component: <Summary />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.SUMMARY\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"oppsummering\" })\n          : \"#\",\n    },\n    [CreateOrderSteps.RECEIPT]: {\n      title: t(\"Kvittering\"),\n      component: <Receipt />,\n      slug:\n        lastCompletedOrderStep >= CreateOrderSteps.RECEIPT\n          ? createUrl(PageConstants.CREATE_ORDER, { slug: \"kvittering\" })\n          : \"#\",\n    },\n  };\n\n  return steps;\n};\n\nexport const CreateOrderPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const {\n    orders,\n    activeCreateOrderStep,\n    modals: { selectionGridModal },\n  } = useAppState();\n  const steps = createSteps(t, orders.lastCompletedOrderStep);\n\n  return (\n    <>\n      <Page\n        title={\n          activeCreateOrderStep === 0\n            ? \"Nytt prosjekt\"\n            : orders.isQuote\n            ? \"Ny forespørsel\"\n            : \"Ny bestilling\"\n        }\n        headerItems={\n          <BreadCrumbs\n            steps={Object.values(steps)}\n            activeStep={activeCreateOrderStep}\n          />\n        }\n      >\n        <div>{steps[activeCreateOrderStep].component}</div>\n      </Page>\n      {selectionGridModal.isCurrent ? <SelectionGridModal /> : null}\n    </>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { UpdateCustomerEmployee } from \"@frontend/common/src/types/CustomerEmployee\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { UserForm } from \"../../components/forms/UserForm/UserForm\";\nimport { useActions, useAppState } from \"../../overmind\";\n\nexport const UserPage: FunctionComponent = () => {\n  const state = useAppState();\n  const actions = useActions();\n\n  if (!state.currentEmployee) {\n    return <Page title=\"\">Fant ikke bruker...</Page>;\n  }\n\n  const onSubmitData = (data: UpdateCustomerEmployee) => {\n    // eslint-disable-next-line no-param-reassign\n    data.id = state.currentEmployee.id;\n    actions.changeCustomerEmployee(data);\n  };\n\n  return (\n    <Page\n      title={`#${state.currentEmployee.id} - ${state.currentEmployee.name}`}\n    >\n      <UserForm\n        customerEmployee={state.currentEmployee}\n        onSubmit={onSubmitData}\n      />\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { BlockButton } from \"@frontend/common/src/elements/Buttons/Buttons.styles\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { UserList } from \"../../components/UserList/UserList\";\nimport { Grid, Row, Col } from \"../../elements/Grid/Grid\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport { CompanyForm } from \"./components/CompanyForm/CompanyForm\";\nimport { EditEmployeeModal } from \"../../modals/EditEmployeeModal/EditEmployeeModal\";\nimport { SalesPersonBox } from \"../../components/SalesPersonBox/SalesPersonBox\";\n\nexport const CompanyPage: FunctionComponent = () => {\n  const state = useAppState();\n  const actions = useActions();\n\n  const { t } = useTranslation();\n\n  return (\n    <Page\n      title={t(\"My profile - {{companyName}}\", {\n        companyName: state.customer.name,\n      })}\n    >\n      <Grid>\n        <Row>\n          <Col size={1}>\n            <CompanyForm />\n            <SalesPersonBox employeeId={state.customer.salesPersonId} />\n          </Col>\n          <Col size={1}>\n            <BlockButton\n              onClick={() => actions.onEditEmployee()}\n              style={{\n                width: \"100%\",\n                maxWidth: \"11rem\",\n                padding: \"0.5rem\",\n                fontSize: \"1rem\",\n                marginBottom: \"1rem\",\n              }}\n            >\n              Ny kontaktperson\n            </BlockButton>\n            <UserList\n              users={state.customerEmployees.filter((e) => e.hasQuit === false)}\n              onRowSelected={(customerEmployee) => {\n                actions.onEditEmployee(customerEmployee.id);\n              }}\n            />\n          </Col>\n        </Row>\n      </Grid>\n\n      {state.modals.editEmployeeModal.isCurrent ? <EditEmployeeModal /> : null}\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { CMSArticles } from \"@frontend/common/src/types/CMSArticle\";\nimport { CMSContent } from \"../../components/CMSContent/CMSContent\";\n\nexport const DocumentationPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  return (\n    <Page title={t(\"Documentation\")}>\n      <CMSContent contentId={CMSArticles.DOCUMENTATION} />\n    </Page>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Page } from \"@frontend/common/src/elements/Page/Page\";\nimport { useAppState } from \"../../overmind\";\n\nexport const ErrorPage: FunctionComponent = () => {\n  const { t } = useTranslation();\n  const state = useAppState();\n\n  return <Page title={t(\"Error\")}>{state.error && state.error.message}</Page>;\n};\n","import {\n  BIV,\n  ExtendedPrecut,\n  ExtendedPrecutBackend,\n} from \"../types/DraftOrder/ExtendedPrecut\";\n\nconst stringCheck = (str: string): boolean => {\n  return str !== null && str !== \"\";\n};\nconst mapBiv = (\n  stender?: string,\n  toppsvill?: string,\n  bunnsvill?: string\n): BIV | null => {\n  if (\n    stringCheck(stender) ||\n    stringCheck(toppsvill) ||\n    stringCheck(bunnsvill)\n  ) {\n    return {\n      dimStender: stender,\n      dimToppsvill: toppsvill,\n      dimBunnsvill: bunnsvill,\n    };\n  }\n  return null;\n};\n\nexport const mapToBackend = (plans: ExtendedPrecut[]) => {\n  const backendList = plans.map((x) => {\n    const backendObj: ExtendedPrecutBackend = {\n      bruttoVegghoyde: x.bruttoVegghoyde,\n      hoydeOverkantApning: x.hoydeOverkantApning,\n      dimensjonToppsvill: x.dimensjonToppsvill,\n      dimensjonStender: x.dimensjonStender,\n      dimensjonBunnsvill: x.dimensjonBunnsvill,\n      klaringTilKarm: x.klaringTilKarm,\n      name: x.name,\n      projectId: x.projectId,\n      biv: [],\n    };\n    const biv1 = mapBiv(x.biv1, x.dimToppsvill1, x.dimBunnsvill1);\n    if (biv1 !== null) {\n      backendObj.biv.push(biv1);\n    }\n    const biv2 = mapBiv(x.biv2, x.dimToppsvill2, x.dimBunnsvill2);\n    if (biv2 !== null) {\n      backendObj.biv.push(biv2);\n    }\n    const biv3 = mapBiv(x.biv3, x.dimToppsvill3, x.dimBunnsvill3);\n    if (biv3 !== null) {\n      backendObj.biv.push(biv3);\n    }\n    return backendObj;\n  });\n  return JSON.stringify(backendList);\n};\n","/* eslint-disable no-param-reassign */\nimport { CreateEmployeeMessage } from \"@frontend/common/src/types/EmployeeMessage\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { UpdateCustomerEmployee } from \"@frontend/common/src/types/CustomerEmployee\";\nimport { Customer } from \"@frontend/common/src/types/Customer\";\nimport { UserType } from \"@frontend/common/src/types/User\";\n\nimport { Context } from \".\";\nimport { getNavigationRoute } from \"../app/pages\";\nimport { mapToBackend } from \"../helpers/ExtendedPrecutHelper\";\nimport { ExtendedPrecut } from \"../types/DraftOrder/ExtendedPrecut\";\n// import { OnInitialize } from \"./index\";\n\nexport const onContactPerson = async (\n  { actions, effects, state }: any,\n  createEmployeeMessage: CreateEmployeeMessage\n) => {\n  const message = await actions.modals.sendMessageModal.open({\n    userId: createEmployeeMessage.employeeId,\n  });\n  createEmployeeMessage.loggedInEmail = state.auth.user.username;\n  if (message && message.length) {\n    createEmployeeMessage.message = message;\n    try {\n      await effects.api.employees.sendMessage(\n        createEmployeeMessage,\n        state.customer.id\n      );\n      effects.toast(\"Melding sendt\", 5000);\n    } catch (error) {\n      effects.toast(error, 5000);\n    }\n  }\n};\nexport const emulateEmployee = async (\n  { state, effects }: Context,\n  emulation: { customerId: string; customerEmployeeId: string }\n) => {\n  state.currentEmployeeId = emulation.customerEmployeeId;\n  state.customer = await effects.api.customer.getById(emulation.customerId);\n  state.customerEmployees =\n    await effects.api.customerEmployee.getAllForCustomerId(\n      emulation.customerId\n    );\n  state.auth.user.emulatedType = UserType.COMPANY;\n};\n\nexport const emulateCustomer = async (\n  { state, effects }: Context,\n  customerId: string\n) => {\n  state.customer = await effects.api.customer.getById(customerId);\n  state.customerEmployees =\n    await effects.api.customerEmployee.getAllForCustomerId(customerId);\n  state.auth.user.emulatedType = UserType.COMPANY;\n};\nexport const onEditEmployee = async (\n  { actions }: Context,\n  employeeId: string\n) => {\n  actions.modals.editEmployeeModal.open({ employeeId });\n};\nexport const onPrecutForm = async (\n  { actions }: Context,\n  formInfo: { projectId: string; openedFromProjectPage: boolean }\n) => {\n  const form = await actions.modals.precutModal.open({\n    projectId: formInfo.projectId,\n  });\n  if (formInfo.openedFromProjectPage) {\n    if (form !== null) {\n      console.log(mapToBackend(form as ExtendedPrecut[]));\n    }\n\n    // post directly\n  } else if (form !== null) {\n    console.log(mapToBackend(form as ExtendedPrecut[]));\n  }\n};\n\nexport const promptFileUpload = async (\n  { actions, effects, state }: any,\n  projectId: string\n) => {\n  const files = await actions.modals.fileUploadModal.open({});\n  if (files && files.length) {\n    try {\n      await effects.api.order.addFiles(projectId, files, state.customer.id);\n      effects.toast(\"Filer er lastet opp\", 5000);\n      const docs = await effects.api.order.getDocumentsForOrder(\n        state.customer.id,\n        projectId\n      );\n      if (state.orders.currentOrder !== undefined) {\n        state.orders.currentOrder.documents = docs;\n      } else {\n        state.orders.currentOrderProject.documents = docs;\n      }\n    } catch (error) {\n      effects.toast(\"Feil ved opplasting\", 5000);\n    }\n  }\n};\n\nexport const openSelectionGridModal = async (\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  { actions, effects, state }: Context,\n  params: { items: any[]; onSelected: (item: any) => void }\n) => {\n  const { items, onSelected } = params;\n  const selectedItem = await actions.modals.selectionGridModal.open({ items });\n\n  if (selectedItem && onSelected) {\n    onSelected(selectedItem);\n  }\n};\n\nexport const changeUserActive = async (\n  { state, effects }: Context,\n  params: { userId: string; activeState: boolean }\n) => {\n  const employee = state.customerEmployees.find((c) => c.id === params.userId);\n  employee.active = params.activeState;\n  try {\n    await effects.api.customerEmployee.update(\n      state.customer.id,\n      {\n        ...employee,\n      },\n      state.auth.user.username\n    );\n    state.customerEmployees =\n      await effects.api.customerEmployee.getAllForCustomerId(state.customer.id);\n  } catch (errorMessage: any) {\n    effects.toast(errorMessage, 5000);\n  }\n};\n\nexport const changeCustomer = async (\n  { state, effects }: Context,\n  customer: Customer\n) => {\n  try {\n    await effects.api.customer.updateCustomer(customer);\n\n    state.customer = {\n      ...state.customer,\n      ...customer,\n    };\n    effects.toast(\"Lagret\", 5000);\n  } catch (errorMessage: any) {\n    effects.toast(errorMessage, 5000);\n  }\n};\n\nexport const changeCustomerEmployee = async (\n  { state, effects }: Context,\n  customerEmployee: UpdateCustomerEmployee\n) => {\n  try {\n    await effects.api.customerEmployee.update(\n      state.customer.id,\n      customerEmployee,\n      state.auth.user.username\n    );\n    state.customerEmployees =\n      await effects.api.customerEmployee.getAllForCustomerId(state.customer.id);\n    effects.toast(\"Lagret\", 5000);\n  } catch (errorMessage: any) {\n    effects.toast(errorMessage, 5000);\n  }\n};\n\nexport const createCustomerEmployee = async (\n  { state, effects }: Context,\n  customerEmployee: UpdateCustomerEmployee\n) => {\n  try {\n    await effects.api.customerEmployee.create(\n      state.customer.id,\n      customerEmployee\n    );\n    state.customerEmployees =\n      await effects.api.customerEmployee.getAllForCustomerId(state.customer.id);\n    effects.toast(\"Opprettet!\", 5000);\n  } catch (errorMessage: any) {\n    effects.toast(errorMessage, 5000);\n  }\n};\n\nexport const onInitializeOvermind = async ({\n  state,\n  actions,\n  effects,\n}: Context) => {\n  const cms = await effects.cms.fetch(\n    \"https://www.pretre.no/kundeportal/?xml=document\"\n  );\n  state.cms = cms;\n\n  state.isInitialLoadComplete = true;\n\n  const { router } = effects;\n\n  router.route(getNavigationRoute(Page.HOME), actions.navigation.openHome);\n  router.route(\n    getNavigationRoute(Page.TECHNICAL_SERVICES),\n    actions.navigation.openTechnicalServices\n  );\n  router.route(getNavigationRoute(Page.LOGIN), actions.navigation.openLogin);\n  router.route(\n    getNavigationRoute(Page.RESET_PASSWORD),\n    actions.navigation.openForgotPassword\n  );\n  router.route(\n    getNavigationRoute(Page.ORDER_LIST),\n    actions.navigation.openOrderList\n  );\n  router.route(\n    getNavigationRoute(Page.VIEW_ORDER),\n    actions.navigation.openViewOrder\n  );\n  router.route(\n    getNavigationRoute(Page.VIEW_ORDER_PROJECT),\n    actions.navigation.openViewOrderProject\n  );\n  router.route(\n    getNavigationRoute(Page.CREATE_ORDER),\n    actions.navigation.openCreateOrderStep\n  );\n  router.route(getNavigationRoute(Page.USER), actions.navigation.openUser);\n  router.route(\n    getNavigationRoute(Page.COMPANY),\n    actions.navigation.openCompanyPage\n  );\n  router.route(\n    getNavigationRoute(Page.DOCUMENTATION),\n    actions.navigation.openDocumentationPage\n  );\n  router.route(getNavigationRoute(Page.EMULATE), actions.navigation.emulate);\n  router.route(getNavigationRoute(Page.AUTH), actions.navigation.auth);\n  router.route(\n    getNavigationRoute(Page.CUSTOMER_SELECTOR),\n    actions.navigation.openCompanySelector\n  );\n  try {\n    router.start();\n  } catch (error) {\n    console.error(error);\n  }\n};\n","/* eslint-disable no-param-reassign */\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { Context } from \"..\";\nimport { CreateOrderSteps } from \"../../types/CreateOrderSteps\";\nimport { createUrl } from \"../../app/pages\";\n\nexport const openLogin = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.LOGIN;\n};\n\nexport const openForgotPassword = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.RESET_PASSWORD;\n};\n\nexport const openHome = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.HOME;\n};\n\nexport const openTechnicalServices = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.TECHNICAL_SERVICES;\n};\n\nexport const openOrderList = async (\n  { state, effects }: Context,\n  routeArgs: any\n) => {\n  const url = createUrl(Page.ORDER_LIST);\n  effects.persistentCache.set(\"returnUrl\", url);\n  if (state.mesterIdLogin && state.customer == null) {\n    effects.router.navigateTo(createUrl(Page.CUSTOMER_SELECTOR));\n  } else {\n    state.navigation.currentPage = Page.ORDER_LIST;\n\n    if (routeArgs.params && routeArgs.params.side) {\n      state.orders.currentPage = parseInt(routeArgs.params.side, 10);\n    } else {\n      state.orders.currentPage = 1;\n    }\n\n    try {\n      state.orders.isFetching = true;\n      state.orders.orders = await effects.api.order.getAllForCustomerId(\n        state.customer.id\n      );\n      state.orders.isFetching = false;\n    } catch (error) {\n      console.log(error);\n    }\n  }\n};\n\nexport const openViewOrder = async (\n  { state, effects }: Context,\n  routeArgs: any\n) => {\n  state.navigation.currentPage = Page.VIEW_ORDER;\n  state.orders.currentOrderId = routeArgs.params.id;\n\n  try {\n    let projectId = routeArgs.params.id;\n    if (projectId.includes(\"_\")) {\n      // eslint-disable-next-line prefer-destructuring\n      projectId = projectId.split(\"_\")[0];\n    }\n    let customerId = state.customer?.id;\n    if (customerId === undefined) {\n      const proj = await effects.api.order.getByIdWithoutCustomer(projectId);\n      customerId = proj.customerNumber;\n\n      const customer = state.mesterIdCustomers.find((x) => x.id === customerId);\n      state.customer = { ...customer };\n      state.customerEmployees =\n        await effects.api.customerEmployee.getAllForCustomerId(customer.id);\n    }\n    state.orders.orders = await effects.api.order.getAllForCustomerId(\n      customerId\n    );\n\n    if (!state.orders.orders.find((order) => order.id === projectId)) {\n      state.error = { message: \"Fant ikke ordre\" };\n      state.navigation.currentPage = Page.ERROR;\n    } else {\n      state.orders.currentOrder.documents =\n        await effects.api.order.getDocumentsForOrder(customerId, projectId);\n    }\n  } catch (error) {\n    const cast = error as string;\n    if (cast.includes(\"401\")) {\n      const url = createUrl(Page.VIEW_ORDER, {\n        id: routeArgs.params.id,\n      });\n      effects.persistentCache.set(\"returnUrl\", url);\n    }\n    console.log(error);\n  }\n};\n\nexport const openViewOrderProject = async (\n  { state, effects }: Context,\n  routeArgs: any\n) => {\n  if (state.auth.user === null) {\n    effects.router.navigateTo(createUrl(Page.HOME));\n    return;\n  }\n\n  state.navigation.currentPage = Page.VIEW_ORDER_PROJECT;\n  state.orders.currentOrderProjectId = routeArgs.params.id;\n  try {\n    let projectId = routeArgs.params.id;\n    if (projectId.includes(\"_\")) {\n      // eslint-disable-next-line prefer-destructuring\n      projectId = projectId.split(\"_\")[0];\n    }\n    let customerId = state.customer?.id;\n    if (customerId === undefined) {\n      const proj = await effects.api.order.getByIdWithoutCustomer(projectId);\n      customerId = proj.customerNumber;\n\n      const customer = state.mesterIdCustomers.find((x) => x.id === customerId);\n      state.customer = { ...customer };\n      state.customerEmployees =\n        await effects.api.customerEmployee.getAllForCustomerId(customer.id);\n    }\n    state.orders.orders = await effects.api.order.getAllForCustomerId(\n      customerId\n    );\n    if (\n      !state.orders.orders.find(\n        (order) => order.id === state.orders.currentOrderProjectId\n      )\n    ) {\n      state.error = { message: \"Fant ikke ordre\" };\n      state.navigation.currentPage = Page.ERROR;\n    } else {\n      const documents = await effects.api.order.getDocumentsForOrder(\n        customerId,\n        state.orders.currentOrderProjectId\n      );\n      state.orders.currentOrderProject.documents = documents;\n    }\n  } catch (error) {\n    const cast = error as string;\n    if (cast.includes(\"401\")) {\n      const url = createUrl(Page.VIEW_ORDER_PROJECT, {\n        id: routeArgs.params.id,\n      });\n      effects.persistentCache.set(\"returnUrl\", url);\n    }\n    console.log(error);\n  }\n};\n\nexport const openCreateOrderStep = async (\n  { state, effects, actions }: Context,\n  routeArgs: any\n) => {\n  if (state.mesterIdLogin && state.customer == null) {\n    effects.router.navigateTo(createUrl(Page.CUSTOMER_SELECTOR));\n  } else {\n    // eslint-disable-next-line no-shadow\n    const steps: { [index: string]: any } = {\n      velg: CreateOrderSteps.PROJECT_TYPE,\n      velgny: CreateOrderSteps.PROJECT_TYPE,\n      kundeinfo: CreateOrderSteps.CUSTOMER_INFO,\n      produktvalg: CreateOrderSteps.CHOOSE_PRODUCT,\n      vedlegg: CreateOrderSteps.ATTACHMENTS,\n      oppsummering: CreateOrderSteps.SUMMARY,\n      kvittering: CreateOrderSteps.RECEIPT,\n    };\n    state.navigation.currentPage = Page.CREATE_ORDER;\n    // eslint-disable-next-line no-prototype-builtins\n    if (routeArgs.params.slug && steps.hasOwnProperty(routeArgs.params.slug)) {\n      if (routeArgs.params.slug === \"velgny\") {\n        actions.orders.clearAutofillAndDraftOrder();\n      }\n      state.activeCreateOrderStep = steps[routeArgs.params.slug];\n      if (state.activeCreateOrderStep > state.orders.lastCompletedOrderStep) {\n        state.orders.lastCompletedOrderStep = state.activeCreateOrderStep;\n      }\n    } else {\n      // eslint-disable-next-line no-multi-assign\n      state.activeCreateOrderStep = state.orders.lastCompletedOrderStep = 0;\n    }\n  }\n};\n\nexport const openUser = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.USER;\n};\n\nexport const openCompanyPage = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.COMPANY;\n};\n\nexport const openDocumentationPage = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.DOCUMENTATION;\n};\n\nexport const emulate = async ({ effects, state }: Context, routeArgs: any) => {\n  const { customerId } = routeArgs.params;\n  effects.tokenService.clear();\n  state.customer = null;\n  state.currentEmployeeId = null;\n  state.auth.user = null;\n  effects.persistentCache.set(\"customerId\", customerId);\n  effects.router.navigateTo(createUrl(Page.LOGIN));\n};\n\nexport const auth = async ({ state }: Context) => {\n  state.navigation.currentPage = Page.AUTH;\n};\n\nexport const openCompanySelector = async ({ state, effects }: Context) => {\n  if (state.mesterIdLogin && state.mesterIdCustomers.length > 1) {\n    state.navigation.currentPage = Page.CUSTOMER_SELECTOR;\n  } else {\n    effects.router.navigateTo(createUrl(Page.ORDER_LIST));\n  }\n};\n","import { Page } from \"@frontend/common/src/types/Page\";\n\nexport type State = {\n  currentPage: Page;\n};\n\nexport const state: State = {\n  currentPage: Page.ADMIN,\n};\n","/* eslint-disable no-param-reassign */\nimport jwt_decode from \"jwt-decode\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { User, UserRole, UserType } from \"@frontend/common/src/types/User\";\nimport { LoginCredentials } from \"@frontend/common/src/types/LoginCredentials\";\nimport { createUrl } from \"../../app/pages\";\n\nimport { Context } from \"..\";\n\nconst dataOwner = process.env.REACT_APP_AUTH0_ADMINLOCATION;\n\nexport const login = async (\n  { effects, actions }: Context,\n  credentials: LoginCredentials\n) => {\n  try {\n    const token = await effects.api.auth.login(\n      credentials.username,\n      credentials.password\n    );\n    if (token) {\n      await actions.auth.onLoggedIn(token);\n      if (effects.persistentCache.get(\"returnUrl\")) {\n        const returnUrl = effects.persistentCache.get(\"returnUrl\");\n        effects.persistentCache.remove(\"returnUrl\");\n        effects.router.navigateTo(returnUrl);\n      } else {\n        effects.router.navigateTo(createUrl(Page.ORDER_LIST));\n      }\n    } else {\n      effects.toast(\"Innlogging feilet\");\n    }\n  } catch (errorMessage: any) {\n    effects.toast(errorMessage, 5000);\n  }\n};\n\n// called on successfull login\nexport const onLoggedIn = async (\n  { state, effects }: Context,\n  token: string\n) => {\n  const decodedToken: {\n    customerId: string;\n    nameid: string;\n    unique_name: string;\n    role: UserRole;\n    type: UserType;\n  } = jwt_decode(token);\n\n  const user: User = {\n    id: decodedToken.nameid,\n    customerId: decodedToken.customerId, // parseInt(decodedToken.customerId, 10),\n    username: decodedToken.unique_name,\n    role: decodedToken.role,\n    type: decodedToken.type,\n    isAdmin: decodedToken.role === UserRole.ADMIN,\n  };\n  state.auth.token = token;\n  effects.tokenService.set(token);\n\n  state.customer = await effects.api.customer.getById(user.customerId);\n  state.pretreEmplyees = await effects.api.employees.getAll();\n  state.customerEmployees =\n    await effects.api.customerEmployee.getAllForCustomerId(user.customerId);\n\n  const lookups = await effects.api.lookups.getLookups();\n  state.buildingTypes = lookups.buildingTypes;\n  state.technicalServices = lookups.technicalServices;\n  state.offerOptions = lookups.offerOptions;\n  state.mesterIdLogin = false;\n  state.auth.user = user;\n  if (user.type === UserType.EMPLOYEE) {\n    state.currentEmployeeId = user.id;\n  }\n  if (effects.persistentCache.get(\"returnUrl\")) {\n    const returnUrl = effects.persistentCache.get(\"returnUrl\");\n    effects.persistentCache.remove(\"returnUrl\");\n    effects.router.navigateTo(returnUrl);\n  } else {\n    effects.router.navigateTo(createUrl(Page.ORDER_LIST));\n  }\n};\n\nexport const mockLoginWithToken = async (\n  { actions }: Context,\n  token: string\n) => {\n  await actions.auth.onLoggedIn(token);\n};\n\nexport const logout = async ({ state, effects }: Context) => {\n  try {\n    effects.tokenService.clear();\n\n    state.customer = null;\n    state.currentEmployeeId = null;\n    state.auth.user = null;\n\n    // effects.router.navigateTo(createUrl(Page.LOGIN));\n    // perform hard navigate to clear state.\n    window.location.href = createUrl(Page.LOGIN);\n  } catch (error: any) {\n    alert(error.message);\n  }\n};\n\nexport const logoutMesterId = async ({ state, effects }: Context) => {\n  try {\n    effects.tokenService.clear();\n    state.customer = null;\n    state.currentEmployeeId = null;\n    state.auth.user = null;\n  } catch (error: any) {\n    alert(error.message);\n  }\n};\ninterface mesterIdLogin {\n  token: string;\n  username: string;\n}\nexport const onMesterIdLoggedIn = async (\n  { state, effects, actions }: Context,\n  { token, username }: mesterIdLogin\n) => {\n  try {\n    const decodedToken = jwt_decode(token);\n    actions.auth.updateToken(token);\n\n    let customer;\n    const customerId = effects.persistentCache.get(\"customerId\");\n    if (customerId !== undefined && customerId !== null) {\n      customer = await effects.api.customer.getById(customerId);\n    }\n    const customers = await effects.api.customer.getByToken();\n    if (customers.length < 1) {\n      effects.router.navigateTo(createUrl(Page.HOME));\n      throw new Error(\"Ingen kunde-tilgang. Ta kontakt med administrator\");\n    }\n    const user = await effects.api.customerEmployee.getByUserName(username);\n    state.mesterIdCustomers = customers;\n    state.pretreEmplyees = await effects.api.employees.getAll();\n    state.mesterIdLogin = true;\n    const lookups = await effects.api.lookups.getLookups();\n    state.buildingTypes = lookups.buildingTypes;\n    state.offerOptions = lookups.offerOptions;\n    state.technicalServices = lookups.technicalServices;\n    state.mesterIdLogin = true;\n    const { locations } =\n      // @ts-ignore\n      decodedToken[\"https://mestergruppen.no/authorization\"];\n    const stateUser: User = {\n      id: user.id,\n      customerId: customers[0].id,\n      username: user.email,\n      role: locations.includes(dataOwner) ? UserRole.ADMIN : UserRole.USER,\n      type: UserType.EMPLOYEE,\n      isAdmin: locations.includes(dataOwner),\n    };\n    state.auth.user = stateUser;\n    if (stateUser.type === UserType.EMPLOYEE) {\n      state.currentEmployeeId = user.id;\n    }\n    if (customer !== undefined && stateUser.isAdmin) {\n      effects.persistentCache.remove(\"customerId\");\n      state.mesterIdCustomers = [...state.mesterIdCustomers, customer];\n      state.customer = customer;\n      state.customerEmployees =\n        await effects.api.customerEmployee.getAllForCustomerId(customer.id);\n      effects.router.navigateTo(createUrl(Page.HOME));\n    } else if (customers.length === 1) {\n      // eslint-disable-next-line prefer-destructuring\n      state.customer = customers[0];\n      state.customerEmployees =\n        await effects.api.customerEmployee.getAllForCustomerId(customers[0].id);\n      if (effects.persistentCache.get(\"returnUrl\")) {\n        const returnUrl = effects.persistentCache.get(\"returnUrl\");\n        effects.persistentCache.remove(\"returnUrl\");\n        effects.router.navigateTo(returnUrl);\n      } else {\n        effects.router.navigateTo(createUrl(Page.HOME));\n      }\n    } else if (effects.persistentCache.get(\"returnUrl\")) {\n      const returnUrl = effects.persistentCache.get(\"returnUrl\");\n      effects.persistentCache.remove(\"returnUrl\");\n      effects.router.navigateTo(returnUrl);\n    } else {\n      effects.router.navigateTo(createUrl(Page.HOME));\n    }\n  } catch (error: any) {\n    effects.tokenService.clear();\n    effects.router.navigateTo(createUrl(Page.HOME));\n    effects.toast(error, 5000);\n  }\n};\n\nexport const onMesterIdSelectCustomer = async (\n  { state, effects }: Context,\n  customerId: string\n) => {\n  const customer = state.mesterIdCustomers.find((x) => x.id === customerId);\n  state.customer = { ...customer };\n  state.customerEmployees =\n    await effects.api.customerEmployee.getAllForCustomerId(customer.id);\n\n  if (effects.persistentCache.get(\"returnUrl\")) {\n    const returnUrl = effects.persistentCache.get(\"returnUrl\");\n    effects.persistentCache.remove(\"returnUrl\");\n    effects.router.navigateTo(returnUrl);\n  } else {\n    effects.router.navigateTo(createUrl(Page.HOME));\n  }\n};\nexport const forgotPassword = async (\n  { effects, actions }: Context,\n  credentials: { email: string }\n) => {\n  try {\n    await effects.api.auth.forgotPassword(credentials.email);\n    effects.toast(\"Nytt passord er sendt\");\n    actions.navigation.openLogin();\n  } catch (error: any) {\n    effects.toast(error, 5000);\n  }\n};\n\nexport const updateToken = ({ state, effects }: Context, newToken: string) => {\n  state.auth.token = null;\n  effects.tokenService.clear();\n  state.auth.token = newToken;\n  effects.tokenService.set(newToken);\n};\n","import { User } from \"@frontend/common/src/types/User\";\n\ntype State = {\n  token: string;\n  user: User;\n};\n\nexport const state: State = {\n  token: null,\n  user: null,\n};\n","export class FileUploadError extends Error {}\n","/* eslint-disable no-param-reassign */\nimport fileDownload from \"js-file-download\";\nimport { UserType } from \"@frontend/common/src/types/User\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { Context } from \"..\";\nimport { OrderFilter, OrderSortOption } from \"../../types/Order\";\nimport { Document } from \"../../types/Document\";\nimport { createUrl } from \"../../app/pages\";\nimport { DraftOrder } from \"../../types/DraftOrder/DraftOrder\";\nimport { CreateOrderSteps } from \"../../types/CreateOrderSteps\";\nimport { FileUploadError } from \"../../errors/FileUploadError\";\nimport { DraftOrderSubProject } from \"../../types/DraftOrder/DraftOrderSubProject\";\n\nexport const changeOrderFilter = async (\n  { state, effects }: Context,\n  change: OrderFilter\n) => {\n  state.orders.orderFilter = {\n    ...state.orders.orderFilter,\n    ...change,\n  };\n\n  effects.router.navigateTo(\n    createUrl(Page.ORDER_LIST, { side: state.orders.currentPage })\n  );\n};\n\nexport const clearOrderFilter = async ({ state }: Context) => {\n  state.orders.currentPage = 1;\n  state.orders.orderFilter = {\n    hideDeliveredOrders: true,\n    deliveryYear: null,\n    showOnlyMyOrdersAndProjects: state.auth.user.type === UserType.EMPLOYEE,\n  };\n};\n\nexport const downloadDocument = async (\n  { effects }: Context,\n  payload: docDownload\n) => {\n  const filename = `${payload.file.description}`;\n  const contents = await effects.api.order.getDocument(\n    payload.file.customerId,\n    payload.file.orderId,\n    filename\n  );\n  fileDownload(contents, payload.file.description);\n};\n\nexport const setSortOption = async (\n  { state }: Context,\n  option: OrderSortOption\n) => {\n  state.orders.currentOrderSortOption = option;\n};\nexport type docDownload = {\n  file: Document;\n};\n\nexport const openDocument = async (\n  { effects }: Context,\n  payload: docDownload\n) => {\n  const filename = `${payload.file.description}`;\n  const contents = await effects.api.order.getDocument(\n    payload.file.customerId,\n    payload.file.orderId,\n    filename\n  );\n  const fileX = new Blob([contents], { type: \"application/pdf;base64\" });\n  const fileURL = URL.createObjectURL(fileX);\n  window.open(fileURL);\n};\n\nexport const getOrderAutofill = async (\n  { state, effects }: Context,\n  params: { customerId: string; offerId: string }\n) => {\n  const data = await effects.api.order.getOrderFromOfferId(\n    params.customerId,\n    params.offerId\n  );\n  if (data) {\n    state.orders.autofill = {\n      ...data,\n      offerId: params.offerId,\n    } as DraftOrder;\n    state.orders.currentNewOrder = {\n      ...state.orders.currentNewOrder,\n    };\n  }\n};\n\nexport const commitDraftOrder = async (\n  { state, effects }: Context,\n  payload: {\n    customerId: string;\n    order: DraftOrder;\n    offerId?: string;\n  }\n) => {\n  try {\n    const orderId = await effects.api.order.commitDraftOrder(\n      payload.customerId,\n      payload.order,\n      state.auth.user.username,\n      payload?.offerId\n    );\n    state.orders.currentNewOrder.orderId = orderId;\n    effects.router.navigateTo(\n      createUrl(Page.CREATE_ORDER, { slug: \"kvittering\" })\n    );\n  } catch (error) {\n    effects.toast(error as string, 5000);\n  }\n};\n\nexport const commitSubProjs = async (\n  { state, effects }: Context,\n  payload: {\n    customerId: string;\n    order: DraftOrder;\n    projectId: string;\n    offerId?: string;\n  }\n) => {\n  try {\n    await effects.api.order.commitSubProjects(\n      payload.customerId,\n      payload.order,\n      state.auth.user.username,\n      payload.projectId,\n      payload?.offerId\n    );\n    const files = effects.localFileStorage.get();\n\n    if (files && files.length) {\n      try {\n        await effects.api.order.addFiles(\n          payload.projectId,\n          files,\n          payload.customerId\n        );\n        effects.localFileStorage.set(undefined);\n      } catch (error) {\n        effects.localFileStorage.set(undefined);\n        throw new FileUploadError();\n      }\n    }\n  } catch (e) {\n    if (e instanceof FileUploadError) {\n      effects.toast(\"Tilbud opprettet, men ikke alle filer ble sendt.\", 5000);\n    }\n  }\n};\n\nexport const updateDraftOrder = ({ state }: Context, payload: DraftOrder) => {\n  state.orders.currentNewOrder = {\n    ...state.orders.currentNewOrder,\n    ...payload,\n  };\n};\nexport const setSubProjectsOnDraftOrder = (\n  { state }: Context,\n  subProjects: DraftOrderSubProject[]\n) => {\n  state.orders.currentNewOrder = {\n    ...state.orders.currentNewOrder,\n    subProjects,\n  };\n  state.orders.autofill = {\n    ...state.orders.autofill,\n    subProjects: [],\n  };\n};\n\nexport const setQuotationOnDraftOrder = (\n  { state }: Context,\n  payload: { isQuotation: boolean; quickChoice?: string }\n) => {\n  state.orders.currentNewOrder = {\n    ...state.orders.currentNewOrder,\n    quotation: payload.isQuotation,\n  };\n  state.orders.isQuote = payload.isQuotation;\n  state.orders.quickChoice = payload.quickChoice;\n};\n\nexport const setOrderConverted = ({ state }: Context, payload: boolean) => {\n  state.orders.orderConverted = payload;\n};\n\nexport const setDraftOfferFiles = ({ effects }: Context, files: File[]) => {\n  effects.localFileStorage.set(files);\n};\n\nexport const cancelCreateOrder = ({ effects, state }: Context) => {\n  state.orders.currentNewOrder = {} as DraftOrder;\n  state.orders.autofill = null;\n  state.orders.lastCompletedOrderStep = CreateOrderSteps.CUSTOMER_INFO;\n  effects.router.navigateTo(createUrl(Page.HOME));\n};\n\nexport const clearAutofillAndDraftOrder = ({ state }: Context) => {\n  state.orders.currentNewOrder = {} as DraftOrder;\n  state.orders.autofill = null;\n  state.orders.lastCompletedOrderStep = CreateOrderSteps.PROJECT_TYPE;\n};\n","import {\n  MIN_ORDER_STATUS_WHEN_COMPLETED,\n  Order,\n  OrderFilter,\n} from \"../../../types/Order\";\n\nconst isset = (value: any) => value !== undefined && value !== null;\n\nexport function filterOrder(\n  order: Order,\n  filter: OrderFilter,\n  currentUserId: string\n) {\n  if (isset(filter.status) && order.valueChainStatus !== filter.status) {\n    return false;\n  }\n\n  if (isset(filter.projectId) && order.id !== filter.projectId) {\n    return false;\n  }\n\n  if (isset(filter.freeText)) {\n    const mainOrderContains = Object.values(order).some((x) => {\n      return (\n        x !== null &&\n        x !== undefined &&\n        x.toString().toLowerCase().indexOf(filter.freeText.toLowerCase()) > -1\n      );\n    });\n    if (mainOrderContains) {\n      return true;\n    }\n    return order.subProjects.some((or) => {\n      return Object.values(or).some((x) => {\n        return (\n          x !== null &&\n          x !== undefined &&\n          x.toString().toLowerCase().indexOf(filter.freeText.toLowerCase()) > -1\n        );\n      });\n    });\n  }\n\n  if (\n    isset(filter.projectName) &&\n    !`${order.projectName}`\n      .toLowerCase()\n      .includes(filter.projectName.toLowerCase())\n  ) {\n    return false;\n  }\n\n  if (\n    isset(filter.customerOrderNumber) &&\n    !order.customerOrderNumber\n      ?.toString()\n      .includes(filter.customerOrderNumber.toString())\n  ) {\n    return false;\n  }\n\n  if (\n    isset(filter.showOnlyMyOrdersAndProjects) &&\n    filter.showOnlyMyOrdersAndProjects === true &&\n    order.customerEmployeeId !== currentUserId\n  ) {\n    return false;\n  }\n  if (\n    isset(filter.product) &&\n    !order.subProjects.some((x) => x.product === filter.product)\n  ) {\n    return false;\n  }\n  if (isset(filter.deliveryYear)) {\n    const year = order.delivery.getFullYear();\n\n    if (year !== filter.deliveryYear) {\n      return false;\n    }\n  }\n\n  if (\n    isset(filter.contactId) &&\n    order.customerEmployeeId !== filter.contactId\n  ) {\n    return false;\n  }\n\n  if (\n    isset(filter.hideDeliveredOrders) &&\n    filter.hideDeliveredOrders === true &&\n    order.status >= MIN_ORDER_STATUS_WHEN_COMPLETED\n  ) {\n    return false;\n  }\n  if (\n    isset(filter.showOnlyProjects) &&\n    filter.showOnlyProjects === true &&\n    order.isProjectMaster === false\n  ) {\n    return false;\n  }\n\n  return true;\n}\n","/* eslint-disable no-shadow */\nimport { derived } from \"overmind\";\nimport { Direction } from \"@frontend/common/src/components/Table/Direction\";\nimport { filterOrder } from \"./helpers/filterOrders\";\nimport { Order, OrderFilter, OrderSortOption } from \"../../types/Order\";\nimport { RootState } from \"..\";\nimport { DraftOrder } from \"../../types/DraftOrder/DraftOrder\";\n\ntype State = {\n  numPerPage: number;\n  currentPage: number;\n  pageCount: number;\n  orders: Order[];\n\n  masterProjects: { [index: string]: any };\n  filteredOrders: Order[];\n  currentPageItems: Order[];\n  orderFilter: OrderFilter;\n\n  currentOrderId: string;\n  currentOrder: Order;\n\n  currentOrderProjectId: string;\n  currentOrderProject: Order;\n  currentOrderSortOption: OrderSortOption;\n\n  lastCompletedOrderStep: number;\n\n  autofill: DraftOrder;\n  currentNewOrder: DraftOrder;\n  orderConverted: boolean;\n  isQuote: boolean;\n  quickChoice?: string;\n  isFetching: boolean;\n};\n\nexport const state: State = {\n  numPerPage: 20,\n  currentPage: 1,\n  pageCount: derived((state: State) => {\n    return Math.ceil(state.filteredOrders.length / state.numPerPage);\n  }),\n  orderConverted: false,\n  orders: [],\n  isQuote: true,\n  masterProjects: derived((state: State) => {\n    const projects: { [index: string]: any } = {};\n    state.orders\n      .filter((o) => o.isProjectMaster)\n      .forEach((o) => {\n        projects[o.id] = o.id;\n      });\n    return projects;\n  }),\n\n  orderFilter: {\n    hideDeliveredOrders: true,\n    deliveryYear: null,\n  },\n\n  // memoized results of filter\n  filteredOrders: derived((state: State, rootState: RootState) => {\n    return state.orders.filter((o) =>\n      filterOrder(o, state.orderFilter, rootState.currentEmployeeId)\n    );\n  }),\n\n  currentOrderSortOption: null,\n  currentPageItems: derived((state: State) => {\n    let sortedItems: Order[];\n\n    if (state.currentOrderSortOption) {\n      sortedItems = state.filteredOrders.sort((a, b) => {\n        if (\n          a[state.currentOrderSortOption.field] <\n          b[state.currentOrderSortOption.field]\n        )\n          return state.currentOrderSortOption.direction === Direction.ascending\n            ? 1\n            : -1;\n        if (\n          a[state.currentOrderSortOption.field] >\n          b[state.currentOrderSortOption.field]\n        )\n          return state.currentOrderSortOption.direction === Direction.ascending\n            ? -1\n            : 1;\n        return 0;\n      });\n    } else {\n      sortedItems = state.filteredOrders;\n    }\n\n    if (Math.ceil(state.filteredOrders.length / state.numPerPage) > 1) {\n      return sortedItems.slice(\n        (state.currentPage - 1) * state.numPerPage,\n        (state.currentPage - 1) * state.numPerPage + state.numPerPage\n      );\n    }\n    return sortedItems;\n  }),\n\n  currentOrderId: null,\n  currentOrderProjectId: null,\n\n  currentOrder: derived((state: State) => {\n    let projectId = state.currentOrderId;\n    if (state.orders.length === 0) return null;\n\n    if (projectId !== null && projectId.includes(\"_\")) {\n      // eslint-disable-next-line prefer-destructuring\n      projectId = projectId.split(\"_\")[0];\n      const project = state.orders.find((o) => o.id === projectId);\n      return project.subProjects.find((o) => o.id === state.currentOrderId);\n    }\n    return state.orders.find((o) => o.id === state.currentOrderId);\n  }),\n\n  currentOrderProject: derived((state: State) => {\n    return state.orders.find((o) => o.id === state.currentOrderProjectId);\n  }),\n\n  lastCompletedOrderStep: null,\n  autofill: null,\n  currentNewOrder: {} as DraftOrder,\n  isFetching: false,\n};\n","/* eslint-disable no-undef,no-param-reassign */\n// @ts-nocheck\nimport { derived, IState } from \"overmind\";\n\nexport const createModals = <\n  T extends {\n    [name: string]: {\n      state?: IState;\n      result?: unknown;\n    };\n  }\n>(\n  modals: T\n): {\n  state: {\n    current: keyof T | null;\n  } & {\n    [K in keyof T]: T[K][\"state\"] & { isCurrent: boolean };\n  };\n  actions: {\n    [K in keyof T]: {\n      open: ContextFunction<\n        T[K][\"state\"] extends IState ? T[K][\"state\"] : void,\n        T[K][\"result\"]\n      >;\n      close: ContextFunction<T[K][\"result\"], void>;\n    };\n  };\n} => {\n  function createModal(name, modal) {\n    let resolver: ((res: T) => void) | null;\n\n    const open = async ({ state }: Context, newState = {}) => {\n      state.modals.current = name;\n\n      Object.assign(state.modals[name], newState);\n\n      return new Promise((resolve) => {\n        resolver = resolve;\n      });\n    };\n\n    const close = async ({ state }: Context, payload) => {\n      state.modals.current = null;\n      if (modal.state) {\n        Object.keys(modal.state).forEach((stateKey) => {\n          state.modals[name][stateKey] = modal.state[stateKey];\n        });\n      }\n      if (resolver) {\n        resolver(typeof payload === \"undefined\" ? modal.result : payload);\n      }\n    };\n\n    return {\n      state: {\n        ...modal.state,\n        isCurrent: derived(\n          (_, root: Context[\"state\"]) => root.modals.current === name\n        ),\n      },\n      actions: {\n        open,\n        close,\n      },\n    };\n  }\n\n  return Object.keys(modals).reduce(\n    (aggr, name) => {\n      const modal = createModal(name, modals[name]);\n\n      aggr.state[name] = modal.state;\n      aggr.actions[name] = modal.actions;\n\n      return aggr;\n    },\n    {\n      state: {\n        current: null,\n      },\n      actions: {},\n    }\n  ) as any;\n};\n","import { Direction } from \"@frontend/common/src/components/Table/Direction\";\nimport { Document } from \"./Document\";\nimport { Link } from \"./Link\";\n\nexport const MIN_ORDER_STATUS_WHEN_COMPLETED = 140;\n\nexport type Order = {\n  id: string;\n  product: string;\n  projectId?: string;\n  delivery: Date;\n  deliveryDay: number;\n  deliveryWeek: number;\n  deliveryYear: number;\n  deliveryTerms?: string;\n  orderDate: string;\n  status: number;\n  sum: number;\n  marked: string;\n  deliveryAddress: string;\n  constructionContactPhone: string;\n  constructionContactName: string;\n  customerOrderNumber: number;\n  isProjectMaster: boolean;\n  embedHash?: string;\n  embedId?: number;\n  documents?: Document[];\n  links: Link[];\n  customerEmployeeId: string;\n  engineerId: string;\n  isOrderPriceCalculated: boolean;\n  subProjects: Order[];\n  salesPersonId: string;\n  valueChainStatus: number;\n  customerNumber: string;\n  projectName: string;\n\n  calculationName: string;\n  constructionName: string;\n};\n\nexport type OrderFilter = {\n  status?: number;\n  projectId?: string;\n  freeText?: string;\n  customerOrderNumber?: number | string;\n  product?: string;\n  hideDeliveredOrders?: boolean;\n  showOnlyMyOrdersAndProjects?: boolean;\n  deliveryYear?: number;\n  projectName?: string;\n\n  contactId?: string;\n  showOnlyProjects?: boolean;\n};\n\nexport type OrderSortOption = {\n  field: keyof Order;\n  direction: Direction;\n};\n","export const sendMessageModal = {\n  state: { userId: null as string },\n  result: null as string,\n};\n\nexport const editEmployeeModal = {\n  state: { employeeId: null as string },\n  result: null as void,\n};\n\nexport const fileUploadModal = {\n  state: {},\n  result: null as FileList,\n};\nexport const calculatePriceModal = {\n  state: {},\n  result: null as any,\n};\nexport const selectionGridModal = {\n  state: { items: null as any[] },\n  result: null as any,\n};\n\nexport const precutModal = {\n  state: { projectId: null as string },\n  result: null as void,\n};\n","import { merge, namespaced } from \"overmind/config\";\nimport { state } from \"./state\";\nimport * as actions from \"./actions\";\nimport * as effects from \"./effects\";\nimport * as navigation from \"./navigation\";\nimport * as auth from \"./auth\";\nimport * as orders from \"./orders\";\nimport { createModals } from \"./createModals\";\nimport * as modals from \"./modals/config\";\n\nexport const config = merge(\n  {\n    state,\n    actions,\n    effects,\n  },\n  namespaced({\n    auth,\n    navigation,\n    orders,\n    modals: createModals(modals),\n  })\n);\n","export default \"data:image/png;base64,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\"","// @ts-nocheck\n// https://github.com/beautifulinteractions/beautiful-react-hooks/blob/master/src/useMediaQuery.js\nimport { useState, useEffect } from \"react\";\n\n/**\n * Accepts a media query string then uses the\n * [window.matchMedia](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) API to determine if it\n * matches with the current document.<br />\n * It also monitor the document changes to detect when it matches or stops matching the media query.<br />\n * Returns the validity state of the given media query.\n *\n */\nexport const useMediaQuery = (mediaQuery) => {\n  const [isVerified, setIsVerified] = useState(\n    !!window.matchMedia(mediaQuery).matches\n  );\n\n  useEffect(() => {\n    const mediaQueryList = window.matchMedia(mediaQuery);\n    const documentChangeHandler = () => setIsVerified(!!mediaQueryList.matches);\n\n    mediaQueryList.addListener(documentChangeHandler);\n\n    documentChangeHandler();\n    return () => {\n      mediaQueryList.removeListener(documentChangeHandler);\n    };\n  }, [mediaQuery]);\n\n  return isVerified;\n};\n\nexport default useMediaQuery;\n","import styled, { css } from \"styled-components\";\nimport { PreTreColors } from \"../../../styles/constants\";\n\nconst activeItemStyle = css`\n  color: ${PreTreColors.pretre};\n  font-weight: 700;\n`;\n\ntype ItemProps = {\n  isActive?: boolean;\n};\n\nexport const Item = styled(\"a\")<ItemProps>`\n  display: flex;\n  padding: 1rem;\n  justify-content: space-around;\n  align-items: center;\n  color: black;\n\n  ${(props: ItemProps) => props.isActive && activeItemStyle}\n\n  &:hover {\n    color: ${PreTreColors.pretre};\n  }\n  cursor: pointer;\n  text-decoration: none;\n  margin-bottom: -10px;\n`;\n\ntype ContainerProps = { isOverlay: boolean };\n\nconst overlayMenu = css`\n  position: absolute;\n  background: white;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  margin: 0;\n`;\nconst column = css`\n  position: absolute;\n  background: white;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n`;\n\nexport const ItemContainer = styled(\"div\")<ContainerProps>`\n  display: flex;\n  ${(props: ContainerProps) => props.isOverlay && column}\n`;\n\nexport const Container = styled(\"div\")<ContainerProps>`\n  margin-right: 1rem;\n  margin-left: 1rem;\n  min-height: 5rem;\n  display: flex;\n  justify-content: space-between;\n\n  ${(props: ContainerProps) => props.isOverlay && overlayMenu}\n`;\n\nexport const DropdownItem = styled(\"div\")`\n  display: flex;\n  padding: 1rem;\n  justify-content: space-around;\n  align-items: center;\n  color: black;\n  &:hover {\n    color: ${PreTreColors.pretre};\n  }\n  cursor: pointer;\n  margin-bottom: -10px;\n`;\n\nexport const BurgerBar = styled(\"div\")`\n  z-index: 1;\n  cursor: pointer;\n  justify-content: space-between;\n  color: red;\n  background-color: \"red\";\n  width: 100%;\n  color: \"blue\";\n  display: flex;\n  align-items: center;\n`;\nexport const BurgerButton = styled(\"div\")`\n  z-index: 1;\n  cursor: pointer;\n\n  color: ${PreTreColors.pretre};\n  width: 3rem;\n  color: \"blue\";\n  height: 3rem;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n","/* eslint-disable jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions */\nimport React, { FunctionComponent, useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { User } from \"@frontend/common/src/types/User\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\nimport Logo from \"../../../assets/img/pretre_logo.png\";\nimport { useMediaQuery } from \"../../../hooks/useMediaQuery\";\nimport { useOnClickOutside } from \"../../../hooks/useOnClickOutside\";\nimport { useActions, useAppState, useEffects } from \"../../../overmind\";\nimport { LayoutConstants } from \"../../../styles/constants\";\nimport { createUrl } from \"../../pages\";\nimport {\n  BurgerBar,\n  BurgerButton,\n  Container,\n  DropdownItem,\n  Item,\n  ItemContainer,\n} from \"./MainMenu.styles\";\n\ntype MenuItemConfig = {\n  label: string;\n  href: string;\n  showAsActiveFor: Page[];\n};\nconst buildVersion = process.env.REACT_APP_BUILD_VERSION;\n\nconst getMenuItems = (t: any): MenuItemConfig[] => {\n  const items: MenuItemConfig[] = [\n    {\n      label: t(\"My orders\"),\n      href: createUrl(Page.ORDER_LIST),\n      showAsActiveFor: [\n        Page.ORDER_LIST,\n        Page.VIEW_ORDER,\n        Page.VIEW_ORDER_PROJECT,\n      ],\n    },\n    {\n      label: t(\"Nytt prosjekt\"),\n      href: createUrl(Page.CREATE_ORDER, { slug: \"velgny\" }),\n      showAsActiveFor: [Page.CREATE_ORDER],\n    },\n    {\n      label: t(\"Documentation\"),\n      href: createUrl(Page.DOCUMENTATION),\n      showAsActiveFor: [Page.DOCUMENTATION],\n    },\n  ];\n  return items;\n};\n\ntype Props = {\n  currentPage: Page;\n  displayName?: string;\n  user?: User;\n};\n\nexport const MainMenu: FunctionComponent<Props> = ({\n  currentPage,\n  user,\n  displayName,\n}) => {\n  const { t } = useTranslation();\n  const items = user !== null ? getMenuItems(t) : [];\n  const actions = useActions();\n  const effects = useEffects();\n  const state = useAppState();\n  const { logout } = useAuth0();\n  const ref = useRef();\n  const [isOpen, toggleMenu] = useState(false);\n\n  const isSmall = useMediaQuery(\n    `(max-width: ${LayoutConstants.sidebarBreak}px)`\n  );\n  const [hover, setHover] = useState(false);\n  const onHover = () => {\n    setHover(true);\n  };\n\n  const onLeave = () => {\n    setHover(false);\n  };\n  useOnClickOutside(ref, () => {\n    toggleMenu(!isOpen);\n  });\n\n  useEffect(() => {\n    toggleMenu(false);\n  }, [currentPage]);\n\n  // Temporary menu while guest has no items present\n  if (user === null) {\n    return (\n      <Container isOverlay={false}>\n        <ItemContainer isOverlay={false}>\n          <Item href=\"/\">\n            <img style={{ margin: \"0.5rem\" }} src={Logo} alt=\"logo\" />\n          </Item>\n        </ItemContainer>\n        <ItemContainer isOverlay={false}>\n          <DropdownItem\n            onClick={() => effects.router.navigateTo(createUrl(Page.LOGIN))}\n          >\n            <svg\n              width=\"32\"\n              height=\"32\"\n              viewBox=\"0 0 32 32\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M2.56799 19.2578C3.05072 21.2543 3.96711 23.0829 5.21215 24.6361C8.29813 22.3574 12.0524 21.0906 16.0001 21.0906C19.9477 21.0906 23.7019 22.3574 26.788 24.6361C28.033 23.0828 28.9494 21.2541 29.4322 19.2578C29.6858 18.2051 29.8181 17.1128 29.8181 16C29.8181 8.369 23.631 2.18188 16 2.18188C8.36897 2.18188 2.18185 8.369 2.18185 16C2.18185 17.1128 2.31412 18.2051 2.56778 19.2578H2.56799ZM25.2812 26.2384C22.6629 24.3715 19.4596 23.2724 16 23.2724C12.5404 23.2724 9.33706 24.3715 6.7188 26.2384C9.17204 28.4626 12.4273 29.8181 16 29.8181C19.5727 29.8181 22.8281 28.4626 25.2812 26.2384ZM16 32C7.16355 32 0 24.8364 0 16C0 7.16355 7.16355 0 16 0C24.8364 0 32 7.16355 32 16C32 24.8364 24.8364 32 16 32Z\"\n                fill=\"#430A03\"\n              />\n              <path\n                d=\"M16.0005 17.455C18.0091 17.455 19.6374 15.8268 19.6374 13.8181C19.6374 11.8094 18.0091 10.1811 16.0005 10.1811C13.9918 10.1811 12.3635 11.8094 12.3635 13.8181C12.3635 15.8268 13.9918 17.455 16.0005 17.455ZM16.0005 19.6369C12.7876 19.6369 10.1816 17.0309 10.1816 13.8181C10.1816 10.6052 12.7876 7.99927 16.0005 7.99927C19.2133 7.99927 21.8193 10.6052 21.8193 13.8181C21.8193 17.0309 19.2133 19.6369 16.0005 19.6369Z\"\n                fill=\"#430A03\"\n              />\n            </svg>\n          </DropdownItem>\n        </ItemContainer>\n      </Container>\n    );\n  }\n\n  if (isSmall && !isOpen) {\n    return (\n      <BurgerBar>\n        <img style={{ margin: \"0.5rem\" }} src={Logo} alt=\"logo\" />\n        <BurgerButton onClick={() => toggleMenu(!isOpen)}>\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"24\"\n            height=\"24\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          >\n            <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n            <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n            <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n          </svg>\n        </BurgerButton>\n      </BurgerBar>\n    );\n  }\n  return (\n    <Container isOverlay={isSmall}>\n      {isSmall && (\n        <BurgerBar>\n          <img style={{ margin: \"0.5rem\" }} src={Logo} alt=\"logo\" />\n        </BurgerBar>\n      )}\n\n      <ItemContainer isOverlay={isSmall}>\n        <Item href=\"/\">\n          <img style={{ margin: \"0.5rem\" }} src={Logo} alt=\"logo\" />\n          <span\n            style={{\n              position: \"absolute\",\n              right: \".5rem\",\n              top: \".5rem\",\n              fontSize: \".5rem\",\n            }}\n          >\n            {displayName}\n          </span>\n        </Item>\n      </ItemContainer>\n      <ItemContainer isOverlay={isSmall}>\n        {items.map((i, idx) => (\n          <Item\n            key={idx}\n            href={i.href}\n            isActive={i.showAsActiveFor.includes(currentPage)}\n          >\n            {i.label}\n          </Item>\n        ))}\n        {state.mesterIdLogin && state.mesterIdCustomers.length > 1 ? (\n          <Item\n            href={createUrl(Page.CUSTOMER_SELECTOR)}\n            isActive={currentPage === Page.CUSTOMER_SELECTOR}\n          >\n            Kundevelger\n          </Item>\n        ) : null}\n        {user ? (\n          <Item>\n            <p\n              onClick={() => {\n                if (state.mesterIdLogin) {\n                  actions.auth.logoutMesterId().then(() => {\n                    logout({ returnTo: window.location.origin });\n                  });\n                } else {\n                  actions.auth.logout();\n                }\n              }}\n            >\n              {t(\"Logout\")}\n            </p>\n          </Item>\n        ) : null}\n\n        <DropdownItem>\n          <svg\n            width=\"32\"\n            height=\"32\"\n            viewBox=\"0 0 32 32\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            onMouseEnter={onHover}\n            onMouseLeave={onLeave}\n          >\n            <path\n              d=\"M2.56799 19.2578C3.05072 21.2543 3.96711 23.0829 5.21215 24.6361C8.29813 22.3574 12.0524 21.0906 16.0001 21.0906C19.9477 21.0906 23.7019 22.3574 26.788 24.6361C28.033 23.0828 28.9494 21.2541 29.4322 19.2578C29.6858 18.2051 29.8181 17.1128 29.8181 16C29.8181 8.369 23.631 2.18188 16 2.18188C8.36897 2.18188 2.18185 8.369 2.18185 16C2.18185 17.1128 2.31412 18.2051 2.56778 19.2578H2.56799ZM25.2812 26.2384C22.6629 24.3715 19.4596 23.2724 16 23.2724C12.5404 23.2724 9.33706 24.3715 6.7188 26.2384C9.17204 28.4626 12.4273 29.8181 16 29.8181C19.5727 29.8181 22.8281 28.4626 25.2812 26.2384ZM16 32C7.16355 32 0 24.8364 0 16C0 7.16355 7.16355 0 16 0C24.8364 0 32 7.16355 32 16C32 24.8364 24.8364 32 16 32Z\"\n              fill=\"#430A03\"\n            />\n            <path\n              d=\"M16.0005 17.455C18.0091 17.455 19.6374 15.8268 19.6374 13.8181C19.6374 11.8094 18.0091 10.1811 16.0005 10.1811C13.9918 10.1811 12.3635 11.8094 12.3635 13.8181C12.3635 15.8268 13.9918 17.455 16.0005 17.455ZM16.0005 19.6369C12.7876 19.6369 10.1816 17.0309 10.1816 13.8181C10.1816 10.6052 12.7876 7.99927 16.0005 7.99927C19.2133 7.99927 21.8193 10.6052 21.8193 13.8181C21.8193 17.0309 19.2133 19.6369 16.0005 19.6369Z\"\n              fill=\"#430A03\"\n            />\n          </svg>\n\n          {hover ? (\n            <p style={{ position: \"absolute\", top: \"7.5%\" }}>\n              Versjon: {buildVersion}\n            </p>\n          ) : null}\n        </DropdownItem>\n      </ItemContainer>\n    </Container>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { MainMenu } from \"../components/MainMenu\";\n\ntype Props = {\n  children: any;\n  currentPage: Page;\n};\n\nexport const GuestLayout: FunctionComponent<Props> = ({\n  children,\n  currentPage,\n}) => {\n  return (\n    <>\n      <MainMenu currentPage={currentPage} user={null} />\n      {children}\n    </>\n  );\n};\n","import React, { FunctionComponent, useState } from \"react\";\nimport Modal from \"@frontend/common/src/components/Modal/Modal\";\nimport { TextArea } from \"@frontend/common/src/components/TextArea/TextArea\";\nimport { PhoneLink } from \"@frontend/common/src/components/PhoneLink/PhoneLink\";\nimport { useActions, useAppState } from \"../../overmind\";\nimport { Header } from \"../../elements/Header/Header\";\n\nimport { HBox } from \"../../elements/HBox/HBox\";\nimport { VBox } from \"../../elements/VBox/VBox\";\n\nimport { BlockButton } from \"../../components/Buttons/Buttons.styles\";\n\nexport const SendMessageModal: FunctionComponent = () => {\n  const [message, setMessage] = useState(\"\");\n\n  const { modals, pretreEmplyees } = useAppState();\n\n  const { modals: modalsActions } = useActions();\n\n  if (!modals.sendMessageModal.isCurrent) {\n    return null;\n  }\n\n  const employee = pretreEmplyees.find(\n    (e) => e.id === modals.sendMessageModal.userId\n  );\n\n  return (\n    <Modal\n      isOpen={modals.sendMessageModal.isCurrent}\n      onClose={() => modalsActions.sendMessageModal.close(\"\")}\n    >\n      <HBox>\n        <VBox>\n          <Header type=\"secondary\">{employee.name}</Header>\n\n          <PhoneLink number={employee.phone} />\n          <a href={`mailto:${employee.email}`}>{employee.email}</a>\n        </VBox>\n\n        {employee.photoUrl ? (\n          <div style={{ width: \"8rem\" }}>\n            <img src={employee.photoUrl} alt={employee.name} />\n          </div>\n        ) : null}\n      </HBox>\n      <TextArea\n        style={{ height: \"100px\" }}\n        value={message}\n        onChange={(e: any) => setMessage(e.target.value)}\n      />\n      <BlockButton\n        onClick={() => modalsActions.sendMessageModal.close(message)}\n      >\n        Send melding\n      </BlockButton>\n    </Modal>\n  );\n};\n","import React, { FunctionComponent } from \"react\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { useAppState } from \"../../../overmind\";\n\nimport { MainMenu } from \"../components/MainMenu\";\nimport { SendMessageModal } from \"../../../modals/SendMessageModal/SendMessageModal\";\n\ntype Props = {\n  children: any;\n  currentPage: Page;\n};\n\nexport const MainLayout: FunctionComponent<Props> = ({\n  children,\n  currentPage,\n}) => {\n  const state = useAppState();\n\n  let displayName = \"\";\n  if (state.auth.user !== null) {\n    if (state.currentEmployee) {\n      displayName = `${state.currentEmployee.name} (${state.customer.name})`;\n    } else if (state.customer) {\n      displayName = state.customer.name;\n    }\n  }\n\n  //  customer={state.customer} customerEmployee={state.currentEmployee}\n  return (\n    <>\n      <MainMenu\n        currentPage={currentPage}\n        user={state.auth.user}\n        displayName={displayName}\n      />\n      {children}\n      {state.modals.sendMessageModal.isCurrent ? <SendMessageModal /> : null}\n    </>\n  );\n};\n","import React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { Page } from \"@frontend/common/src/types/Page\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\nimport axios from \"axios\";\nimport { useActions, useAppState, useEffects } from \"../overmind\";\nimport { axiosTokenInterceptor } from \"../helpers/axiosTokenInterceptor\";\nimport \"./App.css\";\nimport { GuestLayout } from \"./layouts/GuestLayout/GuestLayout\";\nimport { MainLayout } from \"./layouts/MainLayout/MainLayout\";\nimport { pages, PageAccess, createUrl } from \"./pages\";\n\nexport const App: FunctionComponent = () => {\n  const state = useAppState();\n  const effects = useEffects();\n  const actions = useActions();\n  const {\n    isLoading,\n    isAuthenticated,\n    error,\n    user,\n    getAccessTokenSilently,\n    logout,\n  } = useAuth0();\n  const [loading, setLoading] = useState<boolean>(true);\n\n  useEffect(() => {\n    if (isAuthenticated && state.auth.user === null) {\n      setLoading(true);\n      getAccessTokenSilently().then((r) => {\n        actions.auth\n          .onMesterIdLoggedIn({ token: r, username: user.email })\n          .then(() => setLoading(false));\n      });\n    } else {\n      setTimeout(() => {\n        setLoading(false);\n      }, 500);\n    }\n  }, [isAuthenticated]);\n\n  useEffect(() => {\n    const triggerLogout = () => {\n      effects.toast(\"Økten din har utløpt. Vennligst logg inn igjen\");\n      if (state.mesterIdLogin) {\n        actions.auth.logoutMesterId().then(() => {\n          logout({ returnTo: window.location.origin });\n        });\n      } else {\n        actions.auth.logout();\n      }\n    };\n\n    if (isAuthenticated && state.auth.token) {\n      const interceptorId = axiosTokenInterceptor(\n        state,\n        actions,\n        triggerLogout,\n        getAccessTokenSilently\n      );\n      return () => axios.interceptors.request.eject(interceptorId);\n    }\n    return () => {};\n  }, [isAuthenticated, state.auth.token]);\n\n  if (isLoading || loading) {\n    return <div className=\"loading-spinner\">Laster...</div>;\n  }\n  if (error) {\n    return <div>Oops... {error.message}</div>;\n  }\n  const CurrentPage = pages[state.navigation.currentPage];\n\n  if (!CurrentPage) {\n    return <div>404</div>;\n  }\n\n  const CurrentPageComponent = CurrentPage.component;\n\n  if (!isAuthenticated && CurrentPage.restrictedTo === PageAccess.AUTH) {\n    effects.toast(\"Du må logge inn for å se denne siden\");\n    effects.router.navigateTo(createUrl(Page.HOME));\n  } else if (\n    !isAuthenticated &&\n    CurrentPage.restrictedTo === PageAccess.GUEST\n  ) {\n    effects.router.navigateTo(createUrl(Page.HOME));\n  }\n\n  if (isAuthenticated) {\n    return (\n      <MainLayout currentPage={state.navigation.currentPage}>\n        <CurrentPageComponent />\n      </MainLayout>\n    );\n  }\n  return (\n    <GuestLayout currentPage={state.navigation.currentPage}>\n      <CurrentPageComponent />\n    </GuestLayout>\n  );\n};\n","import axios from \"axios\";\nimport jwtDecode from \"jwt-decode\";\nimport { GetTokenSilentlyOptions } from \"@auth0/auth0-react\";\n\nexport const axiosTokenInterceptor = (\n  state: any,\n  actions: any,\n  triggerLogout: () => void,\n  getAccessTokenSilently: (options?: GetTokenSilentlyOptions) => Promise<string>\n) => {\n  return axios.interceptors.request.use(\n    async (config) => {\n      const { token } = state.auth;\n\n      if (!token) {\n        triggerLogout();\n        return Promise.reject(new Error(\"Ingen token, logger ut.\"));\n      }\n\n      const decoded: { exp: number } = jwtDecode(token);\n      const tokenExpiry = decoded.exp * 1000;\n      const currentTime = new Date().getTime();\n      if (currentTime > tokenExpiry) {\n        triggerLogout();\n        return Promise.reject(new Error(\"Token utløpt, logger ut.\"));\n      }\n\n      if (tokenExpiry - currentTime < 15 * 60 * 1000) {\n        const newToken = await getAccessTokenSilently({ ignoreCache: true });\n        actions.auth.updateToken(newToken);\n\n        return {\n          ...config,\n          headers: {\n            ...config.headers,\n            Authorization: `Bearer ${newToken}`,\n          },\n        };\n      }\n\n      return config;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\n// the translations\n// (tip move them in a JSON file and import them)\nconst resources = {\n  nb: {\n    translation: {\n      Login: \"Innlogging\",\n      \"Log in\": \"Logg inn\",\n      \"Forgot password?\": \"Glemt passord?\",\n      Password: \"Passord\",\n      \"Email/username\": \"Epost/brukernavn\",\n      \"My orders and projects\": \"Mine prosjekt\",\n      \"Show my orders and projects\": \"Vis mine ordrer og prosjekt\",\n      \"Show only projects\": \"Vis kun prosjekt\",\n      \"Hide delivered orders\": \"Skjul leverte ordre\",\n      \"Project no.\": \"Prosjektnr.\",\n      \"Order no.\": \"Ordrenr.\",\n      Status: \"Status\",\n      Constructor: \"Konstruktør\",\n      Product: \"Prosjektnavn\",\n      \"Product Group\": \"Produktgruppe\",\n      \"Delivery year\": \"Leveringsår\",\n      \"Delivery date\": \"Leveringdato\",\n      \"Delivery addr.\": \"Leveringsaddr.\",\n      \"Delivery terms\": \"Leverings bet.\",\n      Delivery: \"Levering\",\n      \"Order date\": \"Ordredato\",\n      \"Order confirmation\": \"Ordrebekreftelse\",\n      Price: \"Pris\",\n      \"Order price\": \"Ordrepris\",\n      \"Offer price\": \"Tilbudspris\",\n      \"My orders\": \"Mine prosjekt\",\n      \"My offers\": \"Mine tilbud\",\n      \"Technical services\": \"Tekniske tjenester\",\n      \"Request offer\": \"Be om tilbud\",\n      \"Offer no.\": \"Tilbudsnr.\",\n      \"Sales engineer\": \"Salgsingeniør\",\n      \"Hide processed offers\": \"Skjul tilbud som er overført til ordre\",\n      \"Show my offers\": \"Vis mine tilbud\",\n      Contact: \"Kontakt\",\n      \"Offer year\": \"Tilbudsår\",\n      Choose: \"Velg\",\n      Logout: \"Logg ut\",\n      Created: \"Opprettet\",\n      \"Customer ref.\": \"Kunde ref.\",\n      \"Customer order no\": \"Kundes bestillingsnr.\",\n      Marked: \"Merkes\",\n      Loading: \"Laster\",\n      Phone: \"Telefon\",\n      \"Offers in project\": \"Tilbud i prosjekt\",\n      \"Orders in project\": \"Ordre i prosjekt\",\n      \"Other orders in project\": \"Andre ordre i prosjekt\",\n      \"Other offers in project\": \"Andre tilbud i prosjekt\",\n      Documents: \"Dokumenter\",\n      \"Site contact\": \"Kontaktperson byggeplass\",\n      \"Site phone\": \"Tlf. byggeplass\",\n      \"Other orders for project\": \"Andre ordre for prosjektet\",\n      Description: \"Beskrivelse\",\n      Folder: \"Mappe\",\n      \"Doc type\": \"Filtype\",\n      \"My profile - {{companyName}}\": \"Min profil - {{companyName}}\",\n      \"Customer & site\": \"Kundeinfo & byggeplass\",\n      \"Offer options\": \"Tilbudsvalg\",\n      Attachments: \"Vedlegg\",\n      Summary: \"Oppsummering\",\n      Documentation: \"Dokumentasjon\",\n      \"Attach document\": \"Last opp dokument\",\n      \"Add additional info here\": \"Skriv tilleggsinformasjon her\",\n      Done: \"Fullfør\",\n      \"Back to my offers\": \"Tilbake til Mine Tilbud\",\n      \"Back to my orders\": \"Tilbake til Mine Prosjekt\",\n      \"Offer created\": \"Tilbud registrert\",\n      \"Offer date\": \"Tilbudsdato\",\n      Customers: \"Kunder\",\n      Username: \"Brukernavn\",\n      Role: \"Rolle\",\n      Email: \"Epost\",\n      Search: \"Søk\",\n      \"Want windows installed?\": \"Ønskes vinduer montert?\",\n      \"Want standard framing?\": \"Ønskes standard omrammingstype?\",\n      \"Want insolation?\": \"Ønskes isolert?\",\n      \"Want boarding type: 19x148 D-fals, 60° New type?\":\n        \"Ønskes Kledningstype: 19x148 D-fals, 60° Ny type?\",\n      \"Can vertical boarding be split with floor divider?\":\n        \"Kan stående kledning deles ved etasjeskille?\",\n      \"Special fire safety requirements?\": \"Er det spesielle brannkrav?\",\n      \"Joist type\": \"Type bjelkelag\",\n      \"Pick joist\": \"Velg bjelkelag\",\n      Joist: \"Bjelkelag\",\n      \"Pick joist type\": \"Velg bjelkelagstype\",\n      \"Immerse wetroom\": \"Nedsenk våtrom\",\n      Dimension: \"Dimensjon\",\n      \"Pick roof type\": \"Velg taktype\",\n      Roof: \"Tak\",\n      Roofing: \"Taktekking\",\n      \"Roof angle\": \"Takvinkel\",\n      \"Range distance\": \"Spennvidde\",\n      Protrusion: \"Utstikk\",\n      Elements: \"Elementer\",\n      Yes: \"Ja\",\n      No: \"Nei\",\n      Next: \"Neste\",\n      Comment: \"Kommentar\",\n      \"3. What should the offer include?\": \"3. Hva ønsker du tilbud på?\",\n      \"3. Technical services\": \"3. Tekniske tjenester\",\n      \"Customer Order no.\": \"Kundes best.\",\n      \"Project price\": \"Prosjektpris\",\n      \"Write other required info here\": \"Skriv annen nødvendig info her\",\n      FreeText: \"Fritekstsøk\",\n      TechnicalType: \"Type tjeneste\",\n      AddRoof: \"+ Tak\",\n      AddExtendedRoof: \"+ Takstolkalkulator\",\n      AddBeamlayer: \" + Bjelkelag\",\n      AddPrecut: \"+ Precut\",\n      AddTechnical: \"+ Tekniske tjenester\",\n      roof: \"Tak\",\n      beamlayer: \"Bjelkelag\",\n      precut: \"Precut\",\n      technical: \"Tekn. tjenester\",\n    },\n  },\n};\n\ni18n\n  .use(initReactI18next) // passes i18n down to react-i18next\n  .init({\n    resources,\n    lng: \"nb\",\n\n    keySeparator: false, // we do not use keys in form messages.welcome\n\n    interpolation: {\n      escapeValue: false, // react already safes from xss\n    },\n  });\n\nexport default i18n;\n","/* eslint-disable */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === \"localhost\" ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === \"[::1]\" ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\ntype Config = {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n  if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener(\"load\", () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            \"This web app is being served cache-first by a service \" +\n              \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then((registration) => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === \"installed\") {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                \"New content is available and will be used when all \" +\n                  \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log(\"Content is cached for offline use.\");\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch((error) => {\n      console.error(\"Error during service worker registration:\", error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { \"Service-Worker\": \"script\" },\n  })\n    .then((response) => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get(\"content-type\");\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf(\"javascript\") === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then((registration) => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        \"No internet connection found. App is running in offline mode.\"\n      );\n    });\n}\n\nexport function unregister() {\n  if (\"serviceWorker\" in navigator) {\n    navigator.serviceWorker.ready\n      .then((registration) => {\n        registration.unregister();\n      })\n      .catch((error) => {\n        console.error(error.message);\n      });\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport * as React from \"react\";\n\ntype Props = {};\ntype State = {\n  hasError: boolean;\n};\nexport class ErrorBoundary extends React.Component<Props, State> {\n  constructor(props: any) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  static getDerivedStateFromError(error: any) {\n    return { hasError: true };\n  }\n\n  componentDidCatch(error: any, errorInfo: any) {}\n\n  render() {\n    const { hasError } = this.state;\n    const { children } = this.props;\n    if (hasError) {\n      return <h1>En feil oppstod. Prøv å logge inn på nytt.</h1>;\n    }\n    return children;\n  }\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./normalize-tailwind.css\";\nimport \"./index.css\";\n// Overmind\nimport { createOvermind } from \"overmind\";\nimport { Provider } from \"overmind-react\";\n\nimport { Auth0Provider } from \"@auth0/auth0-react\";\nimport CacheBuster from \"react-cache-buster\";\nimport { config } from \"./overmind/config\";\nimport { App } from \"./app/App\";\n\nimport \"./i18n\";\n\nimport * as serviceWorker from \"./serviceWorker\";\n\nimport { ErrorBoundary } from \"./components/ErrorBoundary/ErrorBoundary\";\nimport { version } from \"../package.json\";\n\nconst overmind = createOvermind(config, {\n  devtools: \"127.0.0.1:3031\",\n});\n\nconst domain = process.env.REACT_APP_AUTH0_DOMAIN;\nconst clientId = process.env.REACT_APP_AUTH0_CLIENT_ID;\nconst isProduction = process.env.NODE_ENV === \"production\";\n\nReactDOM.render(\n  <React.StrictMode>\n    <CacheBuster currentVersion={version} isEnabled={isProduction}>\n      <Provider value={overmind}>\n        <Auth0Provider\n          domain={domain}\n          clientId={clientId}\n          redirectUri={`${window.location.origin}/auth`}\n          audience=\"mg.iam\"\n        >\n          {/* @ts-ignore */}\n          <ErrorBoundary>\n            <App />\n          </ErrorBoundary>\n        </Auth0Provider>\n      </Provider>\n    </CacheBuster>\n  </React.StrictMode>,\n  document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}