{"version":3,"sources":["theme/index.ts","presentational/Button/index.tsx","presentational/Layout/index.tsx","presentational/FlexBox/index.tsx","presentational/HeaderSearch/HeaderSearchStyles.ts","presentational/HeaderSearch/index.tsx","presentational/NavItem/NavItemStyles.tsx","presentational/NavItem/index.tsx","presentational/Header/HeaderStyles.tsx","presentational/Header/index.tsx","presentational/WordList/index.tsx","presentational/Card/index.tsx","store/search.ts","containers/WordSearch.tsx","store/themes.ts","containers/ThemeSelection.ts","presentational/ThemeSelect/index.tsx","containers/HeaderSearchContainer.tsx","App.tsx","registerServiceWorker.ts","store/counters.ts","store/index.ts","index.tsx"],"names":["theme_a","styled_components_browser_esm","styled","default","css","ThemeProvider","keyframes","createGlobalStyle","sharedTheme","boxShadow","headerHeight","sharedEffect1","str","titleSize","navPadding","borderRadius","colors","warning","primary","secondary","tertiary","success","getTheme","lodash","name","ctheme","primaryColor","Object","polished_es","secondaryColor","isBrightTheme","fontColor","highlightEffect","amount","color","borderColor","navFontColor","dynamic","__assign","lightTheme","darkTheme","fontSize","themeName","activeEffect","hoverEffect","invertEffect","src_theme","Button","button","Button_templateObject_2","Button_makeTemplateObject","_a","theme","Button_templateObject_1","Layout","props","react","header","children","FlexBox","direction","__rest","className","FlexBox_templateObject_1","FlexBox_makeTemplateObject","HeaderSearchInput","input","HeaderSearchStyles_templateObject_2","HeaderSearchStyles_makeTemplateObject","HeaderSearchStyles_templateObject_1","HeaderSearch","onChange","value","text","placeholder","NavItemBox","right","rest","NavItemStyles_rest","react_router_dom","NavItemStyles_assign","NavItemStyles_templateObject_2","NavItemStyles_makeTemplateObject","_b","NavItemStyles_templateObject_1","NavItem","to","NavItem_rest","NavItem_assign","HeaderBox","div","HeaderStyles_templateObject_2","HeaderStyles_makeTemplateObject","HeaderStyles_templateObject_1","LogoBox","HeaderStyles_templateObject_3","Header","onSearchTextChange","searchText","WordTable","table","WordList_templateObject_2","WordList_makeTemplateObject","WordList_templateObject_1","WordTableCell","td","WordList_templateObject_4","WordList_templateObject_3","WordList","words","map","e","key","id","Korean","English","Card","Card_templateObject_2","Card_makeTemplateObject","Card_templateObject_1","createSearchAction","actionType","typesafe_actions_umd_production","changeSearchText","getAutocompleteList","requestSearch","processSearchSuccess","processSearchFailure","SearchActions","addSearchFilter","filter","SearchState","filters","result","fetchStatus","SearchLogic","createLogic","type","debounce","latest","validate","allow","reject","getState","action","payload","process","dispatch","done","httpClient","query","apiurl","NODE_ENV","PUBLIC_URL","USE_ELASTIC_SEARCH","startsWith","host","GET_HOSTS_FROM","SERVER_SERVICE_HOST","SERVER_SERVICE_PORT","undefined","Error","console","log","get","then","v","data","mapped","catch","err","error","WordSearch_WordSearch","_super","WordSearch","_this","call","this","state","handleChangeSearchText","currentTarget","__extends","prototype","render","style","margin","padding","backgroundColor","textAlign","marginBottom","containers_WordSearch","es","search","redux","themes_changeTheme","ThemesReducer","currentTheme","ThemeSelection","changeTheme","onClick","HeaderSearchContainer_HeaderSearchContainer","HeaderSearchContainer","HeaderSearchContainer_extends","containers_HeaderSearchContainer","Global","App_templateObject_3","App_makeTemplateObject","App_templateObject_2","App_templateObject_1","App_App","App","App_extends","href","display","src","alt","react_router","exact","path","component","src_App","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","ADD","CountersReducer","reduxCounter","rootReducer","counter","search_assign","Date","toLocaleString","rootLogic","deps","axios_default","a","create","baseURL","logicMiddleware","createLogicMiddleware","middleware","enhancer","redux_devtools_extension","src_store","react_dom","store","document","getElementById","URL","toString","origin","addEventListener","fetch","response","status","headers","indexOf","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.4c98cb0a.chunk.js","sourcesContent":["import * as _ from 'lodash';\r\nimport { darken, getLuminance, invert as invertColor, lighten, setLightness, transparentize } from \"polished\";\r\nimport * as styledComponents from \"styled-components\";\r\n\r\nconst {\r\n default: styled,\r\n css,\r\n keyframes,\r\n ThemeProvider,\r\n createGlobalStyle,\r\n} = styledComponents as styledComponents.ThemedStyledComponentsModule<\r\nTheme\r\n>;\r\n\r\n\r\ntype Effect = (...args:Array) => string;\r\n\r\ntype ThemeName = \r\n | \"light\"\r\n | \"dark\";\r\n\r\ninterface StaticTheme {\r\n headerHeight: string;\r\n titleSize: string;\r\n boxShadow: string;\r\n fontSize: string;\r\n navPadding: string;\r\n themeName: ThemeName;\r\n borderRadius: string;\r\n \r\n sharedEffect1: Effect;\r\n activeEffect: Effect;\r\n hoverEffect: Effect;\r\n invertEffect: Effect;\r\n \r\n borderColor?: string;\r\n primaryColor?: string;\r\n fontColor?: string;\r\n navFontColor?: string;\r\n highlightEffect?: Effect;\r\n}\r\n\r\nexport interface Theme extends Required {}\r\n\r\n// color scheme : https://coolors.co/ffc093-ede580-a4af69-a5d37a-8aa399\r\n\r\nconst sharedTheme = {\r\n boxShadow: `0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)}`,\r\n headerHeight: \"100%\",\r\n sharedEffect1:(str:string)=>'test',\r\n titleSize: \"30px\",\r\n navPadding: '.5rem',\r\n borderRadius: '3px',\r\n};\r\n\r\nconst colors = {\r\n warning: \"#ffc093\",\r\n primary: \"#ede580\",\r\n secondary: \"#a4af69\",\r\n tertiary: \"#8aa399\",\r\n success: \"#a5d37a\"\r\n};\r\n\r\nconst getTheme = _.memoize(calculateTheme);\r\n\r\n/**\r\n * returns calculated theme\r\n * @param name the theme name. \r\n */\r\nfunction calculateTheme(name: ThemeName) : Theme{\r\n\r\n // calculated theme\r\n let ctheme : Theme;\r\n const primaryColor = name === 'light' ? lighten(0.1, colors.primary) : setLightness(0.08, colors.primary);\r\n const secondaryColor = name === 'light' ? lighten(0.1, colors.secondary) : setLightness(0.05, colors.secondary);\r\n const isBrightTheme = getLuminance(primaryColor) > 0.5;\r\n const fontColor = isBrightTheme ? 'black' : 'white';\r\n const highlightEffect = isBrightTheme ? (amount: number, color: string) => {\r\n return darken(amount, color);\r\n } : (amount: number, color: string) => {\r\n return lighten(amount, color);\r\n };\r\n const borderColor = transparentize(0.4, highlightEffect(0.4, secondaryColor));\r\n const navFontColor = highlightEffect(0.4, secondaryColor);\r\n\r\n const dynamic = {\r\n fontColor,\r\n primaryColor,\r\n highlightEffect,\r\n borderColor,\r\n navFontColor,\r\n }\r\n\r\n if(name === 'light'){\r\n ctheme = {\r\n ...lightTheme,\r\n ...dynamic,\r\n }\r\n } else {\r\n ctheme = {\r\n ...darkTheme,\r\n ...dynamic,\r\n }\r\n }\r\n\r\n return ctheme;\r\n}\r\n\r\n// example css function 1\r\nexport function truncate(width: string | number) {\r\n return css`\r\n width: ${width};\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n `;\r\n}\r\n\r\nexport function invertBox(theme: Theme){\r\n return css`\r\n ${invertColor\r\n ? css`\r\n border: 0;\r\n color: ${theme.fontColor};\r\n background-color: transparent;\r\n `\r\n : css``};\r\n `;\r\n}\r\n\r\n// example css function 2\r\nexport const media = {\r\n handheld: (args:TemplateStringsArray) => css`\r\n @media (max-width: 420px) {\r\n ${ css(args) }\r\n }\r\n `\r\n}\r\n\r\n// // Usage example\r\n// const Box = styled.div`\r\n// ${ truncate('250px') }\r\n// background: papayawhip;\r\n// `;\r\n\r\nexport const lightTheme: StaticTheme = {\r\n fontSize: \"15px\",\r\n themeName: \"light\",\r\n activeEffect: (color: string) => lighten(0.1, color),\r\n hoverEffect: (color: string) => {\r\n return darken(0.2, color);\r\n },\r\n invertEffect: (color: string) => {\r\n return invertColor(color);\r\n },\r\n ...sharedTheme,\r\n};\r\n\r\nexport const darkTheme: StaticTheme = {\r\n fontSize: \"15px\",\r\n themeName: \"dark\",\r\n activeEffect: (color: string) => {\r\n return darken(0.1, color);\r\n },\r\n hoverEffect: (color: string) => {\r\n return lighten(0.2, color);\r\n },\r\n invertEffect: (color: string) => {\r\n return invertColor(color);\r\n },\r\n ...sharedTheme,\r\n};\r\n\r\nexport default styled;\r\n\r\nexport { css, keyframes, ThemeProvider, createGlobalStyle, getTheme };\r\n","import styled, { css } from '../../theme';\r\n\r\nexport const Button = styled.button`${({ theme }) => css`\r\n background-color: ${theme.primaryColor};\r\n border: 1px solid ${theme.borderColor};\r\n padding: .5rem;\r\n color: ${theme.fontColor};\r\n font-size: ${theme.fontSize};\r\n\r\n :hover{\r\n transition: background-color .15s linear;\r\n background-color: ${theme.hoverEffect(theme.primaryColor)};\r\n }\r\n\r\n :active{\r\n transition: background-color .01s linear;\r\n background-color: ${theme.activeEffect(theme.primaryColor)};\r\n }\r\n`}`","import * as React from 'react';\r\nimport { Header } from '../Header';\r\n\r\ninterface ILayoutProps {\r\n header: React.ReactNode;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Layout: React.SFC = (props) => {\r\n return (\r\n <>\r\n {props.header}\r\n {props.children}\r\n \r\n );\r\n};","import * as React from 'react';\r\nimport { DivProps } from 'src/lib';\r\nimport styled from 'styled-components';\r\n \r\ninterface FlexBoxProps extends DivProps {\r\n direction: string;\r\n}\r\n\r\nconst FlexBoxComponent: React.FunctionComponent = ({direction, ...props}) =>
{props.children}
;\r\n\r\nexport const FlexBox = styled(FlexBoxComponent)`\r\n display: flex;\r\n flex-direction: ${props => props.direction};\r\n`;\r\n","import styled, { css } from \"src/theme\";\r\n\r\nconst HeaderSearchInput = styled.input`\r\n ${({ theme }) => css`\r\n flex-grow: 0.5;\r\n margin: auto;\r\n padding: ${theme.navPadding};\r\n border-radius: ${theme.borderRadius};\r\n border: 1px solid ${theme.borderColor};\r\n background-color: ${theme.primaryColor};\r\n color: ${theme.navFontColor};\r\n :focus {\r\n color: ${theme.hoverEffect(theme.navFontColor)};\r\n border-color: ${theme.hoverEffect(theme.borderColor)};\r\n }\r\n `};\r\n`;\r\n\r\nexport { HeaderSearchInput };\r\n","import * as React from \"react\";\r\nimport { SearchActions } from \"../../store/search\";\r\nimport { HeaderSearchInput } from \"./HeaderSearchStyles\";\r\nimport { InputProps } from \"src/lib\";\r\n\r\ninterface IHeaderSearchProps extends InputProps {\r\n text?: string;\r\n}\r\n\r\nexport const HeaderSearch: React.SFC = props => {\r\n return (\r\n \r\n );\r\n};\r\n","import { darken, lighten } from \"polished\";\r\nimport * as React from 'react';\r\nimport { NavLink } from \"react-router-dom\";\r\nimport styled, { css } from \"src/theme\";\r\nimport { NavItemProps } from \".\";\r\n\r\nconst NavItemBoxComponent: React.FunctionComponent = (({ right, ...rest }) => );\r\n\r\nexport const NavItemBox = styled(NavItemBoxComponent)`\r\n ${({\r\n theme: { navFontColor, titleSize, hoverEffect, navPadding }, right\r\n }) => css`\r\n margin-left: ${right? 'auto' : ''};\r\n padding: ${navPadding};\r\n user-select: none;\r\n cursor: pointer;\r\n\r\n color: ${navFontColor};\r\n font-size: ${titleSize};\r\n border-bottom: 2px solid transparent;\r\n display: flex;\r\n\r\n :hover {\r\n border-bottom: 2px solid ${hoverEffect(navFontColor)};\r\n color: ${hoverEffect(navFontColor)};\r\n }\r\n\r\n :focus {\r\n outline: none;\r\n border-bottom: 2px solid ${hoverEffect(navFontColor)};\r\n color: ${hoverEffect(navFontColor)};\r\n }\r\n `};\r\n`;\r\n\r\n\r\n// export const NavItemBox = styled(NavLink).attrs<{right: boolean}>({ })`\r\n// ${({\r\n// theme: { navFontColor, titleSize, hoverEffect, navPadding }, right\r\n// }) => css`\r\n// margin-left: ${right? 'auto' : ''};\r\n// padding: ${navPadding};\r\n// user-select: none;\r\n// cursor: pointer;\r\n\r\n// color: ${navFontColor};\r\n// font-size: ${titleSize};\r\n// border-bottom: 2px solid transparent;\r\n// display: flex;\r\n\r\n// :hover {\r\n// border-bottom: 2px solid ${hoverEffect(navFontColor)};\r\n// color: ${hoverEffect(navFontColor)};\r\n// }\r\n\r\n// :focus {\r\n// outline: none;\r\n// border-bottom: 2px solid ${hoverEffect(navFontColor)};\r\n// color: ${hoverEffect(navFontColor)};\r\n// }\r\n// `};\r\n// `;\r\n","import * as React from 'react';\r\nimport { LinkProps } from 'react-router-dom';\r\nimport { NavItemBox } from './NavItemStyles';\r\n\r\nexport interface NavItemProps extends LinkProps {\r\n to: string;\r\n right?: boolean;\r\n}\r\n\r\nexport const NavItem : React.SFC = ({to, children, right=false, ...rest}: NavItemProps) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};","import { darken, invert, lighten, transparentize } from 'polished';\r\nimport styled, { css } from '../../theme';\r\n\r\nconst HeaderBox = styled.div`${({ theme }) => css`\r\n background-color: ${theme.primaryColor};\r\n border-bottom: 1px solid ${theme.borderColor};\r\n`}`;\r\n\r\nconst LogoBox = styled.div`\r\n display: flex;\r\n`\r\n\r\nexport { HeaderBox, LogoBox };","import * as React from \"react\";\r\nimport { InputChangeEvent } from \"src/lib\";\r\nimport { FlexBox } from \"../FlexBox\";\r\nimport { HeaderSearch } from \"../HeaderSearch\";\r\nimport { NavItem } from \"../NavItem\";\r\nimport { HeaderBox, LogoBox } from \"./HeaderStyles\";\r\n \r\nexport interface HeaderProps {\r\n searchText?: string;\r\n onSearchTextChange: InputChangeEvent;\r\n}\r\n\r\nexport const Header : React.SFC = (props) =>{ \r\n const { onSearchTextChange } = props;\r\n return (\r\n \r\n \r\n vocabo\r\n theme\r\n \r\n
user menu
\r\n
\r\n
\r\n )\r\n}","import * as React from 'react';\r\nimport { Word } from \"src/store/search\";\r\nimport styled, { css } from 'src/theme';\r\n\r\nconst WordTable = styled.table`${({ theme }) => css`\r\n margin: auto;\r\n border: 1px solid ${theme.borderColor};\r\n width: 85%;\r\n`}`;\r\n\r\nconst WordTableCell = styled.td`${({ theme }) => css`\r\n padding: .5rem;\r\n border: 1px solid ${theme.borderColor};\r\n`}`;\r\n\r\nexport const WordList = ({words}:{words: Word[]}) => {\r\n return (\r\n \r\n \r\n \r\n {'Korean'}\r\n {'English'}\r\n \r\n {words.map((e)=>{\r\n return \r\n {e.Korean}\r\n {e.English}\r\n ;\r\n })}\r\n \r\n \r\n )\r\n}","import styled, { css } from '../../theme';\r\n\r\nexport const Card = styled.div`${({ theme }) => css`\r\n background-color: ${theme.primaryColor};\r\n border: 1px solid ${theme.borderColor};\r\n padding: .5rem;\r\n color: ${theme.fontColor};\r\n font-size: ${theme.fontSize};\r\n border-radius: ${theme.borderRadius};\r\n`}`\r\n","import { createLogic } from 'redux-logic';\r\nimport { action as typedAction, ActionType, createStandardAction } from \"typesafe-actions\";\r\nimport { AxiosInstance } from 'axios';\r\n\r\ntype SearchActionKey =\r\n | \"search/list/get\"\r\n | \"search/list/getautocompletelist\"\r\n | \"search/result/request\"\r\n | \"search/result/success\"\r\n | \"search/result/failure\"\r\n | \"search/searchText/change\"\r\n | \"search/filters/add\"\r\n | \"search/filters/remove\"\r\n | \"search/filters/change\";\r\n\r\nfunction createSearchAction(actionType: T) {\r\n return createStandardAction(actionType);\r\n}\r\n\r\nconst changeSearchText = createSearchAction('search/searchText/change')<{ searchText: string }>();\r\n\r\nconst getAutocompleteList = createSearchAction('search/list/getautocompletelist')();\r\n\r\nconst requestSearch = createSearchAction('search/result/request')<{ searchText: string }>();\r\n\r\nconst processSearchSuccess = createSearchAction('search/result/success')<{ result: Word[] }>();\r\n\r\nconst processSearchFailure = createSearchAction('search/result/failure')<{ fetchStatus: string }>();\r\n\r\nconst addSearchFilter = (filter: Filter) => {\r\n typedAction('search/filters/add', filter)\r\n};\r\n\r\ntype SearchActions = typeof SearchActions;\r\n\r\nconst SearchActions = {\r\n addSearchFilter,\r\n changeSearchText,\r\n getAutocompleteList,\r\n requestSearch,\r\n processSearchSuccess,\r\n processSearchFailure,\r\n}\r\n\r\ntype SearchActionType = ActionType;\r\n\r\ntype Language = \"English\" | \"Korean\";\r\n\r\ntype LanguageMap = { [T in Language]: string };\r\n\r\nexport type Word = LanguageMap & {\r\n id: number;\r\n};\r\n\r\ntype Filter = {\r\n value: string;\r\n options: {\r\n filterLang: Language;\r\n };\r\n};\r\n\r\ntype SearchState = {\r\n searchText: string;\r\n filters: Filter[];\r\n result: Word[];\r\n fetchStatus: string;\r\n};\r\n\r\nconst initialResult: Word[] = [\r\n {\r\n id: 0,\r\n English: 'hello',\r\n Korean: '안녕',\r\n },\r\n {\r\n id: 1,\r\n English: 'potato soup',\r\n Korean: '감자국',\r\n }\r\n]\r\n\r\nconst SearchState: SearchState = {\r\n searchText: '',\r\n filters: [],\r\n result: initialResult,\r\n fetchStatus: ''\r\n}\r\n\r\n/**\r\n * SearchLogic fetches search result from backend server \r\n * and maps the result to search state\r\n */\r\n\r\nconst SearchLogic = createLogic({\r\n // using any for not important third party library usage\r\n type: 'search/result/request',\r\n debounce: 150, /* ms */\r\n latest: true, /* take latest only */\r\n\r\n /* let's prevent empty requests */\r\n validate({ getState, action }, allow, reject: any) {\r\n if (action.payload) {\r\n allow(action);\r\n } else { /* empty request, silently reject */\r\n reject();\r\n }\r\n },\r\n\r\n // use axios injected as httpClient from configureStore logic deps\r\n process({ httpClient, getState, action }: any, dispatch: any, done: any) {\r\n const query = action.payload.searchText;\r\n const env = process.env.NODE_ENV || 'development';\r\n let apiurl: string = '';\r\n\r\n const useElasticSearch = process.env.USE_ELASTIC_SEARCH || 'false';\r\n if( useElasticSearch === 'false' ){\r\n apiurl = `/api/v1.1/autocomplete/${query}`;\r\n } else {\r\n if (env.startsWith('dev')) {\r\n // apiurl = `http://localhost:3001/api/v1.0/autocomplete/elastic/en/${query}`;\r\n apiurl = `/api/v1.0/autocomplete/elastic/en/${query}`;\r\n } else {\r\n const host = ((process.env.GET_HOSTS_FROM || 'dns') === 'env') ? 'server' : process.env.SERVER_SERVICE_HOST + ':' + process.env.SERVER_SERVICE_PORT;\r\n if (host === undefined) { throw Error; }\r\n apiurl = `http://${host}/api/v1.0/autocomplete/elastic/en/${query}`;\r\n // apiurl = `http://${process.env.SERVER_SERVICE_HOST}:${process.env.SERVER_SERVICE_PORT}/api/v1.0/autocomplete/elastic/en/${query}`;\r\n }\r\n }\r\n \r\n console.log('apiurl : '+apiurl);\r\n\r\n const res = httpClient.get(apiurl);\r\n\r\n res.then((v: any) => {\r\n console.log(v.data);\r\n\r\n // parsed word map\r\n const mapped: Word[] = v.data;\r\n return mapped;\r\n }).then((mapped: Word[]) => {\r\n const result = {\r\n result: mapped\r\n }\r\n // console.log(mapped);\r\n dispatch(processSearchSuccess(result));\r\n }).catch((err: any) => {\r\n console.error(err); // might be a render err\r\n dispatch(processSearchFailure(err))\r\n })\r\n .then(() => done()); // call done when finished dispatching\r\n }\r\n});\r\n\r\nconst SearchReducer = function reducer(state = SearchState, action: SearchActionType) {\r\n switch (action.type) {\r\n case 'search/searchText/change':\r\n return {\r\n ...state,\r\n searchText: action.payload.searchText,\r\n }\r\n case 'search/result/request':\r\n return {\r\n ...state,\r\n fetchStatus: `fetching for ${action.payload}... ${(new Date()).toLocaleString()}`,\r\n };\r\n case 'search/result/success':\r\n return {\r\n ...state,\r\n result: action.payload.result,\r\n fetchStatus: `Results from ${(new Date()).toLocaleString()}`\r\n };\r\n case 'search/result/failure':\r\n return {\r\n ...state,\r\n fetchStatus: `errored: ${action.payload}`\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport { SearchActions, SearchState, SearchActionType, SearchReducer, SearchLogic };","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators, Dispatch } from \"redux\";\r\nimport { Card } from \"src/presentational\";\r\nimport { Button, WordList } from \"../presentational\";\r\nimport { RootState } from \"../store\";\r\nimport { SearchActions, SearchState } from '../store/search';\r\n\r\ntype OwnProps = {};\r\n\r\ntype StateProps = {\r\n result: SearchState['result'];\r\n searchText: SearchState['searchText'];\r\n};\r\n\r\ntype DispatchProps = {\r\n changeSearchText: SearchActions['changeSearchText'];\r\n requestSearch: SearchActions['requestSearch'];\r\n}\r\n\r\ntype Props = StateProps & DispatchProps & OwnProps;\r\n\r\ntype State = { };\r\n\r\nclass WordSearch extends React.Component {\r\n public state = {};\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n return this;\r\n }\r\n\r\n public render() {\r\n return (\r\n \r\n
\r\n WordSearch\r\n
\r\n
    \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private handleChangeSearchText = (e: React.ChangeEvent) => {\r\n this.props.changeSearchText({searchText: e.currentTarget.value});\r\n this.props.requestSearch({searchText: e.currentTarget.value});\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state: RootState) => ({\r\n result: state.search.result,\r\n searchText: state.search.searchText,\r\n }),\r\n (dispatch) => bindActionCreators({\r\n changeSearchText: SearchActions.changeSearchText,\r\n requestSearch: SearchActions.requestSearch,\r\n }, dispatch)\r\n)(WordSearch);","import { bindActionCreators, combineReducers } from \"redux\";\r\nimport { action as typedAction, ActionType } from \"typesafe-actions\";\r\nimport { getTheme, Theme, } from './../theme/index';\r\n\r\nconst CHANGE = \"theme/CHANGE\";\r\n\r\nexport const changeTheme = (theme: string) => typedAction(CHANGE, theme);\r\n\r\ntype themes = typeof changeTheme;\r\n\r\ntype ThemesActionType = ActionType;\r\n\r\ninterface IThemesState {\r\n readonly currentTheme: Theme;\r\n}\r\n\r\nconst ThemesReducer = combineReducers({\r\n currentTheme: (state = getTheme('dark'), action) => {\r\n switch (action.type) {\r\n case CHANGE:\r\n if (action.payload === 'light') {\r\n return getTheme('light');\r\n }\r\n else {\r\n return getTheme('dark'); \r\n }\r\n default:\r\n return state;\r\n }\r\n }\r\n});\r\n\r\nexport { ThemesReducer, IThemesState, ThemesActionType };\r\n","import * as React from \"react\";\r\nimport { connect } from \"react-redux\"; \r\nimport { bindActionCreators, Dispatch } from \"redux\";\r\nimport { ThemeSelect } from \"../presentational\";\r\nimport { changeTheme } from \"../store/themes\";\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n currentTheme: state.theme.currentTheme\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => bindActionCreators({\r\n changeTheme,\r\n}, dispatch)\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ThemeSelect);","import { getLuminance } from \"polished\";\r\nimport * as React from \"react\";\r\nimport { getTheme, ThemeProvider, } from \"../../theme\";\r\nimport { Button } from \"../Button\";\r\n\r\nconst ThemeSelect = (props: any) => {\r\n const { currentTheme, changeTheme } = props;\r\n const changeThemeDark = () => {\r\n changeTheme('dark');\r\n }\r\n const changeThemeLight = () => {\r\n changeTheme('light');\r\n }\r\n return (\r\n
\r\n
theme: {currentTheme.name}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n luminance: {getLuminance(currentTheme.primaryColor)}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport { ThemeSelect };\r\n","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators, Dispatch } from \"redux\";\r\nimport { Button, Header } from \"../presentational\";\r\nimport { RootState } from \"../store\";\r\nimport { SearchActions, SearchState } from '../store/search';\r\n\r\ntype OwnProps = {};\r\n\r\ntype StateProps = {\r\n result: SearchState['result'];\r\n searchText: SearchState['searchText'];\r\n};\r\n\r\ntype DispatchProps = {\r\n changeSearchText: SearchActions['changeSearchText'];\r\n requestSearch: SearchActions['requestSearch'];\r\n}\r\n\r\ntype Props = StateProps & DispatchProps & OwnProps;\r\n\r\ntype State = { };\r\n\r\nclass HeaderSearchContainer extends React.Component {\r\n public state = {};\r\n\r\n public constructor(props: Props) {\r\n super(props);\r\n return this;\r\n }\r\n\r\n public render() {\r\n const { handleChangeSearchText } = this;\r\n const { searchText } = this.props;\r\n return (\r\n
\r\n );\r\n }\r\n\r\n private handleChangeSearchText : React.ChangeEventHandler = (e) => {\r\n this.props.changeSearchText({searchText: e.currentTarget.value});\r\n this.props.requestSearch({searchText: e.currentTarget.value});\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state: RootState) => ({\r\n result: state.search.result,\r\n searchText: state.search.searchText,\r\n }),\r\n (dispatch) => bindActionCreators({\r\n changeSearchText: SearchActions.changeSearchText,\r\n requestSearch: SearchActions.requestSearch,\r\n }, dispatch)\r\n)(HeaderSearchContainer);","import { transparentize } from \"polished\";\r\nimport * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { BrowserRouter, Route, Switch } from \"react-router-dom\";\r\nimport { HeaderSearchContainer, ThemeSelection, WordSearch } from \"./containers\";\r\nimport { Layout } from \"./presentational\";\r\nimport { createGlobalStyle, css, ThemeProvider } from \"./theme\";\r\n\r\nconst Global = createGlobalStyle`\r\n ${({ theme: { fontColor, primaryColor, highlightEffect, fontSize } }) => css`\r\n ${css`\r\n /* http://meyerweb.com/eric/tools/css/reset/\r\n v4.0 | 20180602\r\n License: none (public domain)\r\n */\r\n html, body, div, span, applet, object, iframe,\r\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\r\n a, abbr, acronym, address, big, cite, code,\r\n del, dfn, em, img, ins, kbd, q, s, samp,\r\n small, strike, strong, sub, sup, tt, var,\r\n b, u, i, center,\r\n dl, dt, dd, ol, ul, li,\r\n fieldset, form, label, legend,\r\n table, caption, tbody, tfoot, thead, tr, th, td,\r\n article, aside, canvas, details, embed,\r\n figure, figcaption, footer, header, hgroup,\r\n main, menu, nav, output, ruby, section, summary,\r\n time, mark, audio, video {\r\n :focus{\r\n /* box-shadow: 0 0 1px 1px ${highlightEffect(0.2, fontColor)}; */\r\n }\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n font-size: ${fontSize};\r\n font: inherit;\r\n font-family: sans-serif;\r\n vertical-align: baseline;\r\n }\r\n /* HTML5 display-role reset for older browsers */\r\n article, aside, details, figcaption, figure,\r\n footer, header, hgroup, main, menu, nav, section {\r\n display: block;\r\n }\r\n /* HTML5 hidden-attribute fix for newer browsers */\r\n *[hidden] {\r\n display: none;\r\n }\r\n body {\r\n line-height: 1;\r\n }\r\n ol, ul {\r\n list-style: none;\r\n }\r\n blockquote, q {\r\n quotes: none;\r\n }\r\n blockquote:before, blockquote:after,\r\n q:before, q:after {\r\n content: '';\r\n content: none;\r\n }\r\n table {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n }\r\n `}\r\n\r\n div, input, p, a, button, body {\r\n color: ${fontColor};\r\n font-size: ${fontSize};\r\n transition: all .15s linear;\r\n transition-property: box-shadow, border-color, height, width,\r\n background-color, font-size, color;\r\n }\r\n\r\n a {\r\n text-decoration: inherit;\r\n color: inherit;\r\n }\r\n\r\n body {\r\n color: ${fontColor};\r\n background-color: ${highlightEffect(-0.1, primaryColor)};\r\n }\r\n `};\r\n`;\r\n\r\nclass App extends React.Component {\r\n public render() {\r\n const { currentTheme } = this.props;\r\n return (\r\n \r\n \r\n }>\r\n <>\r\n \r\n \"Flag\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n currentTheme: state.theme.currentTheme\r\n});\r\n\r\nexport default connect(mapStateToProps)(App);\r\n","// tslint:disable:no-console\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 publicUrl = new URL(\r\n process.env.PUBLIC_URL!,\r\n window.location.toString()\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/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\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\r\n );\r\n });\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;\r\n if (installingWorker) {\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 })\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 if (\r\n response.status === 404 ||\r\n response.headers.get('content-type')!.indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { combineReducers } from \"redux\";\r\nimport { action as typedAction, ActionType } from \"typesafe-actions\";\r\n\r\nconst ADD = \"counter/ADD\";\r\nconst INCREMENT = \"counter/INCREMENT\";\r\n\r\nexport const add = (amount: number) => typedAction(ADD, amount);\r\nexport const increment = () => typedAction(INCREMENT);\r\n\r\ntype counters = typeof increment | typeof add;\r\n\r\ntype CountersActionType = ActionType;\r\n\r\ninterface ICountersState {\r\n readonly reduxCounter: number;\r\n}\r\n\r\n// CLASSIC API\r\n\r\nconst CountersReducer = combineReducers({\r\n reduxCounter: (state = 0, action) => {\r\n switch (action.type) {\r\n case INCREMENT:\r\n return state + 1; // action: { type: \"INCREMENT\"; }\r\n case ADD:\r\n return state + action.payload; // action: { type: \"ADD\"; payload: number; }\r\n default:\r\n return state;\r\n }\r\n }\r\n});\r\n\r\nexport { CountersReducer, ICountersState, CountersActionType };\r\n","import { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\r\nimport { CountersActionType, CountersReducer } from \"./counters\";\r\nimport { ThemesActionType, ThemesReducer } from \"./themes\";\r\n\r\nimport { StateType } from \"typesafe-actions\";\r\nimport { SearchActionType, SearchLogic ,SearchReducer } from \"./search\";\r\n\r\nimport axios from 'axios';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport { createLogicMiddleware } from 'redux-logic';\r\n\r\n// import { RouterAction, LocationChangeAction } from 'react-router-redux';\r\n// type ReactRouterAction = RouterAction | LocationChangeAction;\r\n\r\nexport type RootState = StateType;\r\nexport type RootAction = CountersActionType | ThemesActionType | SearchActionType;\r\n\r\n// import { composeEnhancers } from './utils';\r\n// import { routerReducer } from 'react-router-redux';\r\n\r\nconst rootReducer = combineReducers({\r\n // router: routerReducer,\r\n counter: CountersReducer,\r\n search: SearchReducer,\r\n theme: ThemesReducer,\r\n});\r\n\r\nconst rootLogic = [\r\n SearchLogic\r\n];\r\n\r\nconst deps = { httpClient: axios.create({baseURL: 'https://api.epikem.com/vocabo/'}) };\r\n\r\nconst logicMiddleware = createLogicMiddleware(rootLogic, deps);\r\n\r\nconst middleware = applyMiddleware(logicMiddleware);\r\n\r\n/* tslint:disable-next-line */\r\nconst enhancer = \r\n composeWithDevTools (\r\n middleware,\r\n/* tslint:disable-next-line */\r\n )\r\n\r\nconst store = createStore(rootReducer, enhancer);\r\n\r\n// function configureStore(initialState?: object) {\r\n// // compose enhancers\r\n// // const enhancer = composeEnhancers(applyMiddleware(...middlewares));\r\n\r\n// /* tslint:disable-next-line */\r\n// const enhancer = window['devToolsExtension'] ? window['devToolsExtension']()(createStore) : createStore;\r\n\r\n// // create store\r\n// // return createStore(rootReducer, initialState!, enhancer);\r\n// return enhancer(rootReducer, initialState!);\r\n// }\r\n\r\n// const store = configureStore();\r\n\r\n// export store singleton instance\r\nexport default store;\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport App from './App';\r\nimport './index.css';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport store from './store';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root') as HTMLElement\r\n);\r\nregisterServiceWorker();\r\n"],"sourceRoot":""}