{"version":3,"sources":["state/types.ts","core/api-utils.ts","components/reset-password-redirect/reset-password-redirect.tsx","components/reset-password-redirect/index.ts","hooks/use-translate.tsx","components/password-notification/password-notification.tsx","components/password-notification/index.ts","components/footer/footer.tsx","components/footer/index.ts","providers/language-provider.tsx","components/navigation/navigation.tsx","components/navigation/index.ts","views/user-detail/components/user-details.tsx","components/loading-indicator/loading-indicator.tsx","components/loading-indicator/index.ts","views/user-detail/user-detail.tsx","views/user-detail/index.ts","views/contracts/components/card-details.tsx","hooks/use-converter.tsx","core/csv-utils.ts","core/url-utils.ts","views/contracts/components/billing-details.tsx","views/contracts/components/contract-row.tsx","views/contracts/components/bar-chart.tsx","views/contracts/contracts.tsx","views/contracts/index.ts","views/overview/components/summary-card.tsx","views/overview/components/feed.tsx","views/overview/overview.tsx","views/overview/index.ts","components/data-table/data-table.tsx","components/data-table/index.ts","views/charge-cards/components/charge-card-row.tsx","views/charge-cards/charge-cards.tsx","views/charge-cards/index.ts","views/playground/conversions.tsx","components/barchart/bar-chart.tsx","components/barchart/index.ts","components/content-box/content-box.tsx","components/content-box/index.ts","views/playground/table-data.ts","views/playground/content-box-and-tables.tsx","state/config/actions.ts","state/config/types.ts","state/errors.ts","views/playground/error-and-loading.tsx","views/playground/playground.tsx","views/playground/index.ts","views/root-layout/menu-items.ts","views/root-layout/use-styles.ts","views/not-found/not-found.tsx","views/not-found/index.ts","views/root-layout/root-layout.tsx","state/theme/actions.ts","state/theme/types.ts","state/user/actions.ts","state/user/types.ts","state/contracts/actions.ts","state/contracts/types.ts","state/config/operations.ts","state/utils.ts","views/root-layout/index.ts","state/user/operations.ts","state/contracts/operations.ts","components/ui-app-error.tsx","hoc/with-wait-for-config.tsx","waydo-css-app.tsx","state/theme/reducer.ts","state/config/reducer.ts","state/user/reducer.ts","state/contracts/reducer.ts","state/reducers.ts","state/index.ts","index.tsx"],"names":["code","original","message","detailMessage","helpUrl","template","UIErrorFactory","errors","detialMessage","100","API_BASE","process","console","log","createApiURL","path","params","qs","encode","getAPIParams","a","Auth","currentSession","catch","ex","user","userId","getIdToken","payload","sub","API_NAME","downloadItem","contract_id","billing_year","billing_month","type","billing_id","API","get","presignedUrl","some","toMatchItem","navigator","userAgent","match","window","location","open","updateCardComment","card","card_id","annotation","myInit","headers","body","post","updatedCard","getCDRJSON","jsonCDR","ResetPasswordRedirect","query","URLSearchParams","useLocation","search","useHistory","useState","useEffect","href","useTranslate","intl","useIntl","translate","useCallback","id","variables","formatMessage","PasswordNotification","history","setOpen","onClose","event","reason","push","variant","content","useStyles","makeStyles","theme","createStyles","root","width","height","spacing","padding","display","justifyContent","position","bottom","boxSizing","background","palette","common","white","links","marginLeft","firstlink","Footer","classes","Paper","elevation","className","Link","underline","target","clsx","trasnlations","de","LanguageProvider","children","locale","messages","routerLink","textDecoration","color","text","secondary","linkActive","primary","main","linkActiveText","fontWeight","typography","fontWeightBold","activeIcon","Navigation","withRouter","menu","List","filter","s","visible","map","icon","name","slug","isActive","matchPath","pathname","exact","strict","key","to","ListItem","button","ListItemIcon","Icon","ListItemText","flexGrow","marginTop","paper","breakpoints","up","maxWidth","margin","avatar","top","left","right","marginRight","backgroundColor","fontSize","userDetails","userDetailsGroup","down","flexFlow","spacer","UserDetails","Box","avatarLetter","firstName","email","Grid","container","Avatar","substring","toUpperCase","item","xs","noValidate","autoComplete","TextField","disabled","label","defaultValue","lastName","address","street","houseNumber","zip","city","country","fullScreen","alignItems","LoadingIndicator","CircularProgress","Typography","component","loadingRoot","UserDetail","isLoading","connect","state","CardDetails","cards","cardComment","setCardComment","panelState","updatePanels","setUpdateCardLoading","setPanelState","value","comment","addCardComment","ExpansionPanel","ExpansionPanelSummary","expandIcon","panelSummary","column","heading","secondaryHeading","values","number","length","ExpansionPanelDetails","panelDetailsOverride","gridItem","Table","TableHead","TableRow","TableCell","TableBody","cardid","active","Input","onChange","e","endAdornment","InputAdornment","IconButton","onClick","hidden","useConverter","convertNumberToKwh","Intl","NumberFormat","maximumFractionDigits","format","convertSecondsToReadable","seconds","days","Math","floor","hours","minutes","formatted","translations","jsonToCSVConverter","JSONData","bill","ShowLabel","arrData","cdrTransformer","CSV","row","index","slice","i","fileName","uri","encodeURIComponent","link","document","createElement","download","appendChild","click","removeChild","alert","json","transformedData","data","charge_sessions","session","transformedSession","evse_id","evseid","chargepoint_address","chargetype","is_roaming_station","ts_start","ts_end","metertotal_kwh","price_per_unit_net","total","toFixed","replace","parseUrl","url","split","reduce","arr","p","res","contracts","contract","contractId","billDates","BillingDetails","bills","invoiceLoading","setInvoiceLoading","cdrLoading","setCdrLoading","csvLoading","setCSVLoading","downloadInvoice","invoice_id","downloadCDR","downloadCSV","charges_by_card","urlParams","forEach","billDate","sortedBills","React","useMemo","sort","b","parseInt","expanded","_","panelBodyActions","aggregates","Button","total_kwh","total_duration","total_sessions","align","typeAvatar","join","pxToRem","marginBottom","flexBasis","title","flexDirection","headerAction","textAlign","detailLink","overflowX","paddingLeft","paddingRight","panelDetails","visibility","ContractRow","category","Chip","charAt","sm","BarChart","visualizationData","useTheme","series","axes","hardMin","stacked","d","getSeriesStyle","transition","getDatumStyle","style","dark","tooltip","chartGrid","contrastText","Contracts","billData","cardCount","c","Object","keys","billCard","cardIndex","indexOf","date","Date","DateTimeFormat","year","month","day","formatToParts","datumIndex","datums","dat","x","y","datum","datumArr","splice","mb","gutterBottom","contentText","minHeight","footer","cardLink","Card","CardActionArea","CardContent","trim","pr","CardActions","avtarImage","flexWrap","Feed","topInfo","mr","src","alt","m","mt","footerItem","Overview","mlist","totalSessions","totalKwh","totalCards","contract_name","reducedBills","md","lg","size","table","minWidth","tableTitle","subtitle1","toolbarOverrideGutters","tableWrapper","visuallyHidden","border","clip","overflow","desc","orderBy","EnhancedTableHead","props","order","onRequestSort","headCells","headCell","numeric","disablePadding","sortDirection","TableSortLabel","direction","property","DataTable","rows","metaData","setOrder","setOrderBy","page","setPage","rowsPerPage","setRowsPerPage","Toolbar","gutters","aria-labelledby","aria-label","array","cmp","stabilizedThis","el","stableSort","getSorting","row_key","hover","tabIndex","cellIndex","cell_key","TablePagination","rowsPerPageOptions","count","backIconButtonProps","nextIconButtonProps","onChangePage","newPage","onChangeRowsPerPage","getHeadCells","ChargeCardRow","tableData","tarif","metertotal","Divider","back","contractBillDetail","customerId","yearmonth","billingYear","billingMonth","cdrDetail","setCdrDetail","then","ChargeCards","ContentBoxAndTables","total_duration_minutes","Barchart","ref","xAxis","yAxis","createRef","defaultProps","this","getPropsWithDefault","d3","domain","range","rangeRound","g","attr","call","tickSizeOuter","selectAll","remove","ticks","updateAxis","svg","current","append","createScalers","createAxis","t","reverse","unknown","rect","enter","bandwidth","duration","delay","exit","refresh","Component","header","headerTitle","ContentBox","actions","CardHeader","z","headerOverride","headerTitleOverride","contentOverride","paddingBottom","MyContent","setConfigData","setConfigLoading","loading","setConfigError","error","optionalDetails","warn","1000","1010","ErrorAndLoading","dispatch","useDispatch","config","useSelector","setTimeout","constructfromCode","Playground","getMenuItems","titleWrapper","titleLink","opacity","transitions","create","easing","sharp","enteringScreen","titleLinkHide","pointerEvents","leavingScreen","titleImage","backgroundSize","backgroundRepeat","backgroundPosition","appBar","zIndex","drawer","appBarShift","menuButton","hide","flexShrink","whiteSpace","drawerOpen","drawerClose","headerToolbar","black","toolbar","mixins","NotFound","currentTheme","fetchUserInfo","clearUserData","matches","useMediaQuery","toggleDrawer","menuItems","currentMenuItem","find","menuText","usernameAttribute","UsernameAttribute","EMAIL","burgerMenu","edge","backgroundImage","Drawer","RouteOutlet","addTheme","themeName","options","setUserLoading","setContractsLoading","loadConfig","fetch","err","configData","Amplify","configure","region","userPoolId","userPoolWebClientId","endpoints","endpoint","custom_header","getJwtToken","Authorization","asyncTimeout","time","Promise","rej","themes","userData","RootLayout","helpLink","AppUIError","withWaitForConfig","hasConfig","hasError","WaydoCSSApp","createMuiTheme","mui","RootLayoutWithConfig","withAuthenticator","Greetings","hideSignUpLink","hideForgotPasswordLink","intlProps","customMessages","authMaterialUiDEMessages","ThemeProvider","initialState","action","configPath","undefined","combineReducers","baseTheme","fontFamily","default","light","hint","overrides","MuiLink","version","store","defaultTheme","createStore","rootReducer","applyMiddleware","thunk","createAppState","dnsDomain","hostname","configUrl","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.50b1f42d.chunk.js","sourcesContent":["import { ThemeState } from \"./theme/types\";\nimport { ConfigState } from \"./config/types\";\nimport { ContractsState } from \"./contracts/types\";\nimport { UserState } from './user/types';\n\nexport * from './config/types';\nexport * from './contracts/types';\nexport * from './theme/types';\nexport * from './user/types';\n\nexport const API_NAME = 'CSSServerEndpoint';\nexport const BILLING_KEY = 'platform:billing_id';\n\nexport type AppState = {\n theme: ThemeState;\n config: ConfigState;\n contracts: ContractsState;\n user: UserState;\n}\n\nexport interface AppError {\n code?: number;\n original?: Error | any;\n message: string;\n detialMessage: string;\n helpUrl?: string;\n}\n\nexport interface ErrorConstructor {\n original?: Error | any;\n message?: string;\n detailMessage?: string;\n helpUrl?: string;\n}\n\nexport abstract class UIErrorFactory {\n\n private static errors: { [code: number]: AppError } = {\n 100: {\n message: '',\n detialMessage: ''\n }\n };\n\n public static constructfromCode(code: number, { original, message, detailMessage, helpUrl }: ErrorConstructor): AppError {\n // get error shell\n const template = UIErrorFactory.errors[code];\n\n // return copy with extended props\n return {\n ...template,\n code,\n original,\n message: message || template.message,\n detialMessage: detailMessage || template.detialMessage,\n helpUrl: helpUrl || template.helpUrl\n };\n }\n}\n","import { encode } from 'querystring';\n\nimport {API_NAME, ChargeCard, ContractBillOverview} from '../state/types';\nimport {API, Auth} from 'aws-amplify';\nimport {useState} from \"react\";\n\nconst {\n REACT_APP_APIGW_URL\n} = process.env;\n\nconst detectMobile = () => {\n const toMatch = [\n /Android/i,\n /webOS/i,\n /iPhone/i,\n /iPad/i,\n /iPod/i,\n /BlackBerry/i,\n /Windows Phone/i\n ];\n return toMatch.some((toMatchItem) => {\n return navigator.userAgent.match(toMatchItem);\n });\n}\n\nexport const API_BASE = REACT_APP_APIGW_URL || 'https://48lg2kt3gk.execute-api.eu-central-1.amazonaws.com/stage';\nconsole.log(`Server API Base: ${API_BASE}`);\n\nexport const createApiURL = (path: string, params: any = null) => {\n\n let qs = '';\n if (params) {\n qs = `?${encode(params)}`;\n }\n return `/${path}${qs}`;\n}\n\nexport const getAPIParams = async () => {\n const user = await Auth.currentSession().catch(ex => { console.log(\"No user session existing\"); });\n\n if (user) {\n const {\n sub: userId\n } = user.getIdToken().payload;\n\n return { API_NAME, userId }\n }\n\n return null;\n}\n\nexport const downloadItem = async (contract_id: string, billing_year: string, billing_month: string, type: 'invoice' | 'pdf' | '', billing_id?: string) => {\n const params = await getAPIParams();\n if (params) {\n const { API_NAME, userId } = params;\n\n const { presignedUrl } = billing_id ? await API.get(API_NAME, createApiURL(`customer/${userId}/${contract_id}/${billing_id}/${billing_year}${billing_month}/generic-invoice`), {}) :\n await API.get(API_NAME, createApiURL(`customer/${userId}/cdr/${contract_id}/${billing_year}${billing_month}/${type}`), {});\n\n if(detectMobile()) {\n window.location = presignedUrl;\n }\n else {\n window.open(presignedUrl,'_self');\n }\n } else {\n // TODO throw error, something went wrong here\n }\n}\n\nexport const updateCardComment = async(card: ChargeCard) => {\n const { card_id, annotation } = card;\n let myInit = {\n headers: {\n 'Content-Type': 'application/json'\n }, body: {\n card: {\n 'id': card_id,\n 'annotation': annotation\n }\n }\n }\n const params = await getAPIParams();\n if (params) {\n const { API_NAME, userId } = params;\n const { updatedCard } = await API.post(API_NAME, createApiURL(`customer/${userId}/card/${card_id}`), myInit);\n\n return updatedCard;\n } else {\n return null;\n }\n}\n\nexport const getCDRJSON = async (contract_id: string, billing_year: string, billing_month: string) => {\n const params = await getAPIParams();\n if (params) {\n const { API_NAME, userId } = params;\n //const { contract_id, billing_year, billing_month } = bill;\n const jsonCDR = await API.get(API_NAME, createApiURL(`customer/${userId}/cdr/${contract_id}/${billing_year}${billing_month}`), {});\n\n return jsonCDR;\n } else {\n // TODO throw error, something went wrong here\n }\n}","import React, { FC, useEffect, useState } from 'react';\nimport {\n useLocation,\n useHistory\n} from 'react-router-dom';\n\nimport { API_BASE } from '../../core/api-utils';\n\nfunction useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n\ntype ResetPasswordRedirectProps = {};\n\nconst ResetPasswordRedirect: FC = () => {\n const query = useQuery();\n const history = useHistory();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if(query.get('uid') && query.get('chl')) {\n window.location.href = `${API_BASE}/customer/${query.get('uid')}/resend-password/${query.get('chl')}`;\n }\n }, []);\n\n return <>;\n}\n\nexport default ResetPasswordRedirect;\n","import ResetPasswordRedirect from './reset-password-redirect';\n\nexport default ResetPasswordRedirect;\n","import { useCallback } from 'react';\nimport { useIntl } from 'react-intl';\n\ninterface variablesType {\n [key: string]: any\n}\n\nexport type translateFuncType = (id: string, variables?: variablesType) => string\n\nexport default function useTranslate() {\n const intl = useIntl();\n const translate = useCallback(\n (id, variables = {}) => intl.formatMessage({ id }, variables),\n [intl]\n );\n\n return {\n translate,\n };\n}\n","import React, { FC, useEffect, useState, SyntheticEvent } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport {\n useLocation,\n useHistory\n} from 'react-router-dom';\n\nimport { Toast } from 'amplify-material-ui';\n\nimport useTranslate from './../../hooks/use-translate';\n\nfunction useQuery() {\n return new URLSearchParams(useLocation().search);\n}\n\ntype PasswordNotificationProps = {};\n\nconst PasswordNotification: FC = () => {\n const query = useQuery();\n const { translate } = useTranslate();\n const history = useHistory();\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if(query.get('temp-pw-resent')) {\n setOpen(true)\n }\n }, []);\n\n const handleClose = (event?: SyntheticEvent, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setOpen(false);\n history.push('/');\n };\n\n return ;\n}\n\nexport default PasswordNotification;\n","import PasswordNotification from './password-notification';\n\nexport default PasswordNotification;\n","import React, { FC } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport clsx from 'clsx';\n\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport { Link, Paper } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: '100%',\n height: theme.spacing(8),\n padding: theme.spacing(3),\n display: 'flex',\n justifyContent: 'flex-end',\n position: 'fixed',\n bottom: 0,\n boxSizing: 'border-box',\n background: theme.palette.common.white,\n },\n links : {\n marginLeft: theme.spacing(2),\n },\n firstlink : {\n marginLeft: 0,\n }\n })\n);\n\ninterface FooterProps {}\n\nconst Footer: FC = () => {\n const classes = useStyles();\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default Footer\n","import Footer from './footer';\n\nexport default Footer;\n","import React from \"react\";\nimport { IntlProvider } from 'react-intl';\n\n// language files\nimport de from './../translations/de.json';\n\nexport interface TrasnlationsType {\n [key: string]: {\n [key: string]: string\n }\n}\n\nexport const language: string = 'de';\nconst trasnlations: TrasnlationsType = {\n de\n};\n\ntype LanguageProviderProps = {};\n\nconst LanguageProvider: React.FC = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n\nexport default LanguageProvider;\n","import React, { FC } from 'react';\n\nimport clsx from 'clsx';\nimport { Link, withRouter, RouteComponentProps, matchPath } from 'react-router-dom';\n\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\n\nimport Icon from '@material-ui/core/Icon';\n\nexport interface MenuTitleProps {\n pathname: string;\n}\n\nexport type TitleFn = (props: MenuTitleProps) => string;\n\nexport interface MenuItem {\n name: string;\n icon: string;\n slug: string;\n component: any; // TODO whats the correct type for any react component??\n visible: boolean;\n title?: string | TitleFn;\n}\n\ninterface NavigationProps {\n menu: MenuItem[];\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n padding: 0\n },\n routerLink: {\n textDecoration: 'none',\n color: theme.palette.text.secondary\n },\n linkActive: {\n background: theme.palette.primary.main,\n display: 'block',\n color: theme.palette.text.primary,\n },\n linkActiveText: {\n fontWeight: theme.typography.fontWeightBold,\n },\n activeIcon: {\n color: theme.palette.text.primary,\n }\n })\n);\n\nconst Navigation: FC = ({ menu, location } ) => {\n\n const classes = useStyles();\n\n return (\n \n {menu.filter(s => s.visible).map(({icon, name, slug}) => {\n const isActive = matchPath(location.pathname, {path: slug, exact: true, strict: false})\n return (\n \n \n \n \n {icon}\n \n \n \n \n \n )\n })}\n \n )\n}\n\nexport default withRouter(Navigation);\n","import Navigation from './navigation'\n\nexport default Navigation\n","import React, { FC } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport Grid from '@material-ui/core/Grid';\nimport Box from '@material-ui/core/Box';\nimport Avatar from '@material-ui/core/Avatar';\nimport TextField from '@material-ui/core/TextField';\nimport useTranslate from './../../../hooks/use-translate';\n\nimport { CSSUser } from './../../../state/user/types';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n flexGrow: 1,\n marginTop: theme.spacing(5),\n position: 'relative'\n },\n paper: {\n [theme.breakpoints.up('sm')] :{\n maxWidth: '50%',\n margin: `${theme.spacing(1)}px auto`,\n padding: theme.spacing(2),\n }\n },\n avatar: {\n position: 'absolute',\n width: theme.spacing(12),\n height: theme.spacing(12),\n top: `-${theme.spacing(6)}px`,\n left: 0,\n right: 0,\n marginLeft: 'auto',\n marginRight: 'auto',\n color: theme.palette.text.primary,\n backgroundColor: theme.palette.primary.main,\n fontSize: theme.spacing(4),\n },\n userDetails: {\n marginTop: theme.spacing(8),\n '& > *': {\n margin: theme.spacing(2),\n display: 'flex',\n },\n },\n userDetailsGroup: {\n [theme.breakpoints.down('xs')] : {\n flexFlow: 'column',\n },\n '& > *': {\n display: 'flex',\n flexGrow: 1,\n },\n },\n spacer: {\n width: theme.spacing(1),\n flexGrow: 0,\n [theme.breakpoints.down('xs')] : {\n height: theme.spacing(2),\n },\n },\n })\n);\n\nexport interface UserDetailsProps {\n user?: CSSUser\n}\n\nconst UserDetails: FC = ({ user }) => {\n const classes = useStyles();\n const { translate } = useTranslate();\n if(!user) {\n return ;\n }\n const avatarLetter: string = user.firstName || user.email || \"A\";\n return (\n
\n \n \n {avatarLetter.substring(0, 1).toUpperCase()}\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default UserDetails;\n","import React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: ({fullScreen} : {fullScreen: boolean}) => {\n return fullScreen ? {\n position: 'fixed',\n display: 'flex',\n flexFlow: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width : '100vw',\n height : '100vh',\n } : {}\n },\n message: {\n marginTop: theme.spacing(1),\n }\n })\n);\n\ninterface LoadingIndicatorProps {\n fullScreen?: boolean;\n message?: string;\n}\n\nconst LoadingIndicator = ({ fullScreen = false, message = '' }: LoadingIndicatorProps ) => {\n const classes = useStyles({fullScreen})\n return (\n
\n \n {message && \n {message}\n }\n
\n )\n}\n\nexport default LoadingIndicator\n","import LoadingIndicator from './loading-indicator'\n\nexport default LoadingIndicator\n","import React, { FC } from 'react';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\n\nimport { UserState } from './../../state/user/types';\nimport UserDetails from './components/user-details';\nimport LoadingIndicator from './../../components/loading-indicator';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n loadingRoot: {\n display: 'flex',\n width: '100%',\n justifyContent: 'center',\n },\n })\n);\n\nexport interface UserDetailProps {\n user: UserState\n}\n\nconst UserDetail: FC = ({ user: { user, isLoading} }) => {\n const classes = useStyles();\n if(isLoading) {\n return (\n
\n \n
\n );\n }\n\n return (\n \n );\n};\n\nexport default UserDetail;\n","import { connect } from 'react-redux';\nimport { AppState } from '../../state/types';\nimport UserDetail from './user-detail';\n\nconst mapStateToProps = (state: AppState) => {\n return {\n user: state.user\n };\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UserDetail);\n","import React, { FC, useState } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport SaveIcon from '@material-ui/icons/Save';\nimport {downloadItem, updateCardComment} from '../../../core/api-utils';\n\nimport { useStyles } from './contract-row';\nimport {ChargeCard, ContractBillOverview} from './../../../state/contracts/types';\nimport Button from \"@material-ui/core/Button\";\nimport LoadingIndicator from \"../../../components/loading-indicator\";\nimport {createStyles, makeStyles, Theme} from \"@material-ui/core/styles\";\n\nexport interface CardDetailsProps {\n cards: ChargeCard[];\n}\n\nconst CardDetails: FC = ({ cards }) => {\n const classes = useStyles();\n const [cardComment, setCardComment] = useState('');\n const [ panelState, updatePanels ] = useState({} as { [id:string]: boolean });\n const [updateCardLoading, setUpdateCardLoading] = useState(false);\n\n const setPanelState = (key: string, value: boolean, comment: string) => {\n updatePanels({\n ...panelState,\n [key]: value\n });\n setCardComment(comment);\n };\n\n const addCardComment = async (card: ChargeCard) => {\n setUpdateCardLoading(true);\n card.annotation = cardComment;\n await updateCardComment(card);\n setPanelState(card.card_id, false, card.annotation);\n }\n\n return (\n \n }\n id={`cards-panel-header`}\n classes={{\n root: classes.panelSummary\n }}\n >\n
\n \n
\n
\n \n
\n \n \n
\n \n \n \n \n \n \n {/*\n */}\n \n \n \n {\n cards.map((card) => (\n \n {card.cardid || card.card_id}\n {card.active? : }\n \n setPanelState(card.card_id, true, e.target.value)}\n defaultValue={card.annotation}\n endAdornment={\n \n addCardComment(card)}\n disabled={ !panelState[`${card.card_id}`] }\n >\n {\n \n }\n \n \n }\n />\n \n \n ))\n }\n \n
\n
\n {/*
\n \n
*/}\n \n
\n );\n};\n\nexport default CardDetails;\n","import { useCallback } from 'react';\nimport { language } from '../providers/language-provider';\nimport useTranslate from './use-translate';\n\nexport type convertNumberToKwhFuncType = (number: number) => string\nexport type convertSecondsToReadableFuncType = (number: number) => string\n\nexport default function useConverter() {\n const { translate } = useTranslate();\n\n const convertNumberToKwh = useCallback(\n (number) => {\n return new Intl.NumberFormat(`${language}-${language.toUpperCase()}`, { maximumFractionDigits: 3 }).format(number);\n }, []);\n\n const convertSecondsToReadable = useCallback(\n (seconds) => {\n const days = Math.floor(seconds / (24 * 3600));\n seconds = seconds % (24 * 3600);\n const hours = Math.floor(seconds / 3600);\n seconds = seconds % 3600;\n const minutes = Math.floor(seconds / 60);\n\n let formatted = '';\n formatted += days !== 0 ? `${days} ${translate('label.day')}, ` : '';\n formatted += hours !== 0 ? `${hours} ${translate('label.hour')}, ` : '';\n formatted += minutes !== 0 ? `${minutes} ${translate('label.minute')}` : '';\n return formatted;\n }, [translate]);\n\n return {\n convertNumberToKwh,\n convertSecondsToReadable,\n };\n}\n","import {ContractBillOverview, TransformedCDR} from \"../state/contracts/types\";\nimport de from './../translations/de.json';\nimport {TrasnlationsType} from \"../providers/language-provider\";\n\nconst translations: TrasnlationsType = {\n de\n};\n\nexport const jsonToCSVConverter = (JSONData: any, bill: ContractBillOverview, ShowLabel: boolean) => {\n let arrData = JSONData;\n arrData = cdrTransformer(arrData);\n let CSV = '';\n //CSV += ReportTitle + '\\r\\n\\n';\n //This condition will generate the Label/Header\n if (ShowLabel) {\n let row = \"\";\n //This loop will extract the label from 1st index of on array\n for (let index in arrData[0]) {\n row += translations.de['csv.' + index] + ';';\n }\n row = row.slice(0, -1);\n CSV += row + '\\r\\n';\n }\n\n for (let i = 0; i < arrData.length; i++) {\n let row = \"\";\n for (let index in arrData[i]) {\n row += '\"' + arrData[i][index] + '\";';\n }\n row.slice(0, row.length - 1);\n CSV += row + '\\r\\n';\n }\n\n if (CSV == '') {\n alert(\"Invalid data\");\n return;\n }\n\n //Generate a file name\n let fileName = bill.contract_id + '-' + bill.billing_year + '-' + bill.billing_month + '-' + translations.de['csv.charge_sessions'];\n //this will remove the blank-spaces from the title and replace it with an underscore\n //fileName += fileName.replace(/ /g,\"_\");\n\n const uri = 'data:text/csv;charset=utf-8,%EF%BB%BF'+encodeURIComponent(CSV);\n let link = document.createElement(\"a\");\n link.href = uri;\n link.download = fileName + \".csv\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n console.log(CSV);\n}\n\nexport const cdrTransformer = (json: any) => {\n let transformedData: TransformedCDR[] = [];\n json.map((data: any) => {\n console.log(data);\n data.charge_sessions.map((session: any) => {\n let transformedSession: TransformedCDR = {};\n transformedSession.id = session.id;\n transformedSession.card_id = data.cardid;\n transformedSession.evse_id = session.evseid;\n transformedSession.chargepoint_address = session.chargepoint_address;\n transformedSession.chargetype = session.chargetype;\n transformedSession.is_roaming_station = session.is_roaming_station;\n transformedSession.ts_start = session.ts_start;\n transformedSession.ts_end = session.ts_end;\n transformedSession.metertotal_kwh = session.metertotal_kwh;\n transformedSession.price_per_unit_net = session.price_per_unit_net;\n transformedSession.total = (session.metertotal_kwh * session.price_per_unit_net).toFixed(2).replace('.', ',');\n transformedData.push(transformedSession);\n })\n });\n\n return transformedData;\n}","export type ParamMap = { [id:string]: string };\nexport type URLContractInfo = {\n contractId: string;\n billDates: string[];\n};\nexport type CssURLParams = {\n contracts: URLContractInfo[];\n};\n\nexport const parseUrl = (url: string) => {\n const params = url.replace(/^\\?/, '')\n .split('&')\n .reduce((arr, p) => {\n const [key, value] = p.split('=');\n arr[key] = value;\n return arr;\n }, {} as ParamMap);\n\n const res: CssURLParams = { contracts: [] };\n // console.log(\"Params\", params);\n // sample p=1982739713:202001;202002,1982739713:20200\n // parse expansion panel state\n if(params.p) {\n res.contracts = params.p.split(',')\n .map(contract => {\n const [ contractId, billDates ] = contract.split(':');\n return {\n contractId,\n billDates: billDates.split(';')\n }\n });\n }\n\n return res;\n};\n\nexport const generateUrl = (baseUrl: string, data: any) => {\n const currentParams = parseUrl(baseUrl);\n\n\n}\n","import React, { FC, useCallback, useState, useEffect } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport Button from '@material-ui/core/Button';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport { useStyles } from './contract-row';\nimport useConverter from './../../../hooks/use-converter';\nimport { ContractBillOverview } from './../../../state/contracts/types';\nimport useTranslate from './../../../hooks/use-translate';\n\nimport { createApiURL, getAPIParams, downloadItem, getCDRJSON } from '../../../core/api-utils';\nimport { jsonToCSVConverter } from '../../../core/csv-utils';\nimport { parseUrl } from '../../../core/url-utils';\nimport { API } from 'aws-amplify';\n\nexport interface BillingDetailsProps {\n bills: ContractBillOverview[];\n}\n\nconst BillingDetails: FC = ({ bills }) => {\n\n const classes = useStyles();\n const { convertSecondsToReadable, convertNumberToKwh } = useConverter()\n\n const [invoiceLoading, setInvoiceLoading] = useState(false);\n const [cdrLoading, setCdrLoading] = useState(false);\n const [csvLoading, setCSVLoading] = useState(false);\n /*const [apiParams, setApiParams] = useState();\n\n /*useEffect(() => {\n if(!apiParams) {\n console.log(\"Load api params\");\n getAPIParams().then(params => {\n console.log(\"Params\", params);\n setApiParams(params);\n });\n }\n\n }, [apiParams]);*/\n\n /*const downloadItem = async (bill: ContractBillOverview, type: 'invoice' | 'pdf') => {\n const params = await getAPIParams();\n if (params) {\n const { API_NAME, userId } = params;\n const { contract_id, billing_year, billing_month } = bill;\n const { presignedUrl } = await API.get(API_NAME, createApiURL(`customer/${userId}/cdr/${contract_id}/${billing_year}${billing_month}/${type}`), {});\n window.location = presignedUrl;\n } else {\n // TODO throw error, something went wrong here\n }\n }*/\n\n const downloadInvoice = async (bill: ContractBillOverview) => {\n setInvoiceLoading(true);\n await downloadItem(bill.contract_id, bill.billing_year, bill.billing_month, 'invoice', bill.invoice_id);\n setInvoiceLoading(false);\n }\n\n const downloadCDR = async (bill: ContractBillOverview) => {\n setCdrLoading(true);\n await downloadItem(bill.contract_id, bill.billing_year, bill.billing_month, 'pdf');\n setCdrLoading(false);\n // window.history.pushState({}, 'I CHANGED', window.location.href + \"#foo\");\n }\n\n const downloadCSV = async (bill: ContractBillOverview) => {\n setCSVLoading(true);\n const json = await getCDRJSON(bill.contract_id, bill.billing_year, bill.billing_month);\n await jsonToCSVConverter(json.charges_by_card, bill, true);\n setCSVLoading(false);\n }\n\n const urlParams = parseUrl(window.location.search);\n\n const [ panelState, updatePanels ] = useState(urlParams.contracts.reduce((arr, contract) => {\n contract.billDates.forEach(billDate => {\n arr[`${contract.contractId}${billDate}`] = true;\n });\n return arr;\n }, {} as { [id:string]: boolean }));\n\n const setPanelState = (key: string, value: boolean) => {\n updatePanels({\n ...panelState,\n [key]: value\n });\n // UPDATE THE URL\n console.log(\"UPDATE URL\");\n };\n\n const sortedBills = React.useMemo(() => {\n return bills.sort((a,b) => (parseInt(b.billing_year + b.billing_month) - parseInt( a.billing_year + a.billing_month)));\n }, [bills]);\n\n // @ts-ignore\n return (\n
\n {\n sortedBills.map((bill, index) => (\n { setPanelState(`${bill.contract_id}${bill.billing_year}${bill.billing_month}`, expanded) }}\n >\n }\n id={`bill-panel-${index}-header`}\n classes={{\n root: classes.panelSummary\n }}\n >\n
\n {bill.billing_month} / {bill.billing_year}\n
\n {\n false &&
\n \n
\n }\n \n \n
\n {\n bill.aggregates.cards && \n }\n {\n bill.aggregates.cards && \n }\n \n
\n {\n bill.aggregates.cards &&
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n bill.aggregates.cards && bill.aggregates.cards.map((card) => (\n \n {card.cardid}\n \n {convertNumberToKwh(card.total_kwh)} \n \n {/* total_duration is in minutes so converting in seconds */}\n {convertSecondsToReadable(card.total_duration * 60)}\n {card.total_sessions}\n \n ))\n }\n \n \n \n \n \n {convertNumberToKwh(bill.aggregates.total_kwh)}{' '}\n \n \n {/* total_duration is in minutes so converting in seconds */}\n {convertSecondsToReadable(bill.aggregates.total_duration * 60)}\n {bill.aggregates.total_sessions}\n \n \n
\n
\n }\n {/*\n // on hold\n \n \n \n */}\n \n \n ))\n }\n
\n );\n};\n\nexport default BillingDetails;\n","import React, { FC } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\n\nimport Grid from '@material-ui/core/Grid';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Avatar from '@material-ui/core/Avatar';\nimport Chip from '@material-ui/core/Chip';\n\nimport { Contract } from './../../../state/contracts/types';\nimport CardDetails from './card-details';\nimport BillingDetails from './billing-details';\nimport { parseUrl } from '../../../core/url-utils';\n\nexport interface ContractRowProps {\n contract: Contract;\n}\n\nexport const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n typeAvatar: {\n fontWeight: 'bold',\n color: [theme.palette.common.white , \" !important\"].join(''),\n backgroundColor: [theme.palette.secondary.main , \" !important\"].join(''),\n },\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightBold,\n marginBottom: theme.spacing(1)\n },\n secondaryHeading: {\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary,\n },\n column: {\n flexBasis: '33.33%',\n [theme.breakpoints.down('xs')] :{\n flexBasis: '50%',\n }\n },\n title: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightBold,\n marginBottom: theme.spacing(1)\n },\n panelDetailsOverride: {\n padding: 0,\n flexDirection: 'column'\n },\n panelBodyActions: {\n display: 'flex',\n flexDirection: 'row-reverse',\n marginBottom: '5px',\n marginRight: '5px',\n '&> *' : {\n marginLeft: theme.spacing(1),\n marginBottom: theme.spacing(1),\n }\n },\n headerAction : {\n textAlign: 'right',\n },\n detailLink : {\n textDecoration: 'none',\n color: '#37373C',\n },\n gridItem: {\n width: '100%',\n overflowX: 'auto',\n },\n panelSummary: {\n [theme.breakpoints.down('xs')] :{\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n },\n panelDetails: {\n [theme.breakpoints.down('xs')] :{\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n },\n hidden: {\n visibility: 'hidden',\n }\n })\n);\n\nconst ContractRow: FC = ({ contract }) => {\n const classes = useStyles();\n\n return (\n \n }\n id={`contract-panel-${contract.contract_id}-header`}\n classes={{ root: classes.panelSummary }}\n >\n
\n -{contract.name}\n {\n contract.category ? {contract.category.charAt(0)}}\n label={contract.category}\n color=\"primary\"\n /> : S}\n label={'Sonstiges'}\n color=\"primary\"\n />\n }\n
\n
\n {\n contract.cards.length > 0 && \n }\n \n
\n \n \n \n {\n contract.cards.length > 0 && \n \n \n \n }\n \n \n \n \n \n \n
\n );\n};\n\nexport default ContractRow;\n","import React, { FC } from 'react';\nimport { Chart } from 'react-charts';\nimport { useTheme } from '@material-ui/core/styles';\nimport { ChargeVisualizationData, Datum } from '../../../state/contracts/types';\n\nexport interface ChartProps {\n\tvisualizationData: ChargeVisualizationData[];\n}\n\nconst BarChart: FC = ({ visualizationData }) => {\n\tconst theme = useTheme();\n\t// const { data, randomizeData } = useChartConfig({\n\t// series: 12,\n\t// datums: 7,\n\t// dataType: 'ordinal'\n\t// })\n\n\tconst series = React.useMemo(\n\t\t() => ({\n\t\t\ttype: 'bar',\n\t\t}),\n\t\t[]\n\t);\n\n\tconst axes = React.useMemo(\n\t\t() => [\n\t\t\t{ primary: true, type: 'ordinal', position: 'bottom' },\n\t\t\t{\n\t\t\t\tposition: 'left',\n\t\t\t\ttype: 'linear',\n\t\t\t\thardMin: 0,\n\t\t\t\tstacked: false,\n\t\t\t\tformat: (d: any) => `${d} kWh`,\n\t\t\t},\n\t\t],\n\t\t[]\n\t);\n\n\tconst getSeriesStyle = React.useCallback(\n\t\t() => ({\n\t\t\tcolor: theme.palette.primary.main,\n\t\t\ttransition: 'all .5s ease',\n\t\t}),\n\t\t[]\n\t);\n\n\tconst getDatumStyle = React.useCallback(\n\t\t() => ({\n\t\t\t// color: 'blue',\n\t\t\t// transition: 'all .5s ease'\n\t\t}),\n\t\t[]\n\t);\n\n\treturn (\n\t\t// A react-chart hyper-responsively and continuously fills the available\n\t\t// space of its parent element automatically\n\t\t\n\t\t\t{/**/}\n\t\t\t\n\t\t\n\t);\n};\n\nexport default BarChart;\n","import React, { FC } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport Grid from '@material-ui/core/Grid';\n\nimport { ContractsState, ChargeVisualizationData, Datum } from '../../state/contracts/types';\nimport LoadingIndicator from '../../components/loading-indicator';\nimport ContractRow from './components/contract-row';\nimport BarChart from './components/bar-chart';\n\nexport interface ContratsProps {\n contracts: ContractsState\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n loadingRoot: {\n display: 'flex',\n width: '100%',\n justifyContent: 'center',\n },\n chartGrid: {\n background: theme.palette.primary.contrastText,\n },\n root: {\n width: '100%',\n },\n })\n);\n\nconst Contracts: FC = ({ contracts: { isLoading, contracts} }) => {\n const classes = useStyles();\n\n let billData: ChargeVisualizationData[] = [];\n let cardCount: number = 0;\n\n contracts.map((contract) => {\n cardCount += contract.cards.length;\n });\n\n cardCount < 200 && contracts.filter(c => c.cards.length > 0 && c.cards.length < 200).map((contract) => {\n contract.bills.map((bill) => {\n Object.keys(bill.aggregates).length && bill.aggregates.cards.forEach((billCard, index) => {\n const cardIndex = billData.map((e) => { return e.label }).indexOf(billCard.cardid);\n const date = new Date(`${bill.billing_year}-${bill.billing_month}`);\n const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' });\n const [{ value: month },,{ value: day },,{ value: year }] = dateTimeFormat .formatToParts(date);\n if (cardIndex > -1) {\n const datumIndex = billData[cardIndex].datums.map((dat) => { return dat.x }).indexOf(`${month} ${year}`);\n if (datumIndex > -1) {\n billData[cardIndex].datums[datumIndex].y += billCard.total_kwh;\n } else {\n const datum: Datum = {x: `${month} ${year}`, y: billCard.total_kwh};\n billData[cardIndex].datums.push(datum);\n }\n } else {\n const datum: Datum = {x: `${month} ${year}`, y: billCard.total_kwh};\n let datumArr:Datum[] = [];\n datumArr.push(datum);\n let data: ChargeVisualizationData = {label: billCard.cardid, datums: datumArr};\n data.datums = [];\n data.datums.push(datum);\n billData.push(data);\n }\n })\n })\n });\n\n billData.map((data) => {\n data.datums.sort((a,b) => (new Date(a.x) > new Date(b.x)) ? 1 : ((new Date(b.x) > new Date(a.x)) ? -1 : 0));\n data.datums = data.datums.length > 3 ? data.datums.splice(data.datums.length - 3, 3) : data.datums;\n });\n\n if(isLoading) {\n return (\n
\n \n
\n );\n }\n\n return (\n <>\n \n \n \n {\n cardCount < 200 && \n }\n \n \n \n
\n \n \n \n {contracts.map((contract) => ())}\n
\n \n );\n}\n\nexport default Contracts;\n","import { connect } from 'react-redux';\nimport { AppState } from '../../state/types';\nimport Contracts from './contracts';\n\nconst mapStateToProps = (state: AppState) => {\n return {\n contracts: state.contracts\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Contracts);\n","import React, { FC } from 'react';\n\nimport { withRouter, RouteComponentProps } from 'react-router-dom';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport Icon from '@material-ui/core/Icon';\n\nexport interface SummaryCardProps {\n icon?: string;\n title?: string | React.ReactElement;\n content?: string | React.ReactElement;\n background?: string;\n footer?: boolean | string | React.ReactElement;\n cardLink?: string;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n contentText: {\n background: theme.palette.text.primary,\n color: theme.palette.secondary.contrastText,\n minHeight: '110px',\n display: 'flex',\n flexFlow: 'column',\n justifyContent: 'space-between',\n [theme.breakpoints.down('xs')] :{\n minHeight: 'auto',\n },\n [theme.breakpoints.up('xl')] :{\n minHeight: 'auto',\n }\n },\n })\n);\n\nconst SummaryCard: FC = ({ icon= 'warning', title= 'title', content='content', footer = false, history, cardLink }) => {\n const classes = useStyles();\n\n const navigateToLocation = () => {\n if ( cardLink && cardLink.trim() !== '' ) {\n history.push(cardLink);\n }\n }\n\n return (\n \n \n \n \n \n {icon}\n \n \n {title}\n \n \n \n {content}\n \n \n \n {\n footer && \n {footer}\n \n }\n \n );\n}\n\nexport default withRouter(SummaryCard);\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\n\nimport Card from '@material-ui/core/Card';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardActionArea from '@material-ui/core/CardActionArea';\n\ninterface FeedProps {\n topInfo: string\n title: string\n footer?: any\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n background: \"#e7e6e6\",\n marginBottom: theme.spacing(1.5),\n padding: `${theme.spacing(0.5)}px ${theme.spacing(1.5)}px`,\n },\n avtarImage: {\n width: '100%',\n },\n content: {\n padding: theme.spacing(0.5),\n },\n footer: {\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n marginTop: theme.spacing(1),\n minHeight: theme.spacing(2),\n justifyContent: 'flex-end',\n [theme.breakpoints.down('xs')]: {\n flexWrap: 'wrap'\n }\n },\n })\n);\n\nconst Feed: React.FC = ({\n topInfo,\n title,\n footer\n}) => {\n const classes = useStyles();\n return (\n \n \n \n \n \"avtr\"\n \n {topInfo}\n \n \n {title}\n \n \n \n {footer && footer}\n \n \n )\n};\n\nexport default Feed;","import React, {FC, useMemo, useState} from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\n\nimport {ContractBillOverview, ContractsState} from './../../state/contracts/types';\nimport useConverter from './../../hooks/use-converter';\nimport SummaryCard from './components/summary-card';\nimport Feed from './components/feed';\nimport Button from '@material-ui/core/Button';\nimport { Link } from 'react-router-dom';\nimport { createApiURL, getAPIParams, downloadItem, getCDRJSON } from '../../core/api-utils';\nimport ContractRow from \"../contracts/components/contract-row\";\nimport {jsonToCSVConverter} from \"../../core/csv-utils\";\n\nexport interface OverviewProps {\n\tcontracts: ContractsState;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n\tcreateStyles({\n\t\tgridItem: {\n\t\t\twidth: '100%',\n\t\t},\n\t\tfooterItem: {\n\t\t\tmarginRight: theme.spacing(0.2),\n\t\t\tmarginBottom: theme.spacing(1),\n\t\t},\n\t})\n);\n\nconst Overview: FC = ({ contracts }) => {\n\tconst classes = useStyles();\n\tconst { convertNumberToKwh } = useConverter();\n\t//let bills: ContractBillOverview[] = [];\n\tconst [invoiceLoading, setInvoiceLoading] = useState(false);\n\tconst [cdrLoading, setCdrLoading] = useState(false);\n\tconst [csvLoading, setCSVLoading] = useState(false);\n\t// Fix for safari and firefox toLocaleString() error invalid date\n\tconst mlist = [ \"Undefined\", \"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\" ];\n\tconst { totalSessions, totalKwh, totalCards, bills, reducedBills } = useMemo(() => {\n\t\tlet totalSessions = 0;\n\t\tlet totalKwh = 0;\n\t\tlet totalCards = 0;\n\t\tlet bills: any[] = [];\n\n\t\tcontracts.contracts.forEach((item) => {\n\t\t\ttotalCards += item.cards.length;\n\t\t\titem.bills.forEach((bill) => {\n\t\t\t\ttotalSessions += bill.aggregates.total_sessions ? bill.aggregates.total_sessions : 0;\n\t\t\t\ttotalKwh += bill.aggregates.total_kwh ? bill.aggregates.total_kwh : 0;\n\t\t\t\tbill.contract_name = item.name;\n\t\t\t\tbills.push(bill);\n\t\t\t});\n\t\t});\n\n\t\tlet reducedBills = bills;\n\n\t\treducedBills.sort((a,b) => (parseInt(b.billing_year + b.billing_month) - parseInt( a.billing_year + a.billing_month)));\n\n\t\treturn {\n\t\t\ttotalSessions,\n\t\t\ttotalKwh,\n\t\t\ttotalCards,\n\t\t\tbills,\n\t\t\treducedBills\n\t\t};\n\t}, [contracts]);\n\n\n\tconst downloadInvoice = async (bill: ContractBillOverview) => {\n\t\tsetInvoiceLoading(true);\n\t\tawait downloadItem(bill.contract_id, bill.billing_year, bill.billing_month, 'invoice', bill.invoice_id);\n\t\tsetInvoiceLoading(false);\n\t}\n\n\tconst downloadCDR = async (bill: ContractBillOverview) => {\n\t\tsetCdrLoading(true);\n\t\tawait downloadItem(bill.contract_id, bill.billing_year, bill.billing_month, 'pdf');\n\t\tsetCdrLoading(false);\n\t}\n\n\tconst downloadCSV = async (bill: ContractBillOverview) => {\n\t\tsetCSVLoading(true);\n\t\tconst json = await getCDRJSON(bill.contract_id, bill.billing_year, bill.billing_month);\n\t\tawait jsonToCSVConverter(json.charges_by_card, bill, true);\n\t\tsetCSVLoading(false);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tcontent={`${contracts.contracts.length}`}\n\t\t\t\t\t\tfooter={}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tcontent={`${totalCards}`}\n\t\t\t\t\t\tfooter={}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tcontent={`${totalSessions}`}\n\t\t\t\t\t\tfooter={}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\tcontent={\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{convertNumberToKwh(totalKwh)} \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfooter={}\n\t\t\t\t\t/>\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t

Was gibt's Neues ?

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{reducedBills.slice(0,5).map((bill, index) => (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbill.aggregates.cards && \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbill.aggregates.cards && \n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default Overview;\n","import { connect } from 'react-redux';\nimport { AppState } from '../../state/types';\nimport Overview from './overview';\n\nconst mapStateToProps = (state: AppState) => {\n return {\n contracts: state.contracts\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Overview);\n","import React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n width: '100%',\n },\n table: {\n minWidth: 750,\n },\n tableTitle: {\n fontSize: theme.typography.subtitle1.fontSize,\n },\n toolbarOverrideGutters: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n tableWrapper: {\n overflowX: 'auto',\n },\n visuallyHidden: {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: 1,\n margin: -1,\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 20,\n width: 1,\n },\n }),\n);\n\ninterface DataTableProps {\n data: {\n headCells: Array;\n data: Array<{[key: string]: any}>;\n metaData: {\n count: number;\n }\n };\n title?: string;\n}\n\nfunction stableSort(array: T[], cmp: (a: T, b: T) => number) {\n const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);\n stabilizedThis.sort((a, b) => {\n const order = cmp(a[0], b[0]);\n if (order !== 0) return order;\n return a[1] - b[1];\n });\n return stabilizedThis.map(el => el[0]);\n}\n\ntype Order = 'asc' | 'desc';\n\nfunction desc(a: T, b: T, orderBy: keyof T) {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n }\n if (b[orderBy] > a[orderBy]) {\n return 1;\n }\n return 0;\n}\n\nfunction getSorting(\n order: Order,\n orderBy: K,\n): (a: { [key in K]: number | string }, b: { [key in K]: number | string }) => number {\n return order === 'desc' ? (a, b) => desc(a, b, orderBy) : (a, b) => -desc(a, b, orderBy);\n}\n\ninterface EnhancedTableProps {\n classes: ReturnType;\n onRequestSort: (event: React.MouseEvent, property: any) => void;\n order: Order;\n orderBy: string;\n headCells: any;\n}\n\nfunction EnhancedTableHead(props: EnhancedTableProps) {\n const { classes, order, orderBy, onRequestSort, headCells } = props;\n const createSortHandler = (property: any) => (event: React.MouseEvent) => {\n onRequestSort(event, property);\n };\n\n return (\n \n \n {headCells.map((headCell: any) => (\n \n \n {headCell.label}\n {orderBy === headCell.id ? (\n \n {order === 'desc' ? 'sorted descending' : 'sorted ascending'}\n \n ) : null}\n \n \n ))}\n \n \n );\n}\n\nconst DataTable = (props: DataTableProps) => {\n const classes = useStyles();\n const { title = null, data: { headCells, data: rows, metaData }} = props\n const [order, setOrder] = React.useState('asc');\n const [orderBy, setOrderBy] = React.useState('id');\n const [page, setPage] = React.useState(0);\n const [rowsPerPage, setRowsPerPage] = React.useState(5);\n\n const handleRequestSort = (event: React.MouseEvent, property: string) => {\n const isDesc = orderBy === property && order === 'desc';\n setOrder(isDesc ? 'asc' : 'desc');\n setOrderBy(property);\n };\n\n const handleChangePage = (event: unknown, newPage: number) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event: React.ChangeEvent) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n return (\n
\n {\n title && \n \n {title}\n \n \n }\n
\n \n \n \n {stableSort(rows, getSorting(order, orderBy))\n .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)\n .map((row, index) => {\n const row_key = `tabe_col_${index}`\n return (\n \n {headCells.map((headCell: any, cellIndex: number) => {\n const cell_key = `${row_key}_${cellIndex}`\n return (\n \n {row[headCell.id]}\n \n )\n })}\n \n );\n })}\n \n \n \n
\n
\n )\n}\n\nexport default DataTable\n","import DataTable from './data-table'\n\nexport default DataTable\n","import React, { FC } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\n// import ExpansionPanelActions from '@material-ui/core/ExpansionPanelActions';\n// import Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Divider from '@material-ui/core/Divider';\n\nimport useTranslate, { translateFuncType } from './../../../hooks/use-translate';\nimport { CardChargeDetail, ChargeCard } from './../../../state/contracts/types';\nimport DataTable from './../../../components/data-table';\n\nexport type CardBillDetails = CardChargeDetail & ChargeCard;\n\nexport interface ChargeCardRowProps {\n card: CardBillDetails;\n}\n\nexport const useStyles = makeStyles((theme: Theme) =>\n createStyles({\n heading: {\n fontSize: theme.typography.pxToRem(15),\n fontWeight: theme.typography.fontWeightBold,\n },\n secondaryHeading: {\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary,\n },\n column: {\n flexBasis: '33.33%',\n },\n panelDetailsOverride: {\n padding: 0,\n },\n })\n);\n\n\nconst getHeadCells = (translate: translateFuncType) => {\n const headCells: Array = [\n { id: 'tarif', numeric: false, disablePadding: false, label: translate('tabel.header.tarif') },\n { id: 'evseid', numeric: false, disablePadding: false, label: translate('tabel.header.evseid') },\n { id: 'chargepoint_address', numeric: false, disablePadding: false, label: translate('tabel.header.chargepoint_address') },\n { id: 'metertotal', numeric: true, disablePadding: false, label: translate('tabel.header.metertotal') },\n { id: 'metertotal_kwh', numeric: true, disablePadding: false, label: translate('tabel.header.metertotal_kwh') },\n ];\n return headCells;\n}\n\nconst ChargeCardRow: FC = ({ card }) => {\n const classes = useStyles();\n const { translate } = useTranslate();\n const tableData = card.charge_sessions.map(({\n tarif,\n evseid,\n chargepoint_address,\n metertotal,\n metertotal_kwh\n }) => ({\n tarif,\n evseid,\n chargepoint_address,\n metertotal,\n metertotal_kwh,\n }));\n return (\n \n }\n id={`card-panel-${card.cardid}-header`}\n >\n
\n {card.cardid}\n
\n
\n \n
\n \n \n \n \n \n {/*\n \n */}\n
\n );\n};\n\nexport default ChargeCardRow;\n","import React, { FC, useState, useEffect } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\n\nimport {\n ContractsState,\n CardChargeDetail,\n ChargeCard,\n ContractBillDetail\n} from './../../state/contracts/types';\nimport LoadingIndicator from './../../components/loading-indicator';\nimport ChargeCardRow from './components/charge-card-row';\n\nimport { downloadItem, getAPIParams} from '../../core/api-utils';\nimport { API } from 'aws-amplify';\n\nimport { Link, withRouter, RouteComponentProps } from 'react-router-dom';\n\nexport interface ChargeCardsProps {\n contracts: ContractsState\n}\n\nexport type CardBillDetails = CardChargeDetail & ChargeCard;\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n loadingRoot: {\n display: 'flex',\n width: '100%',\n justifyContent: 'center',\n },\n root: {\n width: '100%',\n },\n back: {\n textDecoration: 'none',\n color: 'rgba(55, 55, 60, 1)'\n },\n gridItem: {\n width: '100%',\n }\n })\n);\ntype RouteParams = { customerId: string, contractId: string, yearmonth: string };\nconst ChargeCards: FC = ({ match, contracts: { isLoading, contracts, contractBillDetail } }) => {\n const classes = useStyles();\n const [invoiceLoading, setInvoiceLoading] = useState(false);\n const [cdrLoading, setCdrLoading] = useState(false);\n\n const { customerId, contractId, yearmonth } = match.params as RouteParams;\n const billingYear = yearmonth.slice(0, -2);\n const billingMonth = yearmonth.slice(4, 6);\n\n const [ cdrDetail, setCdrDetail ] = useState();\n\n useEffect(() => {\n getAPIParams().then((params) => {\n if(!params) {\n // TODO show error\n return;\n }\n\n const { API_NAME } = params;\n\n API.get(API_NAME, `/customer/${customerId}/cdr/${contractId}/${yearmonth}`, {}).then(data => {\n setCdrDetail(data);\n })\n });\n\n }, [customerId, contractId, yearmonth]);\n\n if(isLoading || !cdrDetail) {\n return (\n
\n \n
\n );\n }\n let cards: CardBillDetails[] = [];\n cdrDetail.charges_by_card.forEach(card => {\n cards.push({\n ...card,\n card_id: card.cardid\n });\n });\n\n const downloadInvoice = async (contractId: string, billingYear: string, billingMonth: string) => {\n setInvoiceLoading(true);\n await downloadItem(contractId, billingYear, billingMonth,'invoice');\n setInvoiceLoading(false);\n }\n\n const downloadCDR = async (contractId: string, billingYear: string, billingMonth: string) => {\n setCdrLoading(true);\n await downloadItem(contractId, billingYear, billingMonth, 'pdf');\n setCdrLoading(false);\n // window.history.pushState({}, 'I CHANGED', window.location.href + \"#foo\");\n }\n\n return (\n
\n \n \n {'\\u00A0'}\n \n {'\\u00A0'}\n \n {'\\u00A0'}\n \n \n \n \n {cards.map((card) => ())}\n \n \n
\n );\n}\n\n\nexport default withRouter(ChargeCards);\n","import { connect } from 'react-redux';\nimport { AppState } from '../../state/types';\nimport ChargeCards from './charge-cards';\n\nconst mapStateToProps = (state: AppState) => {\n return {\n contracts: state.contracts,\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ChargeCards);\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\n\nimport useConverter from './../../hooks/use-converter';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n gridItem: {\n width: '100%',\n },\n })\n);\n\nconst kwh = 145.265625\nconst total_duration_minutes = 12456.25\n\n\nconst ContentBoxAndTables: React.FC = () => {\n const classes = useStyles();\n const { convertSecondsToReadable, convertNumberToKwh } = useConverter()\n return (\n \n \n \n {kwh} kwh => conversion => {convertNumberToKwh(kwh)} \n \n \n {/* total_duration is in minutes so converting in seconds */}\n {total_duration_minutes} mins => duration conversion => {convertSecondsToReadable(total_duration_minutes * 60)}\n \n \n \n );\n};\n\nexport default ContentBoxAndTables\n","import React, { Component, createRef, RefObject } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport * as d3 from 'd3';\n\nexport interface ChartMargin {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface BarchartProps {\n width: number;\n height: number;\n margin?: ChartMargin;\n}\n\nclass Barchart extends Component{\n\n static defaultProps: BarchartProps & { margin: ChartMargin } = {\n width: 100,\n height: 100,\n margin: {\n top: 10,\n left: 40,\n bottom: 20,\n right: 10\n }\n }\n\n ref: RefObject;\n x?: d3.ScaleBand;\n y?: d3.ScaleLinear;\n xAxis?: (g: any) => any; // TODO change to real type\n yAxis?: (g: any) => any;\n\n constructor(props: BarchartProps) {\n super(props);\n this.ref = createRef();\n }\n\n getPropsWithDefault() {\n return { ...Barchart.defaultProps, ...this.props };\n }\n\n createScalers(data: any[]) {\n const { width, height, margin } = this.getPropsWithDefault();\n\n this.x = d3.scaleBand()\n .domain(data.map(d => d.name))\n .range([margin.left, width - margin.right])\n .padding(0.1);\n\n this.y = d3.scaleLinear()\n .domain([0, 140])\n .rangeRound([height - margin.bottom, margin.top])\n }\n\n createAxis() {\n const { height, margin } = this.getPropsWithDefault();\n const { x, y } = this;\n\n // nullcheck\n if(!x || !y) {\n return;\n }\n\n this.xAxis = (g: any) => g.attr(\"transform\", `translate(0,${height - margin.bottom})`)\n .call(d3.axisBottom(x).tickSizeOuter(0))\n .call((g: any) => g.selectAll(\".domain\").remove());\n\n this.yAxis = (g: any) => g.attr(\"transform\", `translate(${margin.left},0)`)\n .call(d3.axisLeft(y).ticks(null, \"s\"))\n .call((g: any) => g.selectAll(\".domain\").remove());\n\n this.updateAxis();\n }\n\n updateAxis() {\n const { xAxis, yAxis } = this;\n if(!xAxis || !yAxis) {\n return;\n }\n const svg = d3.select(this.ref.current);\n\n svg.append('g')\n .call(xAxis);\n\n svg.append('g')\n .call(yAxis);\n }\n\n componentDidMount() {\n // https://observablehq.com/@d3/stacked-bar-chart\n // https://bl.ocks.org/jamesleesaunders/f32a8817f7724b17b7f1\n // http://bl.ocks.org/Caged/6476579\n const { width, height, margin } = this.getPropsWithDefault();\n\n const svg = d3.select(this.ref.current);\n\n const data = [\n {\n 'name': 'Januar',\n 'Foo': 50,\n 'Bar': 25,\n 'Baz': 15\n },\n {\n 'name': 'Februar',\n 'Foo': 15,\n 'Bar': 29,\n 'Baz': 12\n },\n {\n 'name': 'März',\n 'Foo': 5,\n 'Bar': 22,\n 'Baz': 3\n },\n {\n 'name': 'April',\n 'Foo': 22,\n 'Bar': 12,\n 'Baz': 76\n }\n ];\n\n const columns = [\n 'name',\n 'Foo',\n 'Bar',\n 'Baz'\n ];\n\n // defaults\n this.createScalers(data);\n this.createAxis();\n const { x, y } = this;\n\n // check if everything is ok (typescript...)\n if(!x || !y ) {\n return;\n }\n\n\n\n const series= d3.stack().keys(columns.slice(1))(data as []);\n\n const color = d3.scaleOrdinal()\n .domain(series.map(d => d.key))\n .range(d3.quantize(t => d3.interpolateSpectral(t * 0.8 + 0.1), series.length).reverse())\n .unknown(\"#ccc\");\n\n const graph = svg.append('g')\n .selectAll('g')\n .data(series)\n .join('g')\n .attr('fill', d => color(d.key) as string)\n .selectAll('rect')\n .data(d => d);\n\n const rect = graph.enter()\n .append('rect')\n .attr('x', (d, i) => {\n return x(`${d.data.name}`) as number\n })\n .attr('y', (d, i) => height-margin.bottom)\n .attr('width', x.bandwidth());\n\n rect.transition()\n .duration(1000)\n .delay((d, i) => i * 50)\n .attr('y', d => y(d[1]))\n .attr('height', d => y(d[0]) - y(d[1]));\n\n rect.exit()\n .remove();\n\n\n }\n\n setData() {\n\n }\n\n refresh() {\n this.updateAxis();\n }\n\n render() {\n const { width, height } = this.props;\n const elem = d3.select(this.ref.current);\n\n return \n \n \n ;\n }\n};\n\nexport default Barchart;\n","import Barchart from './bar-chart';\n\nexport default Barchart;\n","import React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\n\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardActions from '@material-ui/core/CardActions';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n card: {\n minWidth: 95,\n width: '100%',\n },\n header: {\n background: theme.palette.primary.main,\n },\n headerTitle: {\n fontSize: theme.typography.subtitle1.fontSize,\n color: theme.palette.primary.contrastText,\n },\n content: {\n width: '100%',\n },\n })\n);\n\ninterface ContentBoxProps {\n title?: string;\n content?: string | React.ReactElement;\n actions?: React.ReactElement;\n classes?: object;\n}\n\nconst ContentBox = (props: ContentBoxProps ) => {\n const { title = null, content = 'content', actions = null } = props\n const classes = useStyles(props);\n return (\n \n {title && }\n \n {content}\n \n { actions &&\n \n {actions}\n \n }\n \n )\n}\n\nexport default ContentBox\n","import ContentBox from './content-box'\n\nexport default ContentBox\n","\nconst headCells: Array = [\n { id: 'name', numeric: false, disablePadding: false, label: 'Name' },\n { id: 'x', numeric: true, disablePadding: false, label: 'X value' },\n { id: 'y', numeric: true, disablePadding: false, label: 'Y value' },\n { id: 'z', numeric: true, disablePadding: false, label: 'Z value' },\n];\n\nconst rows: Array = [\n {\n name: 'Test',\n x: 305,\n y: 3.7,\n z: 67\n },\n {\n name: 'Yes',\n x: 452,\n y: 25.0,\n z: 51\n },\n {\n name: 'No',\n x: 262,\n y: 16.0,\n z: 24\n },\n {\n name: 'Call them',\n x: 159,\n y: 6.0,\n z: 24\n },\n {\n name: 'Good',\n x: 356,\n y: 16.0,\n z: 49\n },\n {\n name: 'Nice',\n x: 408,\n y: 3.2,\n z: 87\n },\n {\n name: 'The best',\n x: 237,\n y: 9.0,\n z: 37\n },\n {\n name: 'Solution',\n x: 375,\n y: 0.0,\n z: 94\n },\n {\n name: 'Mountain',\n x: 518,\n y: 26.0,\n z: 65\n },\n {\n name: 'It is',\n x: 392,\n y: 0.2,\n z: 98\n },\n {\n name: 'Bird',\n x: 318,\n y: 0,\n z:81\n },\n {\n name: 'Goat',\n x: 360,\n y: 19.0,\n z: 9\n },\n {\n name: 'House',\n x: 437,\n y: 18.0,\n z: 63\n }\n];\n\nconst tableData = {\n headCells: headCells,\n data: rows,\n metaData: {\n count: rows.length,\n }\n}\n\nexport default tableData\n","import React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\n\nimport Grid from '@material-ui/core/Grid';\nimport Button from '@material-ui/core/Button';\nimport ContentBox from '../../components/content-box'\nimport DataTable from '../../components/data-table'\nimport tableData from './table-data'\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n padding: '2rem',\n },\n headerOverride: {\n background: 'black',\n },\n headerTitleOverride: {\n color: 'white',\n },\n contentOverride: {\n padding: 0,\n '&:last-child': {\n paddingBottom: 0,\n },\n },\n gridItem: {\n width: '100%',\n },\n })\n);\n\nconst MyContent: React.FC = () => (\n <>\n

Content from Component

\n

Everyday normal Component content you can read me.

\n \n)\n\nconst ContentBoxAndTables: React.FC = () => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n }\n actions={\n <>\n \n \n \n }\n />\n \n \n \n \n \n \n }\n />\n \n \n \n \n \n \n );\n};\n\nexport default ContentBoxAndTables\n","import { SET_CONFIG_DATA, SET_CONFIG_LOADING, SET_CONFIG_PATH, SET_CONFIG_ERROR,\n SetConfigData, SetConfigLoading, SetConfigPath, SetConfigError, ClearConfigError, ConfigData, CLEAR_CONFIG_ERROR } \nfrom './types';\nimport { AppError } from '../errors';\n\nexport const setConfigData = (data: ConfigData): SetConfigData => ({\n type: SET_CONFIG_DATA,\n data\n});\n\nexport const setConfigLoading = (loading: boolean): SetConfigLoading => ({\n type: SET_CONFIG_LOADING,\n loading\n});\n\nexport const setConfigPath = (path: string): SetConfigPath => ({\n type: SET_CONFIG_PATH,\n path\n});\n\nexport const setConfigError = (error?: AppError): SetConfigError => ({\n type: SET_CONFIG_ERROR,\n error\n});\n\nexport const clearConfigError = (): ClearConfigError => ({\n type: CLEAR_CONFIG_ERROR\n});","import { AppError } from '../errors';\nexport const SET_CONFIG_PATH = 'config/set/path';\nexport const SET_CONFIG_LOADING = 'config/loading';\nexport const SET_CONFIG_DATA = 'config/set/data';\nexport const SET_CONFIG_ERROR = 'config/set/error';\nexport const CLEAR_CONFIG_ERROR = 'config/clear/error';\n\nexport interface ConfigData {\n tenantId: string;\n displayName: string;\n dnsDomain: string;\n region: string;\n signInType: string;\n userPoolId: string;\n userPoolWebClientId: string;\n bucketName: string;\n}\n\nexport interface ConfigState {\n configPath?: string,\n config?: ConfigData,\n hasConfig: boolean,\n error?: AppError | null,\n hasError: boolean,\n isLoading: boolean\n}\n\nexport interface SetConfigPath {\n type: typeof SET_CONFIG_PATH;\n path: string;\n}\n\nexport interface SetConfigLoading {\n type: typeof SET_CONFIG_LOADING;\n loading: boolean;\n}\n\nexport interface SetConfigData {\n type: typeof SET_CONFIG_DATA;\n data: ConfigData;\n}\n\nexport interface SetConfigError {\n type: typeof SET_CONFIG_ERROR;\n error?: AppError;\n}\n\nexport interface ClearConfigError {\n type: typeof CLEAR_CONFIG_ERROR;\n}\n\nexport type ConfigActionTypes = SetConfigPath | SetConfigLoading | SetConfigData | SetConfigError | ClearConfigError;\n\n","export interface AppError {\n code?: number;\n original?: Error | any;\n message: string;\n detailMessage: string;\n helpUrl?: string;\n}\n\nexport interface ErrorConstructor {\n original?: Error | any;\n message?: string;\n detailMessage?: string;\n helpUrl?: string;\n}\n\nexport abstract class UIErrorFactory {\n\n private static errors: { [code: number]: AppError } = {\n // config errors\n 1000: {\n message: 'Failed to get Application Config',\n detailMessage: 'Lorem ipsum'\n },\n 1010: {\n message: 'Failed to obtain authentication configuration',\n detailMessage: 'Lorem ipsum'\n }\n };\n\n public static constructfromCode(code: number, optionalDetails?: ErrorConstructor): AppError {\n\n // get error shell\n const template = UIErrorFactory.errors[code];\n\n // optional parameters\n const { \n message = template.message, \n detailMessage = template.detailMessage, \n helpUrl = template.helpUrl,\n original = null\n } = optionalDetails || {};\n\n // return copy with extended props\n const error = {\n ...template,\n code,\n message,\n detailMessage,\n helpUrl,\n original,\n };\n\n console.warn('UI Error was constructed:', error);\n\n return error;\n }\n}","import React from 'react';\nimport Button from '@material-ui/core/Button';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { AppState } from './../../state/types';\nimport { setConfigLoading, setConfigData, setConfigError, clearConfigError } from './../../state/config/actions';\nimport { UIErrorFactory } from '../../state/errors';\n\nconst ErrorAndLoading: React.FC = () => {\n const dispatch = useDispatch()\n const { config } = useSelector((state: AppState) => state.config)\n\n return (\n <>\n \n   \n \n \n )\n}\n\nexport default ErrorAndLoading\n","import React, { FC } from 'react';\n\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nimport Conversions from './conversions'\nimport Barchart from '../../components/barchart';\nimport ContentBoxAndTables from './content-box-and-tables';\nimport ErrorAndLoading from './error-and-loading';\n\nexport interface PlaygroundProps {\n\n}\n\nconst Playground: FC = () => {\n\n return <>\n \n }>\n Conversions\n \n \n \n \n \n \n }>\n Content Boxes\n \n \n \n \n \n \n }>\n Errors and Loaders\n \n \n \n \n \n \n }>\n Charts\n \n \n \n \n \n ;\n}\n\nexport default Playground;\n","import { connect } from 'react-redux';\n\nimport Playground from './playground';\n\nconst mapStateToProps = () => {\n return {\n\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Playground);\n","import { MenuItem } from '../../components/navigation/navigation';\nimport { translateFuncType } from './../../hooks/use-translate';\n\nimport UserDetail from '../user-detail';\nimport Contracts from '../contracts';\nimport Overview from '../overview';\nimport ChargeCards from '../charge-cards';\nimport Playground from '../playground';\n\n// TODO check if there is a better place for this\nconst getMenuItems = (translate: translateFuncType) => {\n const menuItems: MenuItem[] = [\n {\n name: translate('navigation.label.overview'),\n icon: \"blur_circular\",\n slug: \"/overview\",\n visible: true,\n component: Overview\n },\n {\n name: translate('navigation.label.user'),\n icon: \"account_circle\",\n slug: \"/account\",\n visible: true,\n component: UserDetail\n },\n {\n name: translate('navigation.label.contracts'),\n icon: \"assignment\",\n slug: \"/contracts\",\n visible: true,\n component: Contracts\n },\n\n {\n name: translate('navigation.label.charge_cards'),\n icon: \"credit_card\",\n slug: \"/customer/:customerId/contracts/:contractId/:yearmonth\",\n title: \"BOOO\",\n visible: false,\n component: ChargeCards\n },\n {\n name: translate('navigation.label.playground'),\n icon: \"pool\",\n slug: \"/playground\",\n visible: false,\n component: Playground\n }\n ];\n return menuItems;\n}\n\nexport default getMenuItems;\n","import { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\n\nconst drawerWidth = 240;\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n display: 'flex',\n },\n titleWrapper: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n titleLink: {\n opacity: 1,\n height: '2.5rem',\n width: '150px',\n marginRight: '20px',\n marginTop: '-1rem',\n marginBottom: '-1rem',\n transition: theme.transitions.create(['width', 'opacity'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n [theme.breakpoints.down('xs')] :{\n width: '100px',\n }\n },\n titleLinkHide: {\n pointerEvents: 'none',\n width: '0px',\n opacity: 0,\n transition: theme.transitions.create(['width', 'opacity'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n })\n },\n titleImage: {\n height: '100%',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n },\n appBar: {\n backgroundColor: theme.palette.text.primary,\n color: theme.palette.secondary.contrastText,\n overflow: 'hidden',\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n [theme.breakpoints.down('xs')] :{\n position: 'fixed',\n }\n },\n appBarShift: {\n marginLeft: drawerWidth,\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n [theme.breakpoints.up('sm')]: {\n width: `calc(100% - ${drawerWidth}px)`,\n }\n },\n menuButton: {\n marginRight: 0,\n },\n hide: {\n display: 'none',\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n whiteSpace: 'nowrap',\n [theme.breakpoints.down('xs')]: {\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n },\n },\n drawerOpen: {\n width: drawerWidth,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n [theme.breakpoints.down('xs')]: {\n zIndex: theme.zIndex.drawer + 2,\n }\n },\n drawerClose: {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowX: 'hidden',\n width: theme.spacing(7) + 1,\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(8) + 1,\n },\n },\n headerToolbar: {\n backgroundColor: theme.palette.common.black,\n },\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1),\n ...theme.mixins.toolbar,\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(3),\n paddingBottom: theme.spacing(10),\n overflowX: 'hidden',\n [theme.breakpoints.down('xs')]: {\n marginLeft: theme.spacing(7) + 1,\n padding: theme.spacing(1),\n paddingBottom: theme.spacing(10),\n },\n },\n }),\n);\n\n export default useStyles\n","import React, { FC } from 'react';\nimport { Redirect } from 'react-router'\n\nexport interface NotFoundProps {\n\n}\n\nconst NotFound: FC = () => {\n return ();\n\n // TODO there should be a proper not found page, but first, we need to redirect to overview\n //return ;\n}\n\n\nexport default NotFound;\n","import { connect } from 'react-redux';\n\nimport NotFound from './not-found';\n\nconst mapStateToProps = () => {\n return {\n\n }\n}\n\nconst mapDispatchToProps = () => {\n return {\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NotFound);\n","import React, { useState, useEffect } from 'react';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport clsx from 'clsx';\nimport {\n Link,\n Switch,\n Route,\n withRouter,\n matchPath,\n RouteComponentProps\n} from 'react-router-dom';\n\nimport { useTheme } from '@material-ui/core/styles';\nimport CssBaseLine from '@material-ui/core/CssBaseline';\nimport Typography from '@material-ui/core/Typography';\nimport Drawer from '@material-ui/core/Drawer';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\n\nimport { Greetings, UsernameAttribute } from 'amplify-material-ui';\n\nimport useTranslate from './../../hooks/use-translate';\nimport { CSSTheme } from '../../state/theme/types';\nimport Navigation from '../../components/navigation';\nimport getMenuItems from './menu-items';\nimport useStyles from './use-styles';\nimport NotFound from '../not-found';\n\nexport interface RootLayoutProps {\n currentTheme: CSSTheme;\n}\n\nexport interface RootLayoutActions {\n fetchUserInfo: () => any;\n clearUserData: () => any;\n }\n\nconst RootLayout: React.FC = ({ currentTheme, location,fetchUserInfo, clearUserData }) => {\n const theme = useTheme();\n const matches = useMediaQuery(theme.breakpoints.up('sm'))\n const classes = useStyles();\n const { translate } = useTranslate();\n const [open, setOpen] = useState(true);\n\n const toggleDrawer = () => {\n setOpen(state => !state);\n }\n\n useEffect(() => {\n console.log(\"Root layout attched\");\n\n setOpen(matches);\n\n fetchUserInfo();\n\n return () => {\n console.log(\"Root layout detached\");\n clearUserData();\n }\n }, [matches]);\n\n const menuItems = getMenuItems(translate)\n const currentMenuItem = menuItems.find((item) =>\n matchPath(location.pathname, {path: item.slug, exact: true, strict: false})\n );\n\n let menuText = '';\n if(currentMenuItem) {\n menuText = currentMenuItem.title\n ? typeof currentMenuItem.title === 'function'\n ? currentMenuItem.title({\n pathname: location.pathname\n })\n : currentMenuItem.title\n : currentMenuItem.name\n }\n return (\n
\n \n \n \n \n }\n title={
\n \n
\n \n { menuText }\n
}\n />\n \n
\n \n
\n \n \n {theme.direction === 'rtl' ? : (open ? : )}\n \n
\n {/**/}\n \n \n
\n
\n \n {\n menuItems.map(({slug, component: RouteOutlet}) => {\n return ;\n })\n }\n \n \n
\n
\n );\n};\n\nexport default withRouter(RootLayout);\n","import { SetThemeAction, AddThemeAction, SET_THEME, ADD_THEME, CSSTheme } from './types';\n\nexport const setTheme = (theme: string): SetThemeAction => ({\n type: SET_THEME,\n theme\n});\n\nexport const addTheme = (themeName: string, options: CSSTheme): AddThemeAction => ({\n type: ADD_THEME,\n themeName,\n options\n})","export const SET_THEME = 'theme/set';\nexport const ADD_THEME = 'theme/add';\n\nexport interface CSSTheme {\n mui: any; // Material UI Theme props\n}\n\nexport interface ThemeState {\n currentTheme: string;\n themes: { [id: string]: CSSTheme }\n}\n\nexport interface SetThemeAction {\n type: typeof SET_THEME;\n theme: string;\n}\n\nexport interface AddThemeAction {\n type: typeof ADD_THEME;\n themeName: string,\n options: any;\n}\n\nexport type ThemeActionTypes = SetThemeAction | AddThemeAction;\n\n","import {\n SetUserLoading, SetUserData, SetUserError, ClearUserError, ClearUserData,\n SET_USER_LOADING, SET_USER_DATA, SET_USER_ERROR, CLEAR_USER_ERROR, CLEAR_USER_DATA,\n CSSUser\n} from './types';\nimport { AppError } from '../errors';\n\nexport const setUserLoading = (isLoading: boolean): SetUserLoading => ({\n type: SET_USER_LOADING,\n isLoading\n});\n\nexport const setUserData = (userData: CSSUser): SetUserData => ({\n type: SET_USER_DATA,\n userData\n});\n\nexport const clearUserData = (): ClearUserData => ({\n type: CLEAR_USER_DATA\n})\n\nexport const setUserError = (error?: AppError): SetUserError => ({\n type: SET_USER_ERROR,\n error\n});\n\nexport const clearUserError = (): ClearUserError => ({\n type: CLEAR_USER_ERROR\n});","import { AppError } from '../errors';\n\nexport const SET_USER_LOADING = 'user/set/loading';\nexport const SET_USER_DATA = 'user/set/data';\nexport const CLEAR_USER_DATA = 'user/clear/data';\nexport const SET_USER_ERROR = 'user/set/error';\nexport const CLEAR_USER_ERROR = 'user/clear/error';\n\nexport interface Address {\n street: string;\n houseNumber: string;\n zip: string;\n city: string;\n country: string;\n}\n\nexport interface CSSUser {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n address: Address;\n}\n\nexport interface UserState {\n isLoading: boolean;\n user?: CSSUser;\n error?: AppError;\n}\n\nexport interface SetUserLoading {\n type: typeof SET_USER_LOADING;\n isLoading: boolean;\n}\n\nexport interface SetUserData {\n type: typeof SET_USER_DATA;\n userData: CSSUser;\n}\n\nexport interface ClearUserData {\n type: typeof CLEAR_USER_DATA;\n}\n\nexport interface SetUserError {\n type: typeof SET_USER_ERROR;\n error?: AppError;\n}\n\nexport interface ClearUserError {\n type: typeof CLEAR_USER_ERROR;\n}\n\nexport type UserActionTypes = SetUserLoading | SetUserData | SetUserError | ClearUserError | ClearUserData;","import {\n SetContractsData, SetContractsError, SetContractsLoading, ClearContractsError, SetContractBillDetails,\n SET_CONTRACTS_DATA, SET_CONTRACTS_ERROR, SET_CONTRACTS_LOADING, CLEAR_CONTRACTS_ERROR, SET_CONTRACTS_BILL_DATA,\n Contract, ContractBillDetail\n }\nfrom './types';\nimport { AppError } from '../errors';\n\nexport const setContractsData = (data: Contract[]): SetContractsData => ({\n type: SET_CONTRACTS_DATA,\n data\n});\n\nexport const setContractsError = (error?: AppError): SetContractsError => ({\n type: SET_CONTRACTS_ERROR,\n error,\n});\n\nexport const setContractsLoading = (isLoading: boolean): SetContractsLoading => ({\n type: SET_CONTRACTS_LOADING,\n isLoading\n});\n\nexport const clearContractsError = (): ClearContractsError => ({\n type: CLEAR_CONTRACTS_ERROR\n});\n\nexport const setContractBillDetails = (data: ContractBillDetail[]): SetContractBillDetails => ({\n type: SET_CONTRACTS_BILL_DATA,\n data\n});\n\n","import { AppError } from '../errors';\n\nexport const SET_CONTRACTS_LOADING = 'contracts/set/loading';\nexport const SET_CONTRACTS_DATA = 'contracts/set/data';\nexport const SET_CONTRACTS_ERROR = 'contracts/set/error';\nexport const CLEAR_CONTRACTS_ERROR = 'contracts/clear/error';\nexport const SET_CONTRACTS_BILL_DATA = 'contractsbill/set/data';\n\n\nexport interface Contract {\n contract_id: string;\n name: string;\n cards: ChargeCard[];\n bills: ContractBillOverview[];\n category?: string;\n}\n\nexport interface ChargeCard {\n cardid: string;\n card_id: string;\n active?: boolean;\n annotation?: string;\n}\nexport type CardsMap = { [id: string]: ChargeCard };\n\nexport interface ChargeAggregate {\n total_sessions: number;\n total_kwh: number;\n total_duration: number;\n}\n\nexport type CardChargeAggregate = ChargeCard & ChargeAggregate;\n\nexport interface TransformedCDR {\n id: string;\n card_id: string;\n evse_id: string;\n chargepoint_address: string;\n chargetype: string;\n is_roaming_station: boolean;\n ts_start: string;\n ts_end: string;\n metertotal_kwh: string;\n price_per_unit_net: string;\n total: string;\n}\n\nexport interface ContractBill {\n total_cards: number;\n cards: CardChargeAggregate [];\n}\n\nexport type ContractBillAggregate = ContractBill & ChargeAggregate;\n\nexport interface ContractBillOverview {\n contract_id: string;\n billing_year: string;\n billing_month: string;\n invoice_id?: string;\n contract_name?: string;\n aggregates: ContractBillAggregate;\n}\n\nexport interface ChargeSession {\n ts_start: string;\n ts_end: string;\n tarif: string;\n metertotal: number;\n metertotal_kwh: number;\n evseid: string;\n chargepoint_address: string;\n chargepointstreet: string;\n chargepointzip: string;\n chargepointcity: string;\n chargepointcountry: string;\n roaming: string;\n is_roaming_station: boolean;\n is_roaming_card: boolean;\n chargetype: string;\n publickey: string;\n link_to_signed_datasets: string;\n type_of_transparency_method: string;\n}\n\nexport interface CardChargeDetail {\n cardid: string,\n customernumber: string | null,\n charge_sessions: ChargeSession[];\n}\n\nexport interface ContractBillDetail {\n contract_id: string;\n billing_year: string;\n billing_month: string;\n charges_by_card: CardChargeDetail[];\n}\n\nexport interface ContractsState {\n isLoading: boolean;\n contracts: Contract[];\n contractBillDetail: ContractBillDetail[];\n}\n\nexport interface Datum {\n x: string;\n y: number;\n}\n\nexport interface ChargeVisualizationData {\n label: string;\n datums: Datum[];\n}\n\nexport interface SetContractsLoading {\n type: typeof SET_CONTRACTS_LOADING;\n isLoading: boolean;\n}\n\nexport interface SetContractsData {\n type: typeof SET_CONTRACTS_DATA;\n data: Contract[];\n}\n\nexport interface SetContractsError {\n type: typeof SET_CONTRACTS_ERROR;\n error?: AppError;\n}\n\nexport interface ClearContractsError {\n type: typeof CLEAR_CONTRACTS_ERROR;\n}\n\nexport interface SetContractBillDetails {\n type: typeof SET_CONTRACTS_BILL_DATA;\n data: ContractBillDetail[];\n}\n\nexport type ContractsActionTypes = SetContractsLoading | SetContractsData | SetContractsError | ClearContractsError | SetContractBillDetails;\n\n","import Amplify, { Auth } from 'aws-amplify'; \n\nimport { Dispatch } from 'redux';\nimport { ConfigData } from './types';\nimport { API_NAME } from '../types';\nimport { API_BASE } from '../../core/api-utils';\nimport { setConfigLoading, setConfigError, setConfigData, clearConfigError } from './actions';\nimport { UIErrorFactory } from '../errors';\n\nexport const resolveConfigFromUrl = () => async(dispatch: Dispatch) => {\n console.log(`Running CSS in ${process.env.NODE_ENV}`);\n let configBase = '';\n let dnsDomain = '';\n if('development' === process.env.NODE_ENV){\n configBase = 'https://dq2ejgx8z1w8c.cloudfront.net';\n dnsDomain = 'service-stage.ewe-go.de';\n } else {\n dnsDomain = window.location.hostname;\n }\n\n const configUrl = `${configBase}/tenant-api/?filter=%7B\"dnsDomain\"%3A\"${dnsDomain}\"%7D`;\n console.log(`Loading config from ${configUrl}`);\n await dispatch(loadConfig(configUrl) as any);\n} \n\nexport const loadConfig = (location: string|ConfigData) => async (dispatch: Dispatch) => {\n console.log(\"Loading config\");\n // reset error and tell store that config is loading\n dispatch(setConfigLoading(true));\n dispatch(clearConfigError());\n\n let configData: ConfigData;\n if(typeof location === 'string') {\n // if location is string, try to load it as a url\n configData = await fetch(location)\n .then(res => res.json())\n .catch(err => {\n // catch error\n const error = UIErrorFactory.constructfromCode(1000, {original: err});\n dispatch(setConfigError(error));\n });\n } else {\n configData = location;\n }\n\n // TODO check configuration integrety \n\n // apply configuration to amplify\n try {\n Amplify.configure({\n Auth: {\n region: configData.region, \n userPoolId: configData.userPoolId, \n userPoolWebClientId: configData.userPoolWebClientId,\n },\n API: {\n endpoints: [\n {\n name: API_NAME,\n endpoint: API_BASE,\n custom_header: async () => { \n return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }\n } \n }\n ]\n }\n });\n\n } catch(err) {\n const error = UIErrorFactory.constructfromCode(1010, {original: err});\n dispatch(setConfigError(error));\n }\n\n // set application data\n dispatch(setConfigData(configData));\n dispatch(setConfigLoading(false));\n}","export const asyncTimeout = (time: number, data?: T): Promise => {\n return new Promise((res, rej) => {\n setTimeout(() => {\n res(data);\n }, time);\n });\n}","import { connect } from 'react-redux';\nimport { Dispatch } from 'redux';\nimport RootLayout from './root-layout';\nimport { AppState } from '../../state/types';\n\nimport { clearUserData } from '../../state/actions';\nimport { fetchUserInfo } from '../../state/operations';\n\nconst mapStateToProps = ({ theme }: AppState) => {\n return {\n currentTheme: theme.themes[theme.currentTheme]\n };\n};\n\nconst mapDispatchToProps = (dispatch: Dispatch) => {\n return {\n fetchUserInfo: () => dispatch(fetchUserInfo() as any),\n clearUserData: () => dispatch(clearUserData())\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RootLayout);\n","\nimport { Dispatch } from 'redux';\nimport { API_NAME } from '../types';\nimport { setUserLoading, setUserData } from './actions';\n\nimport { fetchContractInfo } from '../contracts/operations';\n\nimport { createApiURL } from '../../core/api-utils';\nimport { API, Auth } from 'aws-amplify';\n\nimport { asyncTimeout } from '../utils';\n\nexport const fetchUserInfo = () => async (dispatch: Dispatch) => {\n console.log(\"Fetching User Info\");\n const user = await Auth.currentSession().catch(ex => { console.log(\"No user session existing\"); });\n\n if (user) {\n dispatch(setUserLoading(true));\n const {\n sub: userId\n } = user.getIdToken().payload;\n\n const res = await API.get(API_NAME, createApiURL(`customer/${userId}`), {});\n\n dispatch(setUserData(res));\n\n // if user was set, dispatch latest contracts\n dispatch(fetchContractInfo() as any);\n\n dispatch(setUserLoading(false));\n } else {\n console.log(\"User not logged in.\");\n await asyncTimeout(500);\n dispatch(fetchUserInfo() as any);\n }\n}","import { Dispatch } from 'redux';\nimport { setContractsData, setContractsError, setContractsLoading, clearContractsError, setContractBillDetails } from './actions';\nimport { Contract, ContractBillDetail } from './types';\n\nimport { API_NAME } from '../types';\nimport { createApiURL } from '../../core/api-utils';\nimport { API, Auth } from 'aws-amplify';\n\nexport const fetchContractInfo = () => async (dispatch: Dispatch) => {\n dispatch(setContractsLoading(true));\n\n const user = await Auth.currentSession().catch(ex => { console.log(\"No user session existing\"); });\n \n if (!user) {\n // TODO show the user an error indicating that something went wrong\n dispatch(setContractsLoading(false));\n return;\n }\n\n const {\n sub: userId\n } = user.getIdToken().payload;\n\n const res = await API.get(API_NAME, createApiURL(`customer/${userId}/contracts`), {});\n dispatch(setContractsData(res));\n\n dispatch(setContractsLoading(false));\n}\n\nexport const fetchContractBillOverviewInfo = () => async (dispatch: Dispatch) => {\n\n // const contractBillDetail: ContractBillDetail[] = CHARGE_CARD_BILL_MONTH_CDR\n\n // dispatch(setContractBillDetails(contractBillDetail));\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Link from '@material-ui/core/Link';\nimport ErrorIcon from '@material-ui/icons/Error';\n\nimport { AppState } from '../state/types';\n\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n position: 'fixed',\n display: 'flex',\n flexFlow: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width : '100vw',\n height : '100vh',\n },\n icon: {\n fontSize: '5rem',\n color: theme.palette.error.dark,\n },\n message: {\n maxWidth: '50%',\n marginTop: theme.spacing(3),\n },\n helpLink: {\n marginTop: theme.spacing(4),\n }\n })\n);\n\n/* TODO: define it in better way\nfunction getStructuredError(error: string): AppError {\n return {\n code: 100,\n message: 'Message',\n detialMessage: \"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type\",\n helpUrl: 'https://www.google.com'\n }\n}\n*/\n\nconst AppUIError: React.FC = () => {\n const classes = useStyles();\n const { error } = useSelector((state: AppState) => state.config);\n if(!error) {\n // do not show an error, if there is no...\n return <>;\n }\n\n const { message, detailMessage, helpUrl } = error;\n return (\n
\n \n \n {message}\n \n \n {detailMessage}\n \n {helpUrl && \n Read more !\n }\n
\n )\n}\n\nexport default AppUIError\n","import React from 'react';\nimport useTranslate from './../hooks/use-translate';\nimport { useSelector } from 'react-redux';\n\nimport { AppState } from './../state/types';\nimport LoadingIndicator from \"./../components/loading-indicator\"\nimport AppError from \"../components/ui-app-error\"\n\nconst withWaitForConfig = (Component: React.ElementType) => {\n const ConfigurationCheck: React.FC = (props) => {\n const {\n hasConfig,\n hasError,\n isLoading\n } = useSelector((state: AppState) => state.config);\n const { translate } = useTranslate();\n const isConfigValid = !hasError && !isLoading && hasConfig;\n return isConfigValid ? (\n \n ) : hasError ? (\n \n ) : (\n \n );\n }\n return ConfigurationCheck;\n}\n\nexport default withWaitForConfig;\n","import React from \"react\";\nimport {\n BrowserRouter as Router,\n} from 'react-router-dom';\n\nimport { useSelector } from 'react-redux';\nimport { AppState } from \"./state/types\";\nimport { withAuthenticator, Greetings } from \"amplify-material-ui\";\n\nimport { ThemeProvider } from \"@material-ui/styles\";\nimport { createMuiTheme } from \"@material-ui/core\";\n\nimport ResetPasswordRedirect from './components/reset-password-redirect';\nimport PasswordNotification from './components/password-notification';\nimport Footer from './components/footer';\nimport authMaterialUiDEMessages from './translations/amplify-material-ui-de.json';\nimport LanguageProvider from './providers/language-provider';\nimport RootLayout from \"./views/root-layout\";\nimport withWaitForConfig from \"./hoc/with-wait-for-config\"\n\ntype AppProps = {};\n\nconst WaydoCSSApp: React.FC = () => {\n console.log(\"Rendering App, you should only see this when you change style...\");\n const currentTheme = useSelector((state: AppState) => state.theme.themes[state.theme.currentTheme])\n const theme = createMuiTheme(currentTheme.mui);\n\n const RootLayoutWithConfig = withWaitForConfig(\n withAuthenticator(RootLayout as any, {\n theme,\n hide: [Greetings],\n hideSignUpLink: true,\n hideForgotPasswordLink: false,\n intlProps: {\n customMessages: {\n de: authMaterialUiDEMessages\n }\n }\n }));\n\n return (\n \n \n \n \n \n \n