{"version":3,"sources":["assets/logos/linkedin.png","store/WeatherForecasts.ts","store/index.ts","store/Counter.ts","components/Layout.tsx","components/Home.tsx","components/Counter.tsx","App.tsx","registerServiceWorker.ts","index.tsx","store/configureStore.ts"],"names":["module","exports","unloadedState","forecasts","isLoading","reducers","counter","state","incomingAction","undefined","count","type","weatherForecasts","action","startDateIndex","props","Container","fluid","className","children","Row","noGutters","connect","href","src","LinkedInIcon","alt","Counter","React","render","aria-live","this","onClick","increment","decrement","Layout","exact","path","component","Home","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","catch","error","baseUrl","document","getElementsByTagName","getAttribute","history","createBrowserHistory","basename","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","push","createStore","compose","applyMiddleware","configureStore","ReactDOM","App","getElementById","URL","process","toString","origin","addEventListener","fetch","response","contentType","headers","get","status","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.a546d8e7.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","import { Action, Reducer } from 'redux';\r\nimport { AppThunkAction } from './';\r\n\r\n// -----------------\r\n// STATE - This defines the type of data maintained in the Redux store.\r\n\r\nexport interface WeatherForecastsState {\r\n isLoading: boolean;\r\n startDateIndex?: number;\r\n forecasts: WeatherForecast[];\r\n}\r\n\r\nexport interface WeatherForecast {\r\n date: string;\r\n temperatureC: number;\r\n temperatureF: number;\r\n summary: string;\r\n}\r\n\r\n// -----------------\r\n// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.\r\n// They do not themselves have any side-effects; they just describe something that is going to happen.\r\n\r\ninterface RequestWeatherForecastsAction {\r\n type: 'REQUEST_WEATHER_FORECASTS';\r\n startDateIndex: number;\r\n}\r\n\r\ninterface ReceiveWeatherForecastsAction {\r\n type: 'RECEIVE_WEATHER_FORECASTS';\r\n startDateIndex: number;\r\n forecasts: WeatherForecast[];\r\n}\r\n\r\n// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the\r\n// declared type strings (and not any other arbitrary string).\r\ntype KnownAction = RequestWeatherForecastsAction | ReceiveWeatherForecastsAction;\r\n\r\n// ----------------\r\n// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.\r\n// They don't directly mutate state, but they can have external side-effects (such as loading data).\r\n\r\nexport const actionCreators = {\r\n requestWeatherForecasts: (startDateIndex: number): AppThunkAction => (dispatch, getState) => {\r\n // Only load data if it's something we don't already have (and are not already loading)\r\n const appState = getState();\r\n if (appState && appState.weatherForecasts && startDateIndex !== appState.weatherForecasts.startDateIndex) {\r\n fetch(`weatherforecast`)\r\n .then(response => response.json() as Promise)\r\n .then(data => {\r\n dispatch({ type: 'RECEIVE_WEATHER_FORECASTS', startDateIndex: startDateIndex, forecasts: data });\r\n });\r\n\r\n dispatch({ type: 'REQUEST_WEATHER_FORECASTS', startDateIndex: startDateIndex });\r\n }\r\n }\r\n};\r\n\r\n// ----------------\r\n// REDUCER - For a given state and action, returns the new state. To support time travel, this must not mutate the old state.\r\n\r\nconst unloadedState: WeatherForecastsState = { forecasts: [], isLoading: false };\r\n\r\nexport const reducer: Reducer = (state: WeatherForecastsState | undefined, incomingAction: Action): WeatherForecastsState => {\r\n if (state === undefined) {\r\n return unloadedState;\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'REQUEST_WEATHER_FORECASTS':\r\n return {\r\n startDateIndex: action.startDateIndex,\r\n forecasts: state.forecasts,\r\n isLoading: true\r\n };\r\n case 'RECEIVE_WEATHER_FORECASTS':\r\n // Only accept the incoming data if it matches the most recent request. This ensures we correctly\r\n // handle out-of-order responses.\r\n if (action.startDateIndex === state.startDateIndex) {\r\n return {\r\n startDateIndex: action.startDateIndex,\r\n forecasts: action.forecasts,\r\n isLoading: false\r\n };\r\n }\r\n break;\r\n }\r\n\r\n return state;\r\n};\r\n","import * as WeatherForecasts from './WeatherForecasts';\r\nimport * as Counter from './Counter';\r\n\r\n// The top-level state object\r\nexport interface ApplicationState {\r\n counter: Counter.CounterState | undefined;\r\n weatherForecasts: WeatherForecasts.WeatherForecastsState | undefined;\r\n}\r\n\r\n// Whenever an action is dispatched, Redux will update each top-level application state property using\r\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\r\n// acts on the corresponding ApplicationState property type.\r\nexport const reducers = {\r\n counter: Counter.reducer,\r\n weatherForecasts: WeatherForecasts.reducer\r\n};\r\n\r\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\r\n// correctly typed to match your store.\r\nexport interface AppThunkAction {\r\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\r\n}\r\n","import { Action, Reducer } from 'redux';\r\n\r\n// -----------------\r\n// STATE - This defines the type of data maintained in the Redux store.\r\n\r\nexport interface CounterState {\r\n count: number;\r\n}\r\n\r\n// -----------------\r\n// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.\r\n// They do not themselves have any side-effects; they just describe something that is going to happen.\r\n// Use @typeName and isActionType for type detection that works even after serialization/deserialization.\r\n\r\nexport interface IncrementCountAction { type: 'INCREMENT_COUNT' }\r\nexport interface DecrementCountAction { type: 'DECREMENT_COUNT' }\r\n\r\n// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the\r\n// declared type strings (and not any other arbitrary string).\r\nexport type KnownAction = IncrementCountAction | DecrementCountAction;\r\n\r\n// ----------------\r\n// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.\r\n// They don't directly mutate state, but they can have external side-effects (such as loading data).\r\n\r\nexport const actionCreators = {\r\n increment: () => ({ type: 'INCREMENT_COUNT' } as IncrementCountAction),\r\n decrement: () => ({ type: 'DECREMENT_COUNT' } as DecrementCountAction)\r\n};\r\n\r\n// ----------------\r\n// REDUCER - For a given state and action, returns the new state. To support time travel, this must not mutate the old state.\r\n\r\nexport const reducer: Reducer = (state: CounterState | undefined, incomingAction: Action): CounterState => {\r\n if (state === undefined) {\r\n return { count: 0 };\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'INCREMENT_COUNT':\r\n return { count: state.count + 1 };\r\n case 'DECREMENT_COUNT':\r\n return { count: state.count - 1 };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import * as React from 'react';\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport NavMenu from './NavMenu';\r\n\r\nexport default (props: { children?: React.ReactNode }) => (\r\n \r\n {/**/}\r\n \r\n
\r\n {props.children}\r\n
\r\n \r\n \r\n \r\n\r\n \r\n {/**/}\r\n {/* */}\r\n \r\n {/* */}\r\n {/**/}\r\n
\r\n
\r\n);\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport LinkedInIcon from '../assets/logos/linkedin.png';\r\n\r\n\r\nconst Home = () => (\r\n
\r\n

aete consulting

\r\n
\r\n \r\n tobias@aete.se\r\n \r\n
\r\n\r\n \r\n \"logo\"\r\n \r\n \r\n {/* \"logo\"*/}\r\n\r\n
\r\n);\r\n\r\nexport default connect()(Home);\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { RouteComponentProps } from 'react-router';\r\nimport { ApplicationState } from '../store';\r\nimport * as CounterStore from '../store/Counter';\r\n\r\ntype CounterProps =\r\n CounterStore.CounterState &\r\n typeof CounterStore.actionCreators &\r\n RouteComponentProps<{}>;\r\n\r\nclass Counter extends React.PureComponent {\r\n public render() {\r\n return (\r\n \r\n

Hello

\r\n\r\n

So you're snooping around? Here you have a counter to play with.

\r\n\r\n

It's easy, just press the button.

\r\n\r\n

Current count: {this.props.count}

\r\n\r\n \r\n
\r\n );\r\n }\r\n};\r\n\r\nexport default connect(\r\n (state: ApplicationState) => state.counter,\r\n CounterStore.actionCreators\r\n)(Counter);\r\n","import * as React from 'react';\r\nimport { Route } from 'react-router';\r\nimport Layout from './components/Layout';\r\nimport Home from './components/Home';\r\nimport Counter from './components/Counter';\r\nimport FetchData from './components/FetchData';\r\n\r\nimport './custom.css'\r\n\r\nexport default () => (\r\n \r\n \r\n \r\n \r\n);\r\n\r\n//\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const url = process.env.PUBLIC_URL as string;\r\n const publicUrl = new URL(url, window.location.toString());\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing as ServiceWorker;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\n\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport configureStore from './store/configureStore';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\n// Create browser history to use in the Redux store\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nconst history = createBrowserHistory({ basename: baseUrl });\r\n\r\n// Get the application-wide store instance, prepopulating with state from the server where available.\r\nconst store = configureStore(history);\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n\r\nregisterServiceWorker();\r\n","import { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\r\nimport { History } from 'history';\r\nimport { ApplicationState, reducers } from './';\r\n\r\nexport default function configureStore(history: History, initialState?: ApplicationState) {\r\n const middleware = [\r\n thunk,\r\n routerMiddleware(history)\r\n ];\r\n\r\n const rootReducer = combineReducers({\r\n ...reducers,\r\n router: connectRouter(history)\r\n });\r\n\r\n const enhancers = [];\r\n const windowIfDefined = typeof window === 'undefined' ? null : window as any;\r\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n compose(applyMiddleware(...middleware), ...enhancers)\r\n );\r\n}\r\n"],"sourceRoot":""}