{"version":3,"sources":["components/logo-icon.svg","components/worldcover_logo.png","reducers/profile.ts","reducers/user.ts","env.ts","reducers/weather.ts","reducers/quotesSlice.ts","reducers/index.ts","muiTheme.ts","components/HeaderBar.tsx","components/Header.tsx","utils/login.ts","containers/LoginPage.tsx","components/PrivateRoute.tsx","components/LocationMap.tsx","components/AmountTextField.tsx","components/ProductSelector.tsx","containers/QuoteForm.tsx","graphql/mutations.ts","utils/index.ts","components/QuoteDetails.tsx","containers/QuotesPage.tsx","containers/SharedQuote.tsx","App.tsx","aws-exports.js","index.tsx"],"names":["module","exports","profileSlice","createSlice","name","initialState","reducers","setProfile","state","action","payload","actions","LOGIN","LOGOUT","token","isAuthenticated","isLoadingData","user","API_ROOT","process","MAPBOX_TOKEN","REACT_APP_MAPBOX_TOKENN","portfolioInitialState","error","undefined","byIndex","byQuantity","basePayoutSchedule","fdd","loss","baseQuote","id","client","crop","product","initiated_at","Date","toISOString","sumInsuredPerAcre","acreage","status","submittedTo","riskPeriod","start","end","pricing","premiumPerAcre","claimHistory","year","payout","payoutSchedule","site","latitude","longitude","quotesSlice","isShared","placement","insurer","expires_at","byId","clients","setQuotes","forEach","x","addQuote","uuid","replace","quote","archiveQuote","isArchived","enableSharing","dummyData","map","rootReducer","combineReducers","profile","profileReducer","type","weather","indexDefault","cdd","crw","crf","indexData","data","reduce","yrData","TEMPERATURE_SOURCE","RAINFALL_SOURCE","weatherData","temperature","metadata","source_metadata","source_data","rainfall","response","quotes","quotesReducer","store","configureStore","reducer","middleware","getDefaultMiddleware","concat","apiMiddleware","devTools","useAppDispatch","useDispatch","headerFontFamily","theme","createMuiTheme","direction","typography","fontFamily","join","h1","h2","h3","h4","h5","h6","palette","primary","light","main","dark","secondary","info","useStyles","makeStyles","appBar","backgroundColor","color","height","marginRight","spacing","iconWrapper","margin","display","alignItems","toolbar","justifyContent","loginButton","flex","HeaderBar","props","logout","classes","AppBar","position","className","Toolbar","width","src","logo","alt","Typography","variant","to","Button","onClick","root","mixins","content","flexGrow","padding","Header","CssBaseline","LOGIN_ENDPOINT","swapMagicToken","magicToken","dispatch","handleError","axios","post","headers","Authorization","then","localStorage","setItem","JSON","stringify","catch","e","console","error_code","error_message","flexDirection","maxWidth","email","marginBottom","magic","Magic","magicLogin","setError","setLoading","a","auth","loginWithMagicLink","Sentry","LoginPage","useState","setEmail","isLoading","TextField","label","value","helperText","onChange","event","target","onKeyPress","ev","key","preventDefault","size","CircularProgress","style","marginLeft","href","PrivateRoute","Component","component","path","rest","location","isAuth","useSelector","render","LocationMap","lat","lng","zoom","viewport","setViewport","useEffect","popup","mapboxApiAccessToken","mapStyle","maxZoom","onViewportChange","nextViewport","NumberFormatCustom","inputRef","other","getInputRef","onValueChange","values","thousandSeparator","isNumericString","prefix","AmountTextField","InputProps","inputComponent","CropOption","isSelected","isDisabled","ItemOption","children","ProductSelector","initialProduct","products","selectedCropId","setSelectedCrop","selectedProductId","setSelectedProduct","log","cropId","Object","crops","index","productId","title","marginTop","actionWrapper","button","paper","textField","minWidth","summaryWrapper","QuoteForm","query","URLSearchParams","useLocation","search","history","useHistory","quotesById","quoteId","get","quoteToBeRevised","setSelectedProductId","errorText","company","setCompany","anchorValue","setAnchorValue","setAcreage","setLocation","moment","startDate","setStartDate","endDate","setEndDate","requestQuote","mapQuoteToInput","API","graphql","graphqlOperation","input","push","Paper","placeholder","parseInt","toLocaleString","DatePicker","date","Array","isArray","diff","parseFloat","isNaN","formatDateTime","dateString","format","formatDate","Info","styles","ClaimHistoryTable","toFixed","PayoutScheduleTable","rows","getSharedUrl","baseUrl","QuoteDetails","isPublic","showIndexDetails","setShowIndexDetails","rel","xmlns","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","length","LineChart","top","right","left","bottom","CartesianGrid","strokeDasharray","XAxis","dataKey","YAxis","Tooltip","Legend","Line","background","border","boxShadow","shadows","formControl","selectEmpty","rand","Math","round","random","getModalStyle","transform","QuoteLabel","isActive","statusPillBg","compareQuotes","b","isBefore","isAfter","QuotesPage","allQuotes","sort","React","modalStyle","showModal","setShowModal","selectedQuoteIndex","setSelectedQuoteIndex","clientFilter","setClientFilter","filteredQuotes","filter","currentQuote","fetchData","FormControl","InputLabel","Select","labelId","MenuItem","archive","Modal","open","onClose","aria-labelledby","aria-describedby","SharedQuote","useParams","App","removeItem","from","awsmobile","Amplify","configure","config","ReactDOM","StrictMode","ThemeProvider","utils","MomentUtils","document","getElementById"],"mappings":"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","file":"static/js/main.28f180fc.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo-icon.81356815.svg\";","module.exports = __webpack_public_path__ + \"static/media/worldcover_logo.1bb59eab.png\";","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nexport type ProfileSite = {\n name: string;\n lat: number;\n lng: number;\n};\n\nexport type CoveragePeriod = {\n start: string;\n end: string;\n};\n\nexport type Profile = {\n name: string;\n anchorValue: number;\n site: ProfileSite;\n period: CoveragePeriod;\n};\nexport type ProfileState = Profile | {};\n\nconst profileSlice = createSlice({\n name: 'profile',\n initialState: {} as ProfileState,\n reducers: {\n setProfile: (state, action: PayloadAction) => action.payload,\n },\n});\n\nexport const { setProfile } = profileSlice.actions;\n\nexport default profileSlice.reducer;\n","import { AnyAction } from '@reduxjs/toolkit';\nimport { RootState } from '.';\n\nexport const LOGIN = '@@user/LOGIN';\nexport const LOGOUT = '@@user/LOGOUT';\n\ntype User = {\n id: number;\n username: string;\n role: string;\n name: string;\n};\n\nexport type TokenData = {\n token: string;\n expires_at: number;\n};\n\nexport type UserState = User & {\n lastUpdate?: Date;\n isAuthenticated: boolean;\n token?: string;\n authRedirect?: string;\n isLoadingData: boolean;\n};\n\nconst loadToken = () => {\n return { token: '', isAuthenticated: true };\n \n// const tokenData = localStorage.getItem('apitoken');\n// if (tokenData === null) {\n// return { isAuthenticated: false };\n// } else {\n// const { expires_at, token }: TokenData = JSON.parse(tokenData);\n// const currentTimestamp = Math.floor(new Date().getTime() / 1000);\n// if (expires_at <= currentTimestamp) {\n// // Token expired, clear old token\n// localStorage.removeItem('apitoken');\n// return { isAuthenticated: false };\n// } else {\n// return { token, isAuthenticated: true };\n// }\n// }\n \n};\n\nconst initialState = { ...loadToken(), isLoadingData: false } as UserState;\n\nexport default function reducer(state: UserState = initialState, action: AnyAction): any {\n switch (action.type) {\n case LOGIN:\n return {\n ...state,\n isAuthenticated: true,\n token: action.payload.token,\n };\n case LOGOUT:\n return {\n isAuthenticated: false,\n isLoadingData: false,\n };\n default:\n return state;\n }\n}\n\nexport const login = (token: string) => ({\n type: LOGIN,\n payload: { token },\n});\n\nexport const logout = () => {\n localStorage.removeItem('apitoken');\n return {\n type: LOGOUT,\n };\n};\n\nexport const getToken = (state: RootState) => state.user.token;\nexport const isAuthenticated = (state: RootState) => state.user.isAuthenticated;\n","export const API_ROOT =\n process.env.REACT_APP_API_ROOT ||\n process.env.REACT_APP_API_V2_ROOT ||\n 'https://api.worldcovr.com';\nexport const MAGIC_API_KEY = process.env.REACT_APP_MAGIC_API_KEY || 'pk_test_F22052A660580DB8';\nexport const MAPBOX_TOKEN =\n process.env.REACT_APP_MAPBOX_TOKENN ||\n 'pk.eyJ1IjoiamFzb25zY2hhcGlybyIsImEiOiJjazNlcnJpbXUwMWRzM2VtbDhpcTdxemN3In0.PVLZkH91kDLHYqq2g45Y5g';\n","import { RSAA } from 'redux-api-middleware'; // RSAA = '@@redux-api-middleware/RSAA'\n\nimport { API_ROOT } from '../env';\nimport { LOGOUT } from './user';\nimport { RootState } from '.';\nimport { AnyAction } from '@reduxjs/toolkit';\n\nexport const WEATHER_DATA_REQUEST = '@@weather/WEATHER_DATA_REQUEST';\nexport const WEATHER_DATA_SUCCESS = '@@weather/WEATHER_DATA_SUCCESS';\nexport const WEATHER_DATA_FAILURE = '@@weather/WEATHER_DATA_FAILURE';\n\nexport type WeatherDataPayload = {\n first_season_year: number;\n last_season_year: number;\n period: WeatherDataPeriod;\n latitude: number;\n longitude: number;\n product_code: string;\n data: IndexType[];\n settled_only: boolean;\n};\nexport type IndexType = 'cdd' | 'crf' | 'crw' | 'fdd';\n\ntype WeatherDataPeriod = {\n period_length: number;\n start: {\n month: number;\n day: number;\n };\n};\n\nexport type WeatherDataResponse = {\n source_metadata: {\n [id: string]: WeatherMetadata;\n };\n data: IndexDataRange[];\n};\n\nexport type IndexDataRange = {\n year: number;\n cdd?: IndexDataPoint[];\n crf?: IndexDataPoint[];\n crw?: IndexDataPoint[];\n fdd?: IndexDataPoint[];\n};\n\nexport type WeatherDataMap = {\n [id in WeatherQuantity]?: {\n metadata: WeatherMetadata;\n data: IndexDataPoint[];\n };\n};\n\nexport type WeatherQuantity = 'temperature' | 'rainfall';\nexport type WeatherMetadata = {\n id: string;\n quantity: WeatherQuantity;\n res: number;\n time: 'hourly' | 'daily';\n unit: '°C' | '°F' | 'mm';\n};\n\nexport type IndexDataPoint = {\n date: string;\n value: number;\n};\n\nexport type IndexDataMap = {\n [idx in IndexType]?: IndexDataPoint[];\n};\n\nexport const fetchWeatherData: any = (token: string, weatherData: WeatherDataPayload) => ({\n [RSAA]: {\n endpoint: `${API_ROOT}/weather-data/indices`,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(weatherData),\n method: 'POST',\n types: [WEATHER_DATA_REQUEST, WEATHER_DATA_SUCCESS, WEATHER_DATA_FAILURE],\n },\n});\n\nexport type WeatherState = {\n isLoadingData: boolean;\n error?: any;\n byIndex: IndexDataMap;\n byQuantity: WeatherDataMap;\n};\n\nexport const portfolioInitialState: WeatherState = {\n isLoadingData: false,\n error: undefined,\n byIndex: {},\n byQuantity: {},\n};\n\nexport default function reducer(state = portfolioInitialState, action: AnyAction): WeatherState {\n switch (action.type) {\n case WEATHER_DATA_REQUEST:\n return {\n ...state,\n error: undefined,\n isLoadingData: true,\n };\n case WEATHER_DATA_SUCCESS:\n const indexDefault: IndexDataMap = {\n cdd: [],\n crw: [],\n crf: [],\n fdd: [],\n };\n const indexData = (action.payload as WeatherDataResponse).data.reduce(\n (indexData: IndexDataMap, yrData: IndexDataRange) => {\n return {\n cdd: [...indexData.cdd, ...(yrData.cdd || [])],\n crf: [...indexData.crf, ...(yrData.crf || [])],\n crw: [...indexData.crw, ...(yrData.crw || [])],\n fdd: [...indexData.fdd, ...(yrData.fdd || [])],\n };\n },\n indexDefault,\n );\n\n const TEMPERATURE_SOURCE = 'chirps_usa_ca';\n const RAINFALL_SOURCE = 'era5_temp_h_usa_ca';\n\n const weatherData: WeatherDataMap = {\n temperature: {\n metadata: action.payload.source_metadata[TEMPERATURE_SOURCE],\n data: action.payload.source_data[0].data[TEMPERATURE_SOURCE],\n },\n rainfall: {\n metadata: action.payload.source_metadata[RAINFALL_SOURCE],\n data: action.payload.source_data[0].data[RAINFALL_SOURCE],\n },\n };\n\n return {\n ...state,\n isLoadingData: false,\n byIndex: indexData,\n byQuantity: weatherData,\n };\n case WEATHER_DATA_FAILURE:\n return {\n ...state,\n error: action.payload?.response as any,\n isLoadingData: false,\n };\n case LOGOUT:\n return {\n ...portfolioInitialState,\n };\n default:\n return state;\n }\n}\n\nexport const getWeatherData = (state: RootState) => state.weather.byQuantity;\nexport const getIndexData = (state: RootState) => state.weather.byIndex;\nexport const isLoadingData = (state: RootState) => state.weather.isLoadingData;\n","import {createSlice, PayloadAction} from \"@reduxjs/toolkit\";\nimport {v4 as uuid} from \"uuid\";\nimport {GraphQLResult} from \"@aws-amplify/api\";\nimport {ListQuotesQuery} from \"../API\";\nimport {products} from \"../containers/QuoteForm\";\n\nexport interface PayoutScheduleRow {\n fdd: number;\n loss: number;\n}\n\nexport interface ClaimHistoryRow {\n year: number;\n fdd: number;\n loss: number;\n payout: number;\n}\n\ninterface QuotePricing {\n premiumPerAcre: number;\n claimHistory: ClaimHistoryRow[],\n payoutSchedule: PayoutScheduleRow[],\n}\n\ninterface Location {\n name: string;\n latitude: number;\n longitude: number;\n}\n\ninterface Placement {\n insurer: string;\n expires_at: string;\n}\n\nexport type QuoteStatus = \"estimate\" | \"pending\" | \"submitted\" | \"firm offer\";\n\nexport interface Quote {\n id: string;\n client: string;\n crop: string;\n product: string;\n isArchived?: boolean;\n isShared?: boolean;\n status: QuoteStatus;\n initiated_at: string;\n sumInsuredPerAcre: number;\n acreage: number;\n pricing?: QuotePricing;\n placement?: Placement;\n submittedTo: Placement[];\n site: Location;\n riskPeriod: {\n start: string,\n end: string,\n }\n}\n\nexport interface Data {\n quotes: Quote[]\n}\n\nconst baseLocation = {\n name: 'Acme 502',\n latitude: 39.64009,\n longitude: -121.81930,\n};\n\nconst basePayoutSchedule: PayoutScheduleRow[] = [\n {fdd: 4.00, loss: 5},\n {fdd: 5.04, loss: 6.4},\n {fdd: 6.08, loss: 7.8},\n {fdd: 7.12, loss: 9.2},\n {fdd: 8.16, loss: 10.6},\n {fdd: 9.20, loss: 12.0},\n {fdd: 11.28, loss: 14.8},\n {fdd: 12.32, loss: 16.2},\n {fdd: 13.36, loss: 17.6},\n];\n\nexport const baseQuote: Quote = {\n id: '9b1deb4d3b7d4bad9bdd2b0d7b3dcb6d',\n client: 'Acme Agro',\n crop: 'Almond',\n product: 'almond-frost',\n initiated_at: new Date(\"2021-01-10T10:00:00Z\").toISOString(),\n sumInsuredPerAcre: 4932,\n acreage: 400,\n status: 'estimate',\n submittedTo: [],\n riskPeriod: {\n start: new Date(\"2021-02-11\").toISOString(),\n end: new Date(\"2021-03-20\").toISOString(),\n },\n pricing: {\n premiumPerAcre: 270.52,\n claimHistory: [\n {year: 2016, fdd: 0.0, loss: 0, payout: 0},\n {year: 2017, fdd: 4.88, loss: 5.00, payout: 125425.00},\n {year: 2018, fdd: 11.16, loss: 11.16, payout: 336139.00},\n {year: 2019, fdd: 12.79, loss: 12.79, payout: 406377.00},\n {year: 2020, fdd: 0.0, loss: 0, payout: 0},\n ],\n payoutSchedule: basePayoutSchedule,\n },\n site: baseLocation,\n};\n\nexport const initialData: Data = {\n quotes: [\n {\n ...baseQuote,\n id: '11b6056dadd54645abd807f768358f69',\n status: 'pending',\n initiated_at: new Date(\"2021-01-13T10:50:00Z\").toISOString(),\n pricing: undefined,\n }, {\n ...baseQuote,\n id: '5c6309604f2a4f3eb4879edc1d0ee032',\n status: 'firm offer',\n initiated_at: new Date(\"2021-01-13T10:50:00Z\").toISOString(),\n sumInsuredPerAcre: 2550,\n isShared: true,\n pricing: {\n premiumPerAcre: 315.25,\n claimHistory: [\n {year: 2016, fdd: 0.0, loss: 0, payout: 0},\n {year: 2017, fdd: 4.88, loss: 5.00, payout: 125425.00},\n {year: 2018, fdd: 11.16, loss: 11.16, payout: 336139.00},\n {year: 2019, fdd: 12.79, loss: 12.79, payout: 406377.00},\n {year: 2020, fdd: 0.0, loss: 0, payout: 0},\n ],\n payoutSchedule: basePayoutSchedule,\n },\n placement: {\n insurer: \"AXA Climate\",\n expires_at: new Date(\"2021-02-21T10:50:00Z\").toISOString(),\n },\n },\n {\n ...baseQuote,\n id: '9a6f6b37ef7049f8978dff338fbaffa0',\n status: 'submitted',\n sumInsuredPerAcre: 3020,\n initiated_at: new Date(\"2021-01-13T10:50:00Z\").toISOString(),\n submittedTo: [\n {\n insurer: \"AXA Climate\",\n expires_at: new Date(\"2021-02-21T10:50:00Z\").toISOString(),\n },\n {\n insurer: \"MunichRe\",\n expires_at: new Date(\"2021-02-21T10:50:00Z\").toISOString(),\n },\n ],\n site: {\n name: 'Acme 560',\n latitude: 40.64009,\n longitude: -121.81930,\n },\n },\n {\n ...baseQuote,\n client: 'Magnolia Inc.',\n id: '2a25bf1d89624843940980cd7bd81815',\n initiated_at: new Date(\"2021-01-11T11:50:00Z\").toISOString(),\n sumInsuredPerAcre: 2010,\n isShared: true,\n pricing: {\n premiumPerAcre: 412.7,\n claimHistory: [\n {year: 2016, fdd: 0.0, loss: 0, payout: 0},\n {year: 2017, fdd: 4.88, loss: 5.00, payout: 125425.00},\n {year: 2018, fdd: 11.16, loss: 11.16, payout: 336139.00},\n {year: 2019, fdd: 12.79, loss: 12.79, payout: 406377.00},\n {year: 2020, fdd: 0.0, loss: 0, payout: 0},\n ],\n payoutSchedule: basePayoutSchedule,\n },\n site: {\n name: 'Acme 570',\n latitude: 40.64009,\n longitude: -115.81930,\n },\n },\n\n {\n ...baseQuote,\n id: 'ebb1183e8d3a47159216e74e552d1ad9',\n initiated_at: new Date(\"2021-01-11T10:30:00Z\").toISOString(),\n sumInsuredPerAcre: 2050,\n isShared: true,\n pricing: {\n premiumPerAcre: 372.45,\n claimHistory: [\n {year: 2016, fdd: 0.0, loss: 0, payout: 0},\n {year: 2017, fdd: 4.88, loss: 5.00, payout: 125425.00},\n {year: 2018, fdd: 11.16, loss: 11.16, payout: 336139.00},\n {year: 2019, fdd: 12.79, loss: 12.79, payout: 406377.00},\n {year: 2020, fdd: 0.0, loss: 0, payout: 0},\n ],\n payoutSchedule: [\n {fdd: 10.0, loss: 10},\n {fdd: 11.2, loss: 11.2},\n ],\n }\n },\n {\n ...baseQuote,\n client: 'Magnolia Inc.',\n id: '2a25bf1d89624843940980cd7bd81816',\n initiated_at: new Date(\"2021-01-11T11:55:00Z\").toISOString(),\n sumInsuredPerAcre: 2010,\n pricing: {\n premiumPerAcre: 410.7,\n claimHistory: [\n {year: 2016, fdd: 0.0, loss: 0, payout: 0},\n {year: 2017, fdd: 4.88, loss: 5.00, payout: 125425.00},\n {year: 2018, fdd: 11.16, loss: 11.16, payout: 336139.00},\n {year: 2019, fdd: 12.79, loss: 12.79, payout: 406377.00},\n {year: 2020, fdd: 0.0, loss: 0, payout: 0},\n ],\n payoutSchedule: basePayoutSchedule,\n },\n site: {\n name: 'Acme 570',\n latitude: 40.64009,\n longitude: -115.81930,\n },\n },\n {\n ...baseQuote,\n },\n ],\n}\n\n\ninterface QuotesState {\n byId: {\n [quoteId: string]: Quote;\n };\n clients: {\n [quoteId: string]: string;\n }\n}\n\nconst initialState: QuotesState = {\n byId: {},\n clients: {},\n};\n\n\nconst quotesSlice = createSlice({\n name: 'quotes',\n initialState: initialState as QuotesState,\n reducers: {\n setQuotes: (state, action: PayloadAction) => {\n action.payload.forEach(x => {\n state.byId[x.id] = x;\n state.clients[x.client] = x.client;\n })\n },\n addQuote: (state, action: PayloadAction) => {\n const id = uuid().replace('-', '');\n const quote = action.payload;\n state.byId[id] = {\n ...quote,\n id,\n };\n state.clients[quote.client] = quote.client;\n },\n archiveQuote: (state, action: PayloadAction) => {\n state.byId[action.payload].isArchived = true;\n },\n enableSharing: (state, action: PayloadAction) => {\n state.byId[action.payload].isShared = true;\n },\n }\n});\n\nexport function dummyData(): Quote[] {\n return [\"1\", \"2\", \"3\"].map(id => ({\n ...baseQuote,\n id: id,\n } as Quote)) || []\n}\n\n// export function mapListQuotesQuery(listQuotes: GraphQLResult): Quote[] {\n// console.log(listQuotes.data?.listQuotes?.items);\n// return listQuotes.data?.listQuotes?.items?.map(todo => ({\n// ...baseQuote,\n// id: todo?.id,\n// client: todo?.client,\n// product: todo?.product,\n// sumInsuredPerAcre: todo?.sumInsuredPerAcre,\n// isArchived: todo?.isArchived ?? false,\n// isShared: todo?.isShared ?? false,\n// initiated_at: todo?.initiated_at,\n// status: todo?.status,\n// riskPeriod: todo?.riskPeriod,\n// pricing: todo?.pricing,\n// site: todo?.site,\n// acreage: todo?.acreage,\n// submittedTo: todo?.submittedTo ?? [],\n// placement: todo?.placement ,\n// crop: products[todo!.product].cropId ,\n// } as Quote)) || []\n// }\n\nexport const {addQuote, archiveQuote, enableSharing, setQuotes} = quotesSlice.actions\n\nexport const selectQuotesById = (state: QuotesState) => state.byId;\nexport const selectAllQuotes = (state: QuotesState) => Object.values(state.byId);\nexport const selectClients = (state: QuotesState) => Object.values(state.clients);\n\nexport default quotesSlice.reducer;\n","import { Action, configureStore, combineReducers, ThunkAction } from '@reduxjs/toolkit';\nimport { apiMiddleware } from 'redux-api-middleware';\nimport profileReducer from './profile';\nimport userReducer from './user';\nimport weatherReducer from './weather';\nimport quotesReducer from './quotesSlice';\nimport {useDispatch} from \"react-redux\";\n\nconst rootReducer = combineReducers({\n profile: profileReducer,\n user: userReducer,\n weather: weatherReducer,\n quotes: quotesReducer,\n})\nexport type RootState = ReturnType\n\nconst store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(apiMiddleware),\n devTools: process.env.NODE_ENV !== 'production',\n});\n\n\nexport default store;\nexport type AppDispatch = typeof store.dispatch\nexport const useAppDispatch = () => useDispatch()\nexport type AppThunk = ThunkAction>;\n","import { createMuiTheme } from '@material-ui/core/styles';\n\nconst headerFontFamily = '\"Nunito Sans\", Arial, Helvetica, sans-serif';\n\nconst theme = createMuiTheme({\n direction: 'ltr',\n typography: {\n fontFamily: ['\"Nunito Sans\"', 'Arial', 'Helvetica', 'sans-serif'].join(','),\n h1: { fontFamily: headerFontFamily },\n h2: { fontFamily: headerFontFamily },\n h3: { fontFamily: headerFontFamily },\n h4: { fontFamily: headerFontFamily },\n h5: { fontFamily: headerFontFamily },\n h6: { fontFamily: headerFontFamily },\n },\n palette: {\n primary: {\n light: '#7db447',\n main: '#3BAE65',\n dark: '#254b00',\n },\n secondary: {\n main: '#FCBF09',\n },\n info: {\n main: '#F2F2F2',\n },\n },\n});\n\nexport default theme;\n","import React from 'react';\n\nimport {makeStyles} from '@material-ui/core/styles';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\n\n//import locktonLogo from './lockton-logo.svg';\nimport logo from './logo-icon.svg';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = makeStyles((theme) => ({\n appBar: {\n // backgroundColor: '#121427',\n backgroundColor: '#1a202c',\n color: 'white',\n height: '65px',\n '& img': {\n marginRight: theme.spacing(1),\n },\n },\n iconWrapper: {\n margin: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n toolbar: {\n justifyContent: 'space-between',\n },\n loginButton: {\n marginRight: theme.spacing(2),\n },\n flex: {display: 'flex'},\n}));\n\ntype HeaderBarProps = {\n isAuthenticated: boolean;\n logout: () => void;\n};\n\nexport function HeaderBar(props: HeaderBarProps) {\n const {isAuthenticated, logout} = props;\n const classes = useStyles();\n\n return (\n \n \n
\n \"WorldCover\"/\n Quote Management Tool\n
\n
\n \n \n \n \n \n \n
\n {isAuthenticated && (\n \n \n \n )}\n
\n
\n );\n}\n\nexport default HeaderBar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport HeaderBar from './HeaderBar';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n },\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n },\n}));\n\ntype HeaderProps = {\n isAuthenticated: boolean;\n logout: () => void;\n};\n\nfunction Header({ isAuthenticated, logout }: HeaderProps) {\n // Hardcode login for now\n\n const classes = useStyles({});\n\n return (\n
\n \n \n\n {/*
*/}\n {/*
*/}\n {/*
*/}\n
\n );\n}\n\nHeader.propTypes = {\n /**\n * Injected by the documentation to work in an iframe.\n * You won't need it on your project.\n */\n container: PropTypes.instanceOf(typeof Element === 'undefined' ? Object : Element),\n};\n\nexport default Header;\n","import axios from 'axios';\nimport { API_ROOT } from '../env';\nimport { login, TokenData } from '../reducers/user';\nimport { Dispatch } from 'redux';\n\nconst LOGIN_ENDPOINT = `${API_ROOT}/auth`;\n\nexport default function swapMagicToken(\n magicToken: string,\n dispatch: Dispatch,\n handleError: (err: string) => void,\n) {\n axios\n .post(LOGIN_ENDPOINT, null, {\n headers: {\n Authorization: `Bearer ${magicToken}`,\n },\n })\n .then(({ data }: { data: TokenData }) => {\n localStorage.setItem('apitoken', JSON.stringify(data));\n dispatch(login(data.token));\n })\n .catch((e) => {\n // TODO redirect to error page\n console.error('saturn error', e);\n if (e.response?.status === 401 && e.response?.data.error_code === 'UNREGISTERED_USER') {\n handleError(e.response?.data.error_message);\n } else {\n handleError('Sorry! Something went wrong during login, please try again later');\n }\n });\n}\n","import React, {useState} from 'react';\n\nimport {useDispatch} from 'react-redux';\n\nimport {makeStyles} from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport {Theme} from '@material-ui/core';\nimport {Magic} from 'magic-sdk';\nimport TextField from '@material-ui/core/TextField';\nimport {MAGIC_API_KEY} from '../env';\nimport {Dispatch} from 'redux';\nimport swapMagicToken from '../utils/login';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport * as Sentry from '@sentry/browser';\nimport logo from '../components/worldcover_logo.png';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n padding: theme.spacing(2),\n margin: 'auto',\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n maxWidth: 400,\n },\n email: {\n width: 350,\n marginBottom: 20,\n },\n}));\n\nconst magic = new Magic(MAGIC_API_KEY);\n\nasync function magicLogin(\n email: string,\n dispatch: Dispatch,\n setError: React.Dispatch>,\n setLoading: Function,\n) {\n if (!email) return;\n\n try {\n setLoading(true);\n const magicToken = await magic.auth.loginWithMagicLink({email});\n\n if (magicToken != null) {\n swapMagicToken(magicToken, dispatch, setError);\n } else {\n setError('Sorry! Something went wrong during login, please try again.');\n }\n } catch (e) {\n setError('Sorry! Something went wrong during login, please try again.');\n Sentry.captureException(e);\n } finally {\n setLoading(false);\n }\n}\n\nexport default function LoginPage() {\n const classes = useStyles();\n const dispatch = useDispatch();\n const [email, setEmail] = useState('');\n const [isLoading, setLoading] = useState(false);\n const [error, setError] = useState();\n\n return (\n
\n
\n \"Worldcover\n

Quote Management Tool

\n
\n
\n

Login

\n

A login link will be sent to your email address

\n setEmail(event.target.value)}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n magicLogin(email, dispatch, setError, setLoading);\n ev.preventDefault();\n }\n }}\n />\n
\n magicLogin(email, dispatch, setError, setLoading)}\n >\n Log In\n {isLoading ? (\n \n ) : null}\n \n

\n Do you want to gain access to the Worldcover Quote Management Tool? Email us at{' '}\n sales@worldcovr.com\n

\n
\n
\n );\n}\n","import React from 'react';\nimport { Redirect, Route } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { isAuthenticated } from '../reducers/user';\n\nconst PrivateRoute = ({ component: Component, path, location, ...rest }: any) => {\n const isAuth = useSelector(isAuthenticated);\n\n const render = (props: any) => {\n if (isAuth === true) {\n return ;\n } else {\n return ;\n }\n };\n\n return ;\n};\n\nexport default PrivateRoute;\n","import React, {useEffect, useState} from 'react';\nimport ReactMapGL, {Marker} from 'react-map-gl';\n\nimport LocationOnIcon from '@material-ui/icons/LocationOn';\n\nimport {MAPBOX_TOKEN} from '../env';\n\ntype MapProps = {\n lat?: number;\n lng?: number;\n onClick?: (event: any) => void;\n width?: number;\n height?: number;\n};\n\nexport default function LocationMap(props: MapProps) {\n const {lat, lng, onClick, height = 400} = props;\n\n const [viewport, setViewport] = useState({\n height: height,\n latitude: lat,\n longitude: lng,\n zoom: 12\n });\n\n useEffect(() => {\n setViewport({...viewport, latitude: lat, longitude: lng,})\n }, [lat, lng])\n\n const popup = (lat && lng &&\n \n \n \n );\n\n return (\n setViewport(nextViewport)}\n >\n {popup}\n \n );\n}\n","import { TextFieldProps } from '@material-ui/core';\nimport React from 'react';\nimport NumberFormat from 'react-number-format';\nimport TextField from '@material-ui/core/TextField';\n\nfunction NumberFormatCustom(props: any) {\n const { inputRef, onChange, ...other } = props;\n\n return (\n {\n onChange({\n target: {\n name: props.name,\n value: values.value,\n },\n });\n }}\n thousandSeparator\n isNumericString\n prefix=\"$\"\n />\n );\n}\n\nexport default function AmountTextField(props: TextFieldProps) {\n const { onChange, value, label, ...other } = props;\n\n return (\n \n );\n}\n","import React, {useEffect, useState} from \"react\";\nimport {Crop, crops, Product, products} from \"../containers/QuoteForm\";\n\nfunction CropOption(props: { crop: Crop, isSelected?: boolean, isDisabled?: boolean, onClick: Function, className?: string }) {\n const {crop, isSelected = false, isDisabled = false, onClick} = props;\n\n return (\n
onClick()}\n className={`flex-none px-6 py-3 rounded-lg border shadow bg-white cursor-pointer text-center ${isSelected ? 'border-2 border-green-500' : ''}`}>\n

{crop.name}

\n
);\n}\n\nfunction ItemOption(props: { isSelected?: boolean, isDisabled?: boolean, onClick: Function, className?: string, children: React.ReactNode }) {\n const {isSelected = false, isDisabled = false, onClick, children} = props;\n\n return (\n
onClick()}\n className={`flex-none px-6 py-3 rounded-lg border shadow bg-white cursor-pointer text-center ${isSelected ? 'border-2 border-green-500' : ''}`}>\n {children}\n
);\n}\n\nexport interface ProductSelectorProps {\n value: string | null;\n styles?: string;\n\n onChange(product: string | null): void;\n}\n\nexport function ProductSelector(props: ProductSelectorProps) {\n const {value, onChange} = props;\n const initialProduct = value == null ? null : products[value];\n\n\n const [selectedCropId, setSelectedCrop] = useState('walnut');\n const [selectedProductId, setSelectedProduct] = useState(null);\n\n // runs once\n useEffect(() => {\n if (initialProduct) {\n console.log('initialProduct', initialProduct);\n setSelectedCrop(initialProduct.cropId);\n setSelectedProduct(initialProduct.id);\n }\n }, [initialProduct])\n\n // // cancel product selection when crop changes\n // useEffect(() => {\n // setSelectedProduct(null);\n // }, [selectedCropId])\n\n useEffect(() => {\n onChange(selectedProductId);\n }, [selectedProductId])\n\n useEffect(() => {\n console.log('selectedCropId', selectedCropId);\n console.log('selectedProductId', selectedProductId);\n }, [selectedCropId, selectedProductId])\n\n return <>\n
\n

Crop

\n
\n {Object.values(crops).map((x, index) => setSelectedCrop(x.id)}/>)}\n\n
\n
\n
\n

Peril

\n
\n\n {crops[selectedCropId].products.map((productId: any, index: number) => {\n const product = products[productId];\n\n return product &&\n setSelectedProduct(productId)}>\n
{product.name}
\n
\n })}\n
\n
\n\n
\n

Selected Product

\n {selectedProductId ?\n
\n CropAssure {products[selectedProductId]?.name}\n
:\n
None
\n }\n
\n ;\n}\n","import React, {useContext, useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport moment from 'moment';\nimport {useHistory, useLocation} from \"react-router-dom\";\nimport {v4 as uuid} from 'uuid';\n\nimport {makeStyles} from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Paper from '@material-ui/core/Paper';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport {DatePicker} from '@material-ui/pickers';\n\nimport AmountTextField from '../components/AmountTextField';\nimport {RootState, useAppDispatch} from '../reducers';\nimport LocationMap from \"../components/LocationMap\";\nimport {ProductSelector} from \"../components/ProductSelector\";\nimport {addQuote, baseQuote, Quote, QuoteStatus} from '../reducers/quotesSlice';\nimport {API, graphqlOperation} from \"aws-amplify\";\nimport {createQuote} from \"../graphql/mutations\";\n\nconst useStyles = makeStyles((theme) => ({\n title: {marginLeft: theme.spacing(4), marginTop: theme.spacing(2)},\n root: {\n flexGrow: 1,\n },\n margin: {\n margin: theme.spacing(1),\n },\n map: {marginTop: theme.spacing(2)},\n actionWrapper: {\n margin: theme.spacing(4),\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n },\n error: {color: theme.palette.error.main},\n button: {maxWidth: 450, padding: '16px'},\n paper: {\n // height: '100%',\n padding: theme.spacing(4\n ),\n marginTop: theme.spacing(4),\n },\n textField: {\n marginTop: theme.spacing(2),\n marginRight: theme.spacing(2),\n minWidth: 300,\n },\n summaryWrapper: {\n width: '100%',\n padding: theme.spacing(4),\n },\n}));\n\nexport interface Crop {\n id: string;\n name: string;\n icon?: string;\n products: string[];\n}\n\nexport interface Product {\n id: string;\n name: string;\n cropId: string;\n}\n\nexport const products: { [key: string]: Product } = {\n 'walnut-frost': {\n id: 'walnut-frost',\n name: 'Walnut Frost',\n cropId: 'walnut',\n },\n 'walnut-drought': {\n id: 'walnut-drought',\n name: 'Walnut Drought',\n cropId: 'walnut',\n },\n 'walnut-excess-rain': {\n id: 'walnut-excess-rain',\n name: 'Walnut Excess Rain',\n cropId: 'walnut',\n },\n 'almond-frost': {\n id: 'almond-frost',\n name: 'Almond Frost',\n cropId: 'almond',\n },\n 'almond-drought': {\n id: 'almond-drought',\n name: 'Almond Drought',\n cropId: 'almond',\n },\n 'citrus-frost': {\n id: 'citrus-frost',\n name: 'Citrus Frost',\n cropId: 'citrus',\n },\n 'pistachio-frost': {\n id: 'pistachio-frost',\n name: 'Pistachio Frost',\n cropId: 'pistachio',\n },\n};\n\nexport const crops: { [key: string]: Crop } = {\n 'walnut': {\n id: 'walnut',\n name: 'Walnut',\n products: [\n 'walnut-frost',\n 'walnut-drought',\n ],\n },\n 'almond': {\n id: 'almond',\n name: 'Almond',\n products: ['almond-frost', 'almond-drought'],\n },\n 'citrus': {\n id: 'citrus',\n name: 'Citrus',\n products: ['citrus-frost'],\n },\n 'pistachio': {\n id: 'pistachio',\n name: 'Pistachio',\n products: ['pistachio-frost'],\n },\n};\n\nexport default function QuoteForm() {\n const dispatch = useAppDispatch();\n const query = useQuery();\n const classes = useStyles();\n const history = useHistory();\n\n function useQuery() {\n return new URLSearchParams(useLocation().search);\n }\n\n const {byId: quotesById} = useSelector((state: RootState) => state.quotes);\n\n const quoteId = query.get(\"revise\");\n const quoteToBeRevised = quoteId ? quotesById[quoteId] : null;\n\n const [selectedProductId, setSelectedProductId] = useState(null);\n\n useEffect(() => {\n if (quoteToBeRevised) setSelectedProductId(quoteToBeRevised.product);\n }, [quoteToBeRevised])\n\n useEffect(() => {\n // console.log('selectedProductId', selectedProductId);\n }, [selectedProductId])\n\n const [errorText, setError] = useState();\n\n const [company, setCompany] = useState(quoteToBeRevised?.client ?? '');\n const [anchorValue, setAnchorValue] = useState(quoteToBeRevised?.sumInsuredPerAcre ?? 1000);\n\n const [acreage, setAcreage] = useState(quoteToBeRevised?.acreage ?? 200);\n\n const [crop, setCrop] = useState(quoteToBeRevised?.crop ?? '');\n const [peril, setPeril] = useState('');\n\n const [location, setLocation] = useState(\n {\n name: quoteToBeRevised?.site.name ?? '',\n lat: quoteToBeRevised?.site.latitude ?? 39.64,\n lng: quoteToBeRevised?.site.longitude ?? -121.82,\n });\n\n const [startDate, setStartDate] = useState(\n quoteToBeRevised && quoteToBeRevised.riskPeriod ? moment(quoteToBeRevised.riskPeriod.start) : moment('2020-02-08'),\n );\n const [endDate, setEndDate] = useState(\n quoteToBeRevised && quoteToBeRevised.riskPeriod ? moment(quoteToBeRevised.riskPeriod.end) : moment('2020-03-10'),\n );\n\n const requestQuote = async () => {\n if (selectedProductId == null) {\n setError('You need to select a product.')\n return;\n }\n\n const quote = {\n ...baseQuote,\n id: uuid(),\n status: 'pending' as QuoteStatus,\n initiated_at: new Date().toISOString(),\n pricing: undefined,\n client: company,\n crop: crop,\n product: selectedProductId,\n sumInsuredPerAcre: anchorValue,\n acreage: acreage,\n submittedTo: [],\n riskPeriod: {\n start: startDate.toISOString(),\n end: endDate.toISOString(),\n },\n site: {\n latitude: location.lat,\n longitude: location.lng,\n name: location.name,\n },\n };\n\n // dispatch(addQuote(quote));\n\n function mapQuoteToInput(quote:Quote) {\n return {\n product: quote.product,\n status: quote.status,\n initiated_at: quote.initiated_at,\n site: quote.site,\n client: quote.client,\n sumInsuredPerAcre: quote.sumInsuredPerAcre,\n acreage: quote.acreage,\n riskPeriod: quote.riskPeriod,\n }\n }\n\n try {\n await API.graphql(graphqlOperation(createQuote, {input: mapQuoteToInput(quote)}))\n } catch (e) {\n console.error(e);\n }\n\n history.push('/quotes');\n }\n\n return (\n
\n
\n

Request Quote

\n\n \n {\n setSelectedProductId(productId);\n }}\n />\n \n\n \n Basic Information\n setCompany(ev.target.value)}\n label=\"Client Name\"\n placeholder=\"Acme Agro\"\n variant=\"outlined\"\n />\n
\n setAnchorValue(parseInt(ev.target.value, 10))}\n />\n setAcreage(parseInt(ev.target.value, 10))}\n />\n
\n
\n
Sum Insured
\n
$ {(anchorValue * acreage).toLocaleString()}
\n
\n
\n \n Coverage Period\n date && !Array.isArray(date) && setStartDate(date)}\n value={startDate}\n />\n date && !Array.isArray(date) && setEndDate(date)}\n />\n
Duration: {endDate.diff(startDate, 'days', true)} days
\n
\n\n \n Production Site\n\n {\n const lat = parseFloat(ev.target.value);\n if (!isNaN(lat)) setLocation({...location, lat});\n }}\n />\n {\n const lng = parseFloat(ev.target.value);\n if (!isNaN(lng)) setLocation({...location, lng});\n }}\n\n />\n setLocation({...location, name: ev.target.value})}\n />\n
\n \n
\n
\n\n
\n {errorText && (\n
\n {errorText}\n
\n )}\n \n \n Request a Quote\n \n \n
\n
\n
\n );\n}\n","/* tslint:disable */\n/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const createQuote = /* GraphQL */ `\n mutation CreateQuote(\n $input: CreateQuoteInput!\n $condition: ModelQuoteConditionInput\n ) {\n createQuote(input: $input, condition: $condition) {\n id\n client\n product\n isArchived\n isShared\n status\n initiated_at\n sumInsuredPerAcre\n acreage\n pricing {\n premiumPerAcre\n claimHistory {\n year\n fdd\n loss\n payout\n }\n payoutSchedule {\n fdd\n loss\n }\n }\n placement {\n insurer\n expires_at\n }\n submittedTo {\n insurer\n expires_at\n }\n site {\n name\n latitude\n longitude\n }\n riskPeriod {\n start\n end\n }\n userId\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateQuote = /* GraphQL */ `\n mutation UpdateQuote(\n $input: UpdateQuoteInput!\n $condition: ModelQuoteConditionInput\n ) {\n updateQuote(input: $input, condition: $condition) {\n id\n client\n product\n isArchived\n isShared\n status\n initiated_at\n sumInsuredPerAcre\n acreage\n pricing {\n premiumPerAcre\n claimHistory {\n year\n fdd\n loss\n payout\n }\n payoutSchedule {\n fdd\n loss\n }\n }\n placement {\n insurer\n expires_at\n }\n submittedTo {\n insurer\n expires_at\n }\n site {\n name\n latitude\n longitude\n }\n riskPeriod {\n start\n end\n }\n userId\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteQuote = /* GraphQL */ `\n mutation DeleteQuote(\n $input: DeleteQuoteInput!\n $condition: ModelQuoteConditionInput\n ) {\n deleteQuote(input: $input, condition: $condition) {\n id\n client\n product\n isArchived\n isShared\n status\n initiated_at\n sumInsuredPerAcre\n acreage\n pricing {\n premiumPerAcre\n claimHistory {\n year\n fdd\n loss\n payout\n }\n payoutSchedule {\n fdd\n loss\n }\n }\n placement {\n insurer\n expires_at\n }\n submittedTo {\n insurer\n expires_at\n }\n site {\n name\n latitude\n longitude\n }\n riskPeriod {\n start\n end\n }\n userId\n createdAt\n updatedAt\n }\n }\n`;\nexport const createProduct = /* GraphQL */ `\n mutation CreateProduct(\n $input: CreateProductInput!\n $condition: ModelProductConditionInput\n ) {\n createProduct(input: $input, condition: $condition) {\n id\n name\n cropId\n isActive\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateProduct = /* GraphQL */ `\n mutation UpdateProduct(\n $input: UpdateProductInput!\n $condition: ModelProductConditionInput\n ) {\n updateProduct(input: $input, condition: $condition) {\n id\n name\n cropId\n isActive\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteProduct = /* GraphQL */ `\n mutation DeleteProduct(\n $input: DeleteProductInput!\n $condition: ModelProductConditionInput\n ) {\n deleteProduct(input: $input, condition: $condition) {\n id\n name\n cropId\n isActive\n createdAt\n updatedAt\n }\n }\n`;\n","import moment from \"moment\";\n\nexport const isEmpty = (obj: Object) => Object.getOwnPropertyNames(obj).length === 0;\n\nexport function formatDateTime(dateString: string):string {\n return moment(dateString).format('YYYY/MM/DD hh:mm A');\n}\nexport function formatDate(dateString: string):string {\n return moment(dateString).format('YYYY/MM/DD');\n}","import React, {useContext, useEffect, useState} from 'react';\n\nimport {CartesianGrid, Legend, Line, LineChart, Tooltip, XAxis, YAxis} from \"recharts\";\nimport LocationMap from \"./LocationMap\";\nimport {products} from \"../containers/QuoteForm\";\nimport {formatDate, formatDateTime} from \"../utils\";\nimport {ClaimHistoryRow, PayoutScheduleRow, Quote} from \"../reducers/quotesSlice\";\n\nfunction Info(props: { label: string, value: string, styles?: string }) {\n return (\n
\n
{props.label}
\n
{props.value}
\n
);\n}\n\nfunction ClaimHistoryTable(props: { claimHistory: ClaimHistoryRow[], className?: string }) {\n const {claimHistory, className} = props;\n\n return (\n \n \n \n \n \n \n \n \n \n \n {claimHistory.map(x => (\n \n \n \n \n \n \n ))}\n \n
YearFDDModelled LossPayout
{x.year}{x.fdd.toFixed(2)}{x.loss.toFixed(2)} %$ {x.payout.toLocaleString()}
);\n}\n\nfunction PayoutScheduleTable(props: { rows: PayoutScheduleRow[], className?: string }) {\n const {rows, className} = props;\n\n return (\n \n \n \n \n \n \n \n \n {rows.map((x, index) => (\n \n \n \n \n ))}\n \n
Frost Degree DayPayout (pct. of SI)
{x.fdd.toFixed(2)}{x.loss.toFixed(2)} %
);\n}\n\nexport function getSharedUrl(quote: Quote) {\n const baseUrl = process.env.REACT_APP_BASE_URL ?? 'https://quotes.worldcovr.com';\n return `${baseUrl}/shared/${quote.id}`\n}\n\nexport default function QuoteDetails(props: { quote: Quote, isPublic?: boolean, className?: string }) {\n const {quote, isPublic = false} = props;\n const [showIndexDetails, setShowIndexDetails] = useState(false);\n\n return (\n
\n\n
\n {(quote.isShared && !isPublic) &&\n \n }\n

\n CropAssure™ {products[quote.product].name} {formatDateTime(quote.initiated_at)}\n

\n\n {quote.placement &&\n
\n

\n Placed with: {quote.placement.insurer}\n

\n
\n }\n\n {quote.submittedTo.length > 0 &&\n
\n

\n Submitted to: {quote.submittedTo.map(x => {x.insurer})}\n

\n
\n }\n
\n \n \n \n \n {quote.pricing && }\n
\n\n {quote.pricing == null ? (
\n
Quote being processed ...
\n
) :\n (\n
\n
\n PREMIUM: $ {quote.pricing.premiumPerAcre.toLocaleString()} / acre\n
\n\n
\n
\n \n
\n\n {showIndexDetails &&\n
\n \n \n \n \n \n
}\n\n
\n

Location

\n

{quote.site.name} ({quote.site.latitude},{quote.site.longitude})

\n \n
\n\n
\n

Payout Schedule

\n
\n \n\n
\n \n \n \n \n \n \n \n \n
\n
\n\n
\n
\n

Claim History

\n
\n \n
\n
\n
\n
\n

\n *Disclaimer: This tool enables for instant quotes of several Worldcover's parametric\n insurance products. Although our premium estimates rely on highest standard in\n actuarial science applied to parametric insurance, there are only indicative and\n neither worldcover nor its insurance and reinsurance partner can guarantee that the\n covers could be purchased at the estimated price. In case the client would confirm\n its interest for one of the structure and its estimated price, worldcover will work\n with broker partners and (re)insurers to get the best firm offer as soon as\n possible.\n

\n
\n\n\n
\n )\n }\n\n
\n
);\n}","import React, {useEffect, useState} from 'react';\nimport {Link,} from \"react-router-dom\";\n\nimport QuoteDetails, {getSharedUrl} from \"../components/QuoteDetails\";\nimport {products} from \"./QuoteForm\";\nimport {FormControl, InputLabel, MenuItem, Modal, Select} from \"@material-ui/core\";\nimport makeStyles from \"@material-ui/core/styles/makeStyles\";\nimport {useSelector} from \"react-redux\";\nimport {\n enableSharing,\n setQuotes,\n archiveQuote,\n Quote,\n QuoteStatus,\n initialData,\n dummyData\n} from \"../reducers/quotesSlice\";\nimport {RootState, useAppDispatch} from \"../reducers\";\nimport moment from \"moment\";\nimport {formatDateTime} from \"../utils\";\nimport { API, graphqlOperation } from 'aws-amplify'\nimport { GraphQLResult } from \"@aws-amplify/api\";\nimport {listQuotes} from \"../graphql/queries\";\nimport {ListQuotesQuery} from \"../API\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n position: 'absolute',\n width: 600,\n backgroundColor: theme.palette.background.paper,\n border: '2px solid #000',\n boxShadow: theme.shadows[5],\n padding: theme.spacing(5, 8),\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: 120,\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n}));\n\nfunction rand() {\n return Math.round(Math.random() * 20) - 10;\n}\n\nfunction getModalStyle() {\n const top = 50 + rand();\n const left = 50 + rand();\n\n return {\n top: `${top}%`,\n left: `${left}%`,\n transform: `translate(-${top}%, -${left}%)`,\n };\n}\n\n\nfunction QuoteLabel(props: { quote: Quote, onClick: Function, isActive?: boolean, styles?: string }) {\n const {quote, onClick, isActive = false} = props;\n\n function statusPillBg(status: QuoteStatus) {\n switch (status) {\n case 'pending':\n return 'bg-gray-600';\n case 'estimate':\n return 'bg-green-600';\n case 'firm offer':\n return 'bg-yellow-600';\n case 'submitted':\n return 'bg-orange-500';\n default:\n return 'bg-green-600';\n }\n }\n\n return (\n
onClick()}\n className={`p-2 border-b cursor-pointer hover:bg-gray-200 ${isActive ? 'bg-gray-200' : ''} ${props.styles}`}>\n
\n {/*
Quote #{quote.id}
*/}\n
{quote.client}
\n\n {quote.status}\n
\n
\n {products[quote.product].name} - {formatDateTime(quote.initiated_at)}\n
\n {quote.pricing &&\n
$ {quote.pricing.premiumPerAcre.toLocaleString()}
}\n
);\n}\n\nfunction compareQuotes(a: Quote, b: Quote): number {\n if (moment(a.initiated_at).isBefore(b.initiated_at)) return 1;\n if (moment(a.initiated_at).isAfter(b.initiated_at)) return -1;\n return 0;\n}\n\nexport default function QuotesPage() {\n const dispatch = useAppDispatch();\n\n const quotesById = useSelector((state: RootState) => state.quotes.byId);\n const allQuotes = useSelector((state: RootState) => Object.values(state.quotes.byId).sort(compareQuotes));\n\n const clients = useSelector((state: RootState) => Object.values(state.quotes.clients));\n\n const classes = useStyles();\n const [modalStyle] = React.useState(getModalStyle);\n\n\n const [showModal, setShowModal] = useState(false);\n const [selectedQuoteIndex, setSelectedQuoteIndex] = useState(0);\n\n const [clientFilter, setClientFilter] = useState('all');\n\n const filteredQuotes = allQuotes.filter(x => {\n if(x.isArchived) return false;\n return clientFilter === 'all' || x.client === clientFilter;\n });\n\n const currentQuote = filteredQuotes[selectedQuoteIndex];\n\n\n useEffect( () => {\n async function fetchData() {\n // const response = (await API.graphql(graphqlOperation(listQuotes))) as GraphQLResult;\n const quotes: Quote[] = dummyData();\n dispatch(setQuotes(quotes));\n }\n\n fetchData();\n }, [dispatch]);\n\n function shareQuote(quote: Quote) {\n // make quote public\n dispatch(enableSharing(quote.id));\n\n // show popup with link\n setShowModal(true);\n }\n\n if (!currentQuote) return
Loading..
;\n\n function archive(currentQuote: Quote) {\n dispatch(archiveQuote(currentQuote.id));\n }\n\n return (\n
\n
\n

All Quotes

\n
\n
\n
\n \n Filter client\n {\n if (event.target.value) {\n setClientFilter(event.target.value as string);\n }\n }}\n >\n All\n {clients.map(x => {x})}\n \n \n
\n
\n
\n archive(currentQuote)}\n className=\"px-6 py-4 bg-gray-600 text-white rounded shadow-md flex items-center space-x-2 uppercase\">\n \n \n \n
Archive
\n \n \n \n \n \n \n
Revise
\n \n \n {currentQuote.pricing &&\n shareQuote(currentQuote)}\n className=\"px-6 py-4 bg-green-600 text-white rounded shadow-md flex items-center space-x-2 uppercase\">\n \n \n \n
Share
\n }\n
\n
\n
\n
\n
\n {filteredQuotes.map((x, index) =>\n setSelectedQuoteIndex(index)}\n />)}\n
\n\n
\n \n
\n
\n {\n setShowModal(false)\n }}\n aria-labelledby=\"simple-modal-title\"\n aria-describedby=\"simple-modal-description\"\n >\n
\n

Share this quote

\n \n
\n \n
\n );\n}\n","import React, {useContext, useEffect, useState} from 'react';\nimport {Link, Redirect, useParams} from \"react-router-dom\";\n\nimport QuoteDetails from \"../components/QuoteDetails\";\nimport {useSelector} from \"react-redux\";\nimport {RootState} from \"../reducers\";\n\nexport default function SharedQuote() {\n let {quoteId} = useParams();\n const quotesById = useSelector((state: RootState) => state.quotes.byId);\n\n const quote = quotesById[quoteId];\n\n if (!quote || !quote.isShared) {\n return \n }\n\n return (\n
\n \n
\n );\n}\n","import React, {useState, useEffect} from 'react';\nimport {Redirect, Switch, Route, Link, useLocation} from 'react-router-dom';\n\nimport './App.css';\nimport './styles/main.css';\n\nimport Header from './components/Header';\nimport LoginPage from './containers/LoginPage';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {isAuthenticated, logout as logoutFn} from './reducers/user';\nimport PrivateRoute from './components/PrivateRoute';\nimport QuotesPage from \"./containers/QuotesPage\";\nimport QuoteForm from \"./containers/QuoteForm\";\nimport SharedQuote from \"./containers/SharedQuote\";\n\nconst App = () => {\n const isAuth = useSelector(isAuthenticated);\n const dispatch = useDispatch();\n const logout = () => dispatch(logoutFn());\n\n return (\n <>\n
\n {isAuth ?
: null}\n \n \n \n \n {isAuth ? : null}\n {isAuth ? : null}\n\n\n \n {isAuth === false ? : null}\n\n \n
\n \n );\n};\n\nexport default App;\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-east-1\",\n \"aws_appsync_graphqlEndpoint\": \"https://5i2s5gnjhjfrxdgwvrpwvdyzye.appsync-api.us-east-1.amazonaws.com/graphql\",\n \"aws_appsync_region\": \"us-east-1\",\n \"aws_appsync_authenticationType\": \"API_KEY\",\n \"aws_appsync_apiKey\": \"da2-rrqb3yapkzbhbimrp4xjho6za4\"\n};\n\n\nexport default awsmobile;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {BrowserRouter as Router} from 'react-router-dom';\n\nimport {Provider as ReduxProvider} from 'react-redux';\nimport store from './reducers';\n\nimport {ThemeProvider} from '@material-ui/core/styles';\nimport theme from './muiTheme';\n\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\n\nimport './index.css';\nimport App from './App';\n\nimport Amplify from 'aws-amplify'\nimport config from './aws-exports'\nAmplify.configure(config)\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root'),\n);\n"],"sourceRoot":""}