{"version":3,"sources":["features/signIn/types.ts","features/signIn/actions.ts","features/signIn/validations.ts","features/signIn/styles.ts","customization/components/signInPersonalViewInfoPanel/signInPersonalViewInfoPanel.tsx","features/signIn/signInPersonalIdView.tsx","utils/nameofFactory.ts","features/signIn/signInPinCodeView.tsx","features/signIn/signInContainer.tsx","features/signIn/reducers.ts","features/signIn/selectors.ts","features/signIn/sagas.ts","features/signIn/index.ts","features/signOut/actions.ts","features/downloadFile/actions.ts","features/authentication/index.ts","features/payrollTickets/index.ts","features/themes/index.ts","features/documents/index.ts","features/shiftSchedules/index.ts","features/themes/actions.ts","features/errors/index.ts","features/notifications/index.ts","components/fullPageLoadingIndicator/actions.ts","features/errors/actions.ts","features/payrollTickets/selectors.ts","features/shiftSchedules/selectors.ts","components/icon/icon.tsx","components/icon/index.ts","features/authentication/selectors.ts","features/payrollTickets/actions.ts","features/themes/themedAppContainer.tsx","features/themes/defaultThemeOptions.ts","features/themes/colorPalettes/palette.default.ts","features/themes/colorPalettes/palette.cezep.ts","features/themes/colorPalettes/palette.lm.ts","features/themes/colorPalettes/palette.ksystem.ts","features/themes/colorPalettes/paletteProvider.ts","features/themes/colorPalettes/index.ts","features/themes/themeService.ts","features/documents/selectors.ts","api/interfaces/index.ts","features/menu/types.ts","configuration/mainMenu.ts","features/menu/menuProvider.ts","features/menu/mainMenuContent.tsx","features/menu/selectors.ts","features/menu/mainMenuDrawerContent.tsx","features/menu/mainMenuDrawer.tsx","features/payrollTicketPattern/payrollTicketPatternProvider.ts","features/payrollTicketPattern/payrollTicketPatternContainer.tsx","features/app/actions.ts","features/app/authenticatedAppRouter.tsx","customization/logos/logoProvider.ts","features/app/authenticatedApp.tsx","features/app/unauthenticatedAppHeader.tsx","features/app/unauthenticatedAppFooter.tsx","features/app/unauthenticatedAppOneColumnLayout.tsx","features/app/unauthenticatedAppTwoColumnLayout.tsx","features/app/unauthenticatedAppRouter.tsx","features/app/unauthenticatedApp.tsx","features/app/appProviderContainer.tsx","features/app/sagas.ts","features/app/index.ts","icons/library.ts","features/authentication/reducers.ts","features/shiftSchedules/actions.ts","features/documents/reducers.ts","features/shiftSchedules/reducers.ts","features/themes/reducers.ts","features/errors/reducers.ts","utils/stack.ts","components/fullPageLoadingIndicator/reducers.ts","configuration/environment.ts","features/payrollTickets/reducers.ts","features/signOut/signOutContainer.tsx","features/signOut/sagas.ts","features/authentication/sagas.ts","components/fullPageLoadingIndicator/fullPageLoadingIndicatorContainer.tsx","features/tenant/tenantDomains.ts","features/tenant/tenantProvider.ts","features/tenant/tenantConfiguratinService.ts","features/tenant/index.ts","features/notifications/newSectionNotification.tsx","components/logo/logo.tsx","components/input/input.tsx","components/tabs/tabs.tsx","components/index.ts","features/notifications/newDocumentNotification.tsx","features/notifications/messages.ts","features/notifications/configuration.ts","features/documents/sagas.ts","api/interfaces/enums/documentType.ts","api/interfaces/enums/documentGroupType.ts","features/shiftSchedules/sagas.ts","features/themes/sagas.ts","features/errors/sagas.ts","features/downloadFile/sagas.ts","features/payrollTickets/payrollTicketsYears.tsx","features/payrollTickets/payrollTicketsTable.tsx","features/payrollTickets/payrollTicketsContainer.tsx","features/shiftSchedules/shiftSchedulesTable.tsx","features/shiftSchedules/shiftSchedulesGroups.tsx","features/shiftSchedules/shiftSchedulesContainer.tsx","features/payrollTickets/mappers.ts","features/payrollTickets/sagas.ts","features/documents/documentsTable.tsx","features/documents/documentsContainer.tsx","features/payrollTicketPattern/cezep_payrollTicket_pattern_50.jpg","features/payrollTicketPattern/cezep_payrollTicket_pattern_EN_50.jpg","features/payrollTicketPattern/lm_payrollTicket_pattern_50.jpg","features/payrollTicketPattern/lm_payrollTicket_pattern_EN_50.jpg","customization/logos/cez_ep.png","customization/logos/logo_lomy_morina.png","fonts/IstokWeb/IstokWeb-Regular.ttf","features/downloadFile/index.ts","api/responses/baseResponse.ts","api/clients/baseJsonClient.ts","api/clients/baseAuthenticatedClient.ts","api/clients/authenticationClient.ts","api/clients/baseClient.ts","api/clients/payrollClient.ts","api/clients/documentClient.ts","api/clients/documentGroupClient.ts","api/handlers/authenticatedRequestHandler.ts","api/handlers/errorHandler.ts","api/interceptors/tenantInterceptor.ts","api/apiClient.ts","api/apiClientInstance.ts","configuration/api.ts","icons/index.ts","features/alerts/types.ts","features/alerts/actions.ts","features/alerts/actions.internal.ts","features/alerts/generators.ts","configuration/alerts.ts","features/alerts/alert.tsx","features/alerts/alertsContainer.tsx","features/alerts/reducer.ts","features/alerts/index.ts","features/authentication/actions.ts","features/documents/actions.ts","utils/array.ts","store/rootReducer.ts","saga/asyncActionsSaga.ts","saga/rootSaga.ts","index.tsx","store/configureStore.ts","features/signOut/index.ts","components/fullPageLoadingIndicator/index.ts"],"names":["SignInPageEnum","signInRequestOptAsync","createAsyncAction","signInValidateOptAsync","signInPersonalIdValidationSchema","Yup","shape","personalId","required","signInPinCodeValidationSchema","pinCode","useSignInStyles","makeStyles","theme","createStyles","infoText","margin","lineHeight","fontSize","grid","paddingTop","noAccountText","padding","spacing","text","mailTo","color","SignInPersonalViewInfoPanelLazy","tenantProvider","getTenant","React","lazy","SignInPersonalViewInfoPanelLazyLoader","nameof","name","SingInPersonalIdView","props","classes","errorMessage","requestInProgress","supportEmail","mailToHref","mailToComponent","href","className","initialValues","onSubmit","values","setSubmitting","requestOpt","validationSchema","formProps","touched","errors","handleChange","handleBlur","handleSubmit","Typography","align","variant","root","Grid","container","item","xs","iconName","labelText","helperText","error","Boolean","InputProps","onChange","onBlur","value","autoFocus","justify","Button","title","type","disabled","SingInPinCodeView","validateOpt","useStyles","minHeight","loginText","palette","primary","main","connect","state","page","signIn","dispatch","bindActionCreators","signInRequestOptRequest","actions","request","signInValidateOtpRequest","componet","PersonalId","tenantConfiguratinService","getRegistrationEmail","PinCode","getSignInView","Container","maxWidth","initialState","pageReducer","createReducer","handleAction","success","action","failure","personalIdReducer","payload","errorMessageReducer","message","requestInProgressReducer","combineReducers","getPersonalId","rootSaga","signInRequestOpt","signInValidateOpt","all","takeEvery","getLocationSelector","router","location","console","warn","apiClient","Authentication","sendOtpAsync","response","resultCode","put","Error","resultReason","select","loginAsync","clearAlerts","referer","push","pathname","signOutAsync","downloadFile","createAction","selectThemeName","detectThemeName","showFullPageLoadingIndicator","hideFullPageLoadingIndicator","genericError","getPayrolTicketsSelectedYear","payrollTickets","selectedYear","getPayrolTicketsByYears","payrollTicketList","byYears","selectSelectedYear","selectPayrolTicketsByYear","year","selectPayrollById","payrollId","find","payroll","id","selectPayrolTicketsBySelectedYear","createSelector","getDocumentsSelectedGroupId","shiftSchedules","selectedGroupId","getDocumentsByGroups","documentList","byGroups","selectDocumentById","byId","selectDocuments","allIds","map","selectSelectedGroupId","selectDocumentsByGroup","groupId","iconPrefix","IconProps","otherProps","usedIconPrefix","icon","getUserExpiryDate","authentication","user","dateOfUserExpiry","getUserTenantDomain","tenantHost","selectYear","getPeriodsAsync","getPayrollsAsync","downloadPayrollAsync","getPayrollPinCodeAsync","themeName","useEffect","themeService","createTheme","MuiInputBaseInputPaddings","Bottom","Left","Right","Top","Padding","defaultThemeOptions","breakpoints","sm","md","lg","xl","typography","fontFamily","paddings","MuiInputBaseInput","secondary","listLine","background","default","overrides","MuiCssBaseline","fontStyle","fontDisplay","fontWeight","src","IstokWebTtf","unicodeRange","MuiInputBase","backgroundColor","input","MuiButton","textTransform","MuiIcon","width","height","MuiDivider","vertical","alignSelf","getPallete","themeKey","ColorPalettes","defaultPalette","cezep","cezepPalette","ksystem","ksystemPalette","lm","lmPalette","tennantPalette","PaletteProvider","finalThemeOptions","DefaultThemeOptions","createMuiTheme","getThemeName","tenantKey","documents","MenuItemModel","to","label","onlyForTenants","lable","this","MenuItemsConfiguration","getMenu","filter","menuItem","includes","display","appBar","boxShadow","up","marginLeft","toolBar","menuButton","marginRight","toolbar","mixins","content","flexGrow","grow","sectionDesktop","sectionMobile","userInfo","flexDirection","textAlign","userInfoPersonalId","userInfoAvatar","menuItemRoot","paddingBottom","paddingLeft","textDecoration","borderBottom","menuItemDivider","menuItemIcon","menuItemIconActive","menuItemText","menuItemTextActive","menuItemActive","visibility","MainMenuNavLink","match","useRouteMatch","path","exact","Box","alignItems","Divider","orientation","p","ml","mr","ListItemText","secondaryTypographyProps","MainMenuContent","useState","menuItems","setMenuItems","menuItemsByTenant","menuProvider","component","pt","List","ListItem","key","getUserInfoSelector","fullName","initials","drawer","flexShrink","drawerPaper","menuItemInActive","defaultProps","bgcolor","borderColor","m","border","style","Fragment","justifyContent","borderRadius","mt","MainMenuDrawer","useTheme","aria-label","Hidden","mdUp","implementation","Drawer","anchor","direction","open","mobileOpen","onClose","handleDrawerToggle","paper","ModalProps","keepMounted","smDown","configuration","cz","cezepPayrollTicketPatternImage","en","cezepPayrollTicketPatternEnImage","lmPayrollTicketPatternImage","lmPayrollTicketPatternEnImage","getPayrollPattern","language","image","languages","PayrollTicketPatternContainer","selectedLanguage","onSelectedLanguageChange","onSelectedItemChange","useCallback","selectedItem","imageSrc","payrollTicketPatternProvider","tabItemKeySelector","tabItem","tabItemLabelSelector","labelTab","selectedTabItemKey","tabItems","alt","afterAuthenticatedAppDidMount","afterNavigation","AuthenticatedAppRouter","useLocation","useDispatch","debug","getLogo","LOMY_MORINA_LOGO","CEZ_EP_LOGO","paddingRight","toolBarImage","contentContainer","marginTop","marginBottom","flex","leftDrawer","AuthenticatedApp","setMobileOpen","logo","logoProvider","renderDesktopMenu","IconButton","Badge","AppBar","position","Toolbar","onClick","withStyles","footerText","UnauthenticatedAppFooter","form","UnauthenticatedAppOneColumnLayout","children","useHeaderStyles","gridRoot","columnLeft","columnRight","columnRightUserIcon","opacity","columnRightEmployeeText","UnauthenticatedAppTwoColumnLayout","headerClasses","fixedWidth","UnauthenticatedAppRouter","render","UnauthenticatedApp","AppProviderContainer","tryLoadAuthenticatedUserFormCredentials","fallback","size","Component","authenticationActions","afterAuthenticatedAppDidMountHandler","afterNavigationHandler","userExpiryDate","getAccesToPortalAfterTerminationOfEmployment","addErrorAlertWithTenantFilter","addInfoAlerWithCustomComponentWithTenantFilter","NewSectionNotification","sectionName","sectionPath","sectionDescription","userTenantDomain","currentTenantDomain","getSubdomain","currentTenant","TenantDomains","library","add","faUserTie","faIdCardAlt","faBell","faPowerOff","faBars","faDownload","faFileInvoice","faFileAlt","faKey","faFolderDownload","isAuthenticated","userReducer","loadAuthenticatedUserFormStorageAsync","setAuthenticatedUserFormCredentials","isAuthenticatedReducer","selectGroup","getGroupsAsync","getDocumentsAsync","downloadDocumentAsync","documentListReducer","produce","draft","forEach","document","publicFrom","publicFromUtc","Date","toLocaleDateString","groups","groupsReducer","selectedGroupIdReducer","themeNameReducer","errorCode","errorsReducer","Stack","stack","pop","isEmpty","showIndicator","indicatorStack","fullPageLoadingIndicatorReducer","newStack","clone","currentYear","getFullYear","years","yearsReducer","selectedYearReducer","payrollTicketListReducer","payrolls","undefined","signOutRequest","signOut","tryLoadAuthenticatedUserFormCredentialHandler","loadAuthenticatedUserFormCredential","sigOutSuccess","signInSuccess","token","cookies","get","decodedToken","jwtDecode","now","exp","expiration","unique_name","nameid","tenanthost","remove","zIndex","right","bottom","top","left","show","fullPageLoadingIndicator","localhost","dev","domainKey","domain","window","host","split","RegistrationEmails","emailKey","withStylesFunction","labelFormControl","transform","iconRoot","inputInput","inputRoot","inputStartAdornment","shrink","setShrink","FormControl","fullWidth","InputLabel","formControl","InputLabelProps","onFocus","event","target","length","startAdornment","InputAdornment","FormHelperText","useTabsStyles","tabsRoot","tabRoot","minWidth","tabIndicator","tabTextColorPrimary","Tabs","indicatorColor","textColor","selectedTabValue","preventDefault","itemKey","indicator","textColorPrimary","notificationConfigurations","newDocument","newSection","accesToPortalAfterTerminationOfEmployment","isNotificationAllowed","notificationType","tenant","getDocumentsRequest","downloadDocumentRequest","apiClientInstance","Documents","getAsync","DocumentType","GeneralInformation","orderedData","data","sort","a","b","getPdfAsync","blob","downloadFileResponse","filename","fileName","DocumentGroupType","selectedGroupChanged","getGroupsRequest","getGroupsSuccess","getByGroupAsync","DocumentGroups","ShiftSchedule","order","selectedGroup","group","genericErrorHandler","downloadFileHandler","navigator","msSaveOrOpenBlob","url","URL","createObjectURL","link","createElement","setAttribute","body","appendChild","click","PayrollTicketsYears","onSelectedYearChange","listRoot","table","tableCellBody","tableRowAnyItem","actionIconRoot","actionIcon","ExtendedTableCellWithStyles","wrapper","bodyActive","indicatorActive","indicatorInactive","selected","muiTableCellProps","muiTableCellClasses","TableCell","PayrollTicketsTable","memo","defaultSelectedValue","rows","setSelected","handleClick","handleActionDownloadPayroll","handleActionGetPayrollPinCode","TableRow","colSpan","row","scope","period","cursor","getTableRows","downloadPayrollAction","getPayrollPinCode","Table","TableHead","TableBody","tableCellRoot","borderBottomColor","tableCellHead","infoTextRoot","infoTextActionIconRoot","infoTextActionIcon","getPeriodsRequest","getPayrollPinCodeAction","Paper","DocumentsTable","handleActionDownloadDocument","downloadDocumentAction","ShiftSchedulesGroups","ShiftSchedulesContainer","getGroupsAction","payrollModelsToPayrollTicketMapper","month","toLocaleString","minimumIntegerDigits","useGrouping","getPeriodSuccess","getPayrollsRequest","selectedYearChanged","downloadPayrollRequest","getPayrollPinCodeRequest","Payrolls","previousYear","getPdfPinCodeAsync","addSuccessAlertWithTenantFilter","publicFromColumn","DocumentsContainer","getDocumentsAction","module","exports","BaseResponse","httpStatusCode","BaseJsonClient","axiosInstance","modelPath","route","query","config","headers","Accept","composeUrl","axiosResponse","post","urlBuilder","BaseAuthenticatedClient","authenticatedRequestHandler","errorHandler","handleRequestAsync","errorResposne","responseType","status","AuthenticationClient","identificationNumber","postHttpAsync","otp","PayrollClient","getHttpAsync","getHttpBinaryAsync","DocumentClient","DocumentGroupClient","AuthenticatedRequestHandler","ErrorHandler","responses","toLowerCase","tenantInterceptor","requestConfig","baseUrl","axios","create","baseURL","timeout","withCredentials","Pragma","Expires","validateStatus","registerInterceptors","interceptors","use","Promise","reject","process","AlertMessage","init","Object","assign","AlertModel","componentProps","uuidV4","addAlert","removeAlert","addErrorAlert","alert","addSuccessAlert","addInfoAlerWithCustomComponent","messageType","alertAutoCloseConfig","autoCloseInfo","autoCloseSuccess","autoCloseWarning","autoCloseError","isAlertVisible","Alert","timer","bind","onHide","isAlertTimeout","autoCloseConfig","setTimeout","clearTimeout","setState","Collapse","in","unmountOnExit","onExited","severity","canClose","AlertsContainer","alertId","alerts","reducer","getType","i","indexOf","slice","Array","prototype","authenticationInitialState","signInInitialState","payrollInitialState","themeInitialState","fullPageLoadingIndicatorInitialState","errorsInitialState","alertsInitialState","documentsInitialState","shiftSchedulesInitialState","rootReducer","history","authenticationReducer","signInReducer","payrollTicketsReducer","themeReducer","connectRouter","alertsReducer","documentsReducer","shiftSchedulesReducer","appReducer","handleAsyncActionRequest","handleAsyncActionFailure","handleAsyncActionSuccess","watchSuccess","watchFailure","watchRequest","toUpperCase","endsWith","errorsSaga","asyncActionsSaga","authenticationSaga","signInSaga","signOutSaga","payrollTicketsSaga","downloadFileSaga","themeSaga","appSaga","documentsSaga","shiftSchedulesSaga","createBrowserHistory","store","sagaMiddleware","createSagaMiddleware","middleware","createRouterMiddleware","composeEnhancers","compose","createStore","applyMiddleware","log","getState","run","configureStore","rootElement","getElementById","querySelector","ReactDOM"],"mappings":"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","file":"static/js/main.1fad1539.chunk.js","sourcesContent":["import { DeepReadonly } from 'utility-types';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport * as actions from './actions';\r\n\r\nexport type SignInState = DeepReadonly<{\r\n page: SignInPageEnum;\r\n personalId: string;\r\n errorMessage: string;\r\n requestInProgress: boolean;\r\n}>;\r\n\r\nexport type SignInAction = ActionType;\r\n\r\nexport enum SignInPageEnum {\r\n PersonalId,\r\n PinCode\r\n}\r\n","import { createAsyncAction } from 'typesafe-actions';\r\n\r\nexport const signInRequestOptAsync = createAsyncAction(\r\n 'signin/SIGN_IN_REQUEST_OTP_REQUEST',\r\n 'signin/SIGN_IN_REQUEST_OTP_SUCCESS',\r\n 'signin/SIGN_IN_REQUEST_OTP_FAILURE'\r\n)();\r\n\r\nexport const signInValidateOptAsync = createAsyncAction(\r\n 'signin/SIGN_IN_VALIDATE_OTP_REQUEST',\r\n 'signin/SIGN_IN_VALIDATE_OTP_SUCCESS',\r\n 'signin/SIGN_IN_VALIDATE_OTP_FAILURE'\r\n)();\r\n","import * as Yup from 'yup';\r\n\r\nexport const signInPersonalIdValidationSchema = Yup.object().shape({\r\n personalId: Yup.string().required('Osobní číslo je povinné')\r\n});\r\n\r\nexport const signInPinCodeValidationSchema = Yup.object().shape({\r\n pinCode: Yup.string().required('Pin kód je povinný')\r\n});\r\n","import { Theme, makeStyles, createStyles } from '@material-ui/core';\r\n\r\nexport const useSignInStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n infoText: {\r\n margin: '20px 0px 0px 0px',\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n },\r\n grid: {\r\n paddingTop: '20px'\r\n },\r\n noAccountText: {\r\n padding: `${theme.spacing(2)}px 0px 0px `,\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n },\r\n text: {\r\n padding: `${theme.spacing(3)}px 0px 0px `,\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n }, \r\n mailTo: {\r\n color: 'inherit'\r\n }\r\n })\r\n);\r\n","import React from 'react';\r\n\r\nimport { tenantProvider } from '../../../features/tenant';\r\n\r\nconst SignInPersonalViewInfoPanelLazyLoader = (): React.ComponentType => {\r\n const tenantKey = tenantProvider.getTenant();\r\n\r\n switch (tenantKey) {\r\n case 'lm':\r\n return React.lazy(() => import('./signInPersonalViewInfoPanel.lm'));\r\n case 'ksystem':\r\n return React.lazy(() => import('./signInPersonalViewInfoPanel.ksystem'));\r\n case 'cezep':\r\n return React.lazy(() => import('./signInPersonalViewInfoPanel.cezep'));\r\n\r\n default:\r\n return React.lazy(() => import('./signInPersonalViewInfoPanel.default'));\r\n }\r\n};\r\n\r\nconst SignInPersonalViewInfoPanelLazy = SignInPersonalViewInfoPanelLazyLoader();\r\n\r\nexport default SignInPersonalViewInfoPanelLazy;\r\n","import React from 'react';\r\nimport { Typography, Button, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from 'yup';\r\n\r\nimport { Input } from '../../components';\r\nimport { nameofFactory } from '../../utils/nameofFactory';\r\nimport { signInPersonalIdValidationSchema } from './validations';\r\nimport { useSignInStyles } from './styles';\r\nimport { SignInPersonalViewInfoPanel } from '../../customization/components/signInPersonalViewInfoPanel';\r\n\r\ntype SingInPersonalIdViewProps = {\r\n errorMessage?: string;\r\n requestInProgress: boolean;\r\n supportEmail: string;\r\n\r\n requestOpt: (parsonalId: string) => void;\r\n};\r\n\r\ntype SingInPersonalId = Yup.InferType;\r\n\r\nconst nameof = nameofFactory();\r\n\r\nconst SingInPersonalIdView: React.FunctionComponent = props => {\r\n const classes = useSignInStyles(props);\r\n const { errorMessage, requestInProgress, supportEmail } = props;\r\n\r\n const mailToHref = `mailto:${supportEmail}`;\r\n const mailToComponent = (\r\n \r\n {supportEmail}\r\n \r\n );\r\n\r\n return (\r\n \r\n initialValues={{ personalId: '' }}\r\n onSubmit={(values: SingInPersonalId, { setSubmitting }): void => {\r\n setSubmitting(true);\r\n\r\n props.requestOpt(values.personalId);\r\n }}\r\n validationSchema={signInPersonalIdValidationSchema}\r\n >\r\n {(formProps): React.ReactElement => {\r\n const { values, touched, errors, /* isSubmitting, */ handleChange, handleBlur, handleSubmit } = formProps;\r\n return (\r\n
\r\n \r\n Pro přihlášení zadejte svoje osobní číslo a na uložené telefonní číslo Vám zašleme PIN pomocí SMS.\r\n \r\n \r\n \r\n {/* // TODO: - pridat do konstanty a projit cely kod */}\r\n {/* // TODO: - udelat formik wrapper a pouzit hook useField z formik API */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Přístup do portálu je pro nového zaměstnance možný až v první den výplatního termínu. V případě problémů nebo nahlášení\r\n změny přihlašovacího telefonního čísla, kontaktujte vždy nejpozději do posledního dne v měsíci personální oddělení na\r\n adrese: {mailToComponent}\r\n \r\n\r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nexport default SingInPersonalIdView;\r\n","export const nameofFactory = () => (name: keyof T): keyof T => name;\r\n","import React from 'react';\r\nimport { Typography, Button, Grid } from '@material-ui/core';\r\nimport { Formik } from 'formik';\r\nimport * as Yup from 'yup';\r\n\r\nimport { Input } from '../../components';\r\nimport { nameofFactory } from '../../utils/nameofFactory';\r\nimport { signInPinCodeValidationSchema } from './validations';\r\nimport { useSignInStyles } from './styles';\r\n\r\ntype SingInPinCodeViewProps = {\r\n errorMessage?: string;\r\n requestInProgress: boolean;\r\n\r\n validateOpt: (parsonalId: string) => void;\r\n};\r\n\r\ntype SingInPinCode = Yup.InferType;\r\n\r\nconst nameof = nameofFactory();\r\n\r\nconst SingInPinCodeView: React.FunctionComponent = props => {\r\n const classes = useSignInStyles(props);\r\n const { errorMessage, requestInProgress } = props;\r\n\r\n return (\r\n \r\n initialValues={{ pinCode: '' }}\r\n onSubmit={(values: SingInPinCode, { setSubmitting }): void => {\r\n setSubmitting(true);\r\n\r\n props.validateOpt(values.pinCode);\r\n }}\r\n validationSchema={signInPinCodeValidationSchema}\r\n >\r\n {(formProps): React.ReactElement => {\r\n const { values, touched, errors, /* isSubmitting, */ handleChange, handleBlur, handleSubmit } = formProps;\r\n return (\r\n
\r\n \r\n Zadejte PIN kód, který Vám byl zaslán na Vaše telefonní číslo, které máte nahlášené u zaměstnavatele. Platnost PIN kódu\r\n je 5 minut.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nexport default SingInPinCodeView;\r\n","import React from 'react';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Typography, makeStyles, createStyles, Theme, Container } from '@material-ui/core';\r\n\r\nimport * as actions from './actions';\r\nimport { SignInPageEnum } from './types';\r\nimport SignInPersonalIdView from './signInPersonalIdView';\r\nimport SignInPinCodeView from './signInPinCodeView';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport {tenantConfiguratinService} from '../tenant';\r\n\r\ntype SingInContainerProps = {} & SingInContainerStateProps & SingInContainerDispatchProps;\r\n\r\ntype SingInContainerStateProps = {\r\n page: SignInPageEnum;\r\n errorMessage: string;\r\n requestInProgress: boolean;\r\n};\r\n\r\ntype SingInContainerDispatchProps = {\r\n signInRequestOptRequest: typeof actions.signInRequestOptAsync.request;\r\n signInValidateOtpRequest: typeof actions.signInValidateOptAsync.request;\r\n};\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n padding: `${theme.spacing(4)}px`,\r\n minHeight: '100%'\r\n },\r\n loginText: {\r\n color: theme.palette.primary.main,\r\n /* padding: `${theme.spacing(4)}px 0px 0px 0px` */\r\n }\r\n })\r\n);\r\n\r\nconst getSignInView = (props: SingInContainerProps): React.ReactElement | null => {\r\n switch (props.page) {\r\n case SignInPageEnum.PersonalId:\r\n return (\r\n \r\n );\r\n case SignInPageEnum.PinCode:\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst SingInContainer: React.FunctionComponent = props => {\r\n const componet = getSignInView(props);\r\n const classes = useStyles(props);\r\n\r\n return (\r\n \r\n \r\n PŘIHLÁŠENÍ\r\n \r\n {componet}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState): SingInContainerStateProps => ({\r\n page: state.signIn.page,\r\n errorMessage: state.signIn.errorMessage,\r\n requestInProgress: state.signIn.requestInProgress \r\n});\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): SingInContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n signInRequestOptRequest: actions.signInRequestOptAsync.request,\r\n signInValidateOtpRequest: actions.signInValidateOptAsync.request\r\n },\r\n dispatch\r\n );\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SingInContainer);\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer } from 'typesafe-actions';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { SignInPageEnum, SignInState, SignInAction } from './types';\r\nimport { signInRequestOptAsync, signInValidateOptAsync } from './actions';\r\nimport { SignOutAction } from '../signOut';\r\n\r\nexport const initialState: SignInState = {\r\n page: SignInPageEnum.PersonalId,\r\n personalId: '',\r\n errorMessage: '',\r\n requestInProgress: false\r\n};\r\n\r\nconst pageReducer = createReducer, SignInAction | SignOutAction>(initialState.page)\r\n .handleAction(signInRequestOptAsync.success, (state, action) => SignInPageEnum.PinCode)\r\n .handleAction(signInRequestOptAsync.failure, (state, action) => SignInPageEnum.PersonalId);\r\n\r\nconst personalIdReducer = createReducer, SignInAction | SignOutAction>(initialState.personalId)\r\n .handleAction(signInRequestOptAsync.request, (state, action) => initialState.personalId)\r\n .handleAction(signInRequestOptAsync.success, (state, action) => action.payload)\r\n .handleAction(signInRequestOptAsync.failure, (state, action) => initialState.personalId);\r\n\r\nconst errorMessageReducer = createReducer, SignInAction | SignOutAction>(initialState.errorMessage)\r\n .handleAction(\r\n [signInValidateOptAsync.request, signInValidateOptAsync.success, signInRequestOptAsync.request, signInRequestOptAsync.success],\r\n (state, action) => initialState.errorMessage\r\n )\r\n .handleAction([signInValidateOptAsync.failure, signInRequestOptAsync.failure], (state, action) => action.payload.message);\r\n\r\nconst requestInProgressReducer = createReducer, SignInAction | SignOutAction>(initialState.requestInProgress)\r\n .handleAction([signInValidateOptAsync.request, signInRequestOptAsync.request], (state, action) => true)\r\n .handleAction(\r\n [signInValidateOptAsync.success, signInRequestOptAsync.success, signInValidateOptAsync.failure, signInRequestOptAsync.failure],\r\n (state, action) => initialState.requestInProgress\r\n );\r\n\r\nexport default combineReducers({\r\n page: pageReducer,\r\n personalId: personalIdReducer,\r\n errorMessage: errorMessageReducer,\r\n requestInProgress: requestInProgressReducer\r\n});\r\n","import { ApplicationState } from '../../store/rootReducer';\r\n\r\nexport const getPersonalId = (state: ApplicationState): string => {\r\n return state.signIn.personalId;\r\n};\r\n","import { put, all, takeEvery, select, PutEffect, SelectEffect, ForkEffect, AllEffect } from 'redux-saga/effects';\r\nimport { push, CallHistoryMethodAction } from 'connected-react-router';\r\nimport { Location } from 'history';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport apiClient from '../../api/apiClientInstance';\r\nimport { signInRequestOptAsync, signInValidateOptAsync } from './actions';\r\nimport { getPersonalId } from './selectors';\r\nimport { BaseResponse } from '../../api/responses';\r\nimport { Path, LocationState } from 'history';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport {clearAlerts} from '../alerts'\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(signInRequestOptAsync.request, signInRequestOpt), yield takeEvery(signInValidateOptAsync.request, signInValidateOpt)]);\r\n}\r\n\r\nconst getLocationSelector = (state: ApplicationState): Location => state.router.location;\r\n\r\ntype SignInRequestOptGeneratorType =\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* signInRequestOpt(action: ReturnType): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n console.warn(action.payload);\r\n\r\n const response: BaseResponse = yield apiClient.Authentication.sendOtpAsync(action.payload);\r\n if (response.resultCode === 0) {\r\n yield put(signInRequestOptAsync.success(action.payload));\r\n } else {\r\n yield put(signInRequestOptAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n yield put(signInRequestOptAsync.failure(error));\r\n }\r\n }\r\n}\r\n\r\ntype SignInValidateOptGeneratorType =\r\n | SelectEffect\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\ntype SignInValidateOptGeneratorNextType = any | BaseResponse;\r\ntype SignInValidateOptGeneratorReturnType = PutEffect> | void;\r\n\r\nfunction* signInValidateOpt(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n console.warn(action.payload);\r\n\r\n const personalId = yield select(getPersonalId);\r\n const response: BaseResponse = yield apiClient.Authentication.loginAsync(personalId, action.payload);\r\n if (response.resultCode === 0) {\r\n yield put(signInValidateOptAsync.success());\r\n yield put(clearAlerts());\r\n\r\n const location = yield select(getLocationSelector);\r\n console.warn(location);\r\n\r\n if (location.state && location.state.referer) {\r\n return yield put(push(location.state.referer.pathname));\r\n }\r\n\r\n yield put(push('/'));\r\n } else {\r\n yield put(signInValidateOptAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(signInValidateOptAsync.failure(error));\r\n }\r\n}\r\n","export { default as SingInContainer } from './signInContainer';\r\nexport { default as signInReducer, initialState as signInInitialState } from './reducers';\r\nexport { default as signInSaga } from './sagas';\r\n\r\nexport * from './actions';\r\nexport * from './types';\r\n","import { createAsyncAction } from 'typesafe-actions';\r\n\r\nexport const signOutAsync = createAsyncAction('signOut/SIGN_OUT_REQUEST', 'signOut/SIGN_OUT_SUCCESS', 'signOut/SIGN_OUT_FAILURE')<\r\n void,\r\n void,\r\n Error\r\n>();\r\n","import { createAction } from 'typesafe-actions';\r\n\r\nimport { DownloadFileResponse } from './types';\r\n\r\nexport const downloadFile = createAction('downloadFile/DOWNLOAD_FILE')();\r\n","export * from './types';\r\nexport { default as authenticationReducer, initialState as authenticationInitialState } from './reducers';\r\nexport { default as authenticationSaga } from './sagas';\r\nexport { getUserExpiryDate } from './selectors';\r\n","export { default as PayrollTicketsContainer } from './payrollTicketsContainer';\r\nexport { default as payrollTicketsSaga } from './sagas';\r\nexport { default as payrollTicketsReducer, initialState as payrollInitialState} from './reducers';\r\nexport * from './types';\r\n","export { default as ThemeAppContainer } from './themedAppContainer';\r\nexport { default as themeSaga } from './sagas';\r\nexport { default as themeReducer, initialState as themeInitialState } from './reducers';\r\nexport { default as themeService } from './themeService';\r\nexport * from './types';\r\n","export { default as DocumentsContainer } from './documentsContainer';\r\nexport { default as documentsSaga } from './sagas';\r\nexport { default as documentsReducer, initialState as documentsInitialState } from './reducers';\r\nexport * from './types';\r\n","export { default as ShiftSchedulesContainer } from './shiftSchedulesContainer';\r\nexport { default as shiftSchedulesSaga } from './sagas';\r\nexport { default as shiftSchedulesReducer, initialState as shiftSchedulesInitialState } from './reducers';\r\nexport * from './types';\r\n","import { createAction } from 'typesafe-actions';\r\n\r\nimport { ThemaName } from './types';\r\n\r\nexport const selectThemeName = createAction('theme/SELECT_THEME_NAME')();\r\nexport const detectThemeName = createAction('theme/DETECT_THEME_NAME')();\r\n","export { default as errorsReducer, initialState as errorsInitialState } from './reducers';\r\nexport { default as errorsSaga } from './sagas';\r\nexport * from './types';\r\nexport * from './actions';","export { default as NewSectionNotification } from './newSectionNotification';\r\nexport { default as NewDocumentNotification } from './newDocumentNotification';\r\n\r\nexport * from './messages';\r\nexport * from './types';\r\n\r\nexport { isNotificationAllowed } from './configuration';\r\n","import { createAction } from 'typesafe-actions';\r\n\r\nexport const showFullPageLoadingIndicator = createAction('fullPageLoadingIndicator/SHOW_FULL_PAGE_LOADING_INDICATOR')();\r\n\r\nexport const hideFullPageLoadingIndicator = createAction('fullPageLoadingIndicator/HIDE_FULL_PAGE_LOADING_INDICATOR')();\r\n","import { createAction } from 'typesafe-actions';\r\n\r\nexport const genericError = createAction('errors/GENERIC_ERROR')();\r\n","import { createSelector } from 'reselect';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { DeepReadonly } from 'utility-types';\r\nimport { PayrollTicket, ByYearsState } from './types';\r\n\r\nconst getPayrolTicketsSelectedYear = (state: ApplicationState): number => state.payrollTickets.selectedYear;\r\nconst getPayrolTicketsByYears = (state: ApplicationState): ByYearsState => state.payrollTickets.payrollTicketList.byYears;\r\n\r\nexport const selectSelectedYear = getPayrolTicketsSelectedYear;\r\nexport const selectPayrolTicketsByYear = (year: number) => (state: ApplicationState): DeepReadonly =>\r\n getPayrolTicketsByYears(state)[year] ? getPayrolTicketsByYears(state)[year] : [];\r\nexport const selectPayrollById = (payrollId: number) => (state: ApplicationState): DeepReadonly | undefined => {\r\n const selectedYear = getPayrolTicketsSelectedYear(state);\r\n const payrolls = getPayrolTicketsByYears(state)[selectedYear];\r\n\r\n return payrolls.find(payroll => payroll.id === payrollId);\r\n};\r\n\r\nexport const selectPayrolTicketsBySelectedYear = createSelector(\r\n [getPayrolTicketsByYears, getPayrolTicketsSelectedYear],\r\n (byYears, selectedYear): DeepReadonly => {\r\n return byYears[selectedYear] ? byYears[selectedYear] : [];\r\n }\r\n);\r\n","import { createSelector } from 'reselect';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { DeepReadonly } from 'utility-types';\r\nimport { NormalizedByIdState } from '../../core';\r\nimport Document from '../../models/document';\r\nimport { ByGroupsState } from './types';\r\nimport { DocumentGroupModel } from '../../api/interfaces';\r\n\r\nconst getDocumentsAllIds = (state: ApplicationState): number[] => state.shiftSchedules.documentList.allIds;\r\nconst getDocumentsById = (state: ApplicationState): NormalizedByIdState => {\r\n return state.shiftSchedules.documentList.byId;\r\n};\r\nconst getDocumentsSelectedGroupId = (state: ApplicationState): number => state.shiftSchedules.selectedGroupId;\r\nconst getDocumentsByGroups = (state: ApplicationState): ByGroupsState => state.shiftSchedules.documentList.byGroups;\r\n\r\nexport const selectDocumentById = (id: number) => (state: ApplicationState): Document => state.shiftSchedules.documentList.byId[id];\r\n\r\nexport const selectDocuments = createSelector(\r\n [getDocumentsAllIds, getDocumentsById],\r\n (allIds, byId): DeepReadonly => {\r\n return allIds.map(id => byId[id]);\r\n }\r\n);\r\n\r\nexport const selectSelectedGroupId = getDocumentsSelectedGroupId;\r\nexport const selectDocumentsByGroup = (groupId: number) => (state: ApplicationState): DeepReadonly =>\r\n getDocumentsByGroups(state)[groupId] ? getDocumentsByGroups(state)[groupId] : [];\r\n\r\nexport const selectDocumentsBySelectedYear = createSelector(\r\n [getDocumentsByGroups, getDocumentsSelectedGroupId],\r\n (byGroups, selectedGroupId): DeepReadonly => {\r\n return byGroups[selectedGroupId] ? byGroups[selectedGroupId] : [];\r\n }\r\n);\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { IconProps as MuiIconProps, default as MuiIcon } from '@material-ui/core/Icon';\r\n\r\nimport { IconPrefix, IconName } from '../../icons';\r\n\r\ntype IconProps = {\r\n fixedWidth?: boolean;\r\n iconPrefix?: IconPrefix;\r\n IconProps?: MuiIconProps;\r\n iconName: IconName;\r\n className?: string;\r\n};\r\n\r\nexport default (props: IconProps): React.ReactElement => {\r\n const { iconName, iconPrefix, IconProps, className, ...otherProps } = props;\r\n\r\n let usedIconPrefix = iconPrefix;\r\n if (!usedIconPrefix) {\r\n usedIconPrefix = 'fal';\r\n }\r\n\r\n let usedClassName = className;\r\n if (!usedClassName) {\r\n usedClassName = 'moje';\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","export { default as Icon } from './icon';\r\n","import { ApplicationState } from '../../store/rootReducer';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nexport const getUserExpiryDate = (state: ApplicationState): DeepReadonly =>\r\n state.authentication.user ? state.authentication.user.dateOfUserExpiry : null;\r\n\r\nexport const getUserTenantDomain = (state: ApplicationState): DeepReadonly =>\r\n state.authentication.user ? state.authentication.user.tenantHost : null;\r\n","import { createAction, createAsyncAction } from 'typesafe-actions';\r\n\r\nimport { PayrollTicketsSuccessResponse } from './types';\r\n\r\nexport const selectYear = createAction('payrollTickets/SELECT_YEAR')();\r\n\r\nexport const getPeriodsAsync = createAsyncAction(\r\n 'payrollTickets/GET_PERIODS_REQUEST',\r\n 'payrollTickets/GET_PERIODS_SUCCESS',\r\n 'payrollTickets/GET_PERIODS_FAILURE'\r\n)();\r\n\r\nexport const getPayrollsAsync = createAsyncAction(\r\n 'payrollTickets/GET_PAYROLLS_REQUEST',\r\n 'payrollTickets/GET_PAYROLLS_SUCCESS',\r\n 'payrollTickets/GET_PAYROLLS_FAILURE'\r\n)();\r\n\r\nexport const downloadPayrollAsync = createAsyncAction(\r\n 'payrollTickets/DOWNLOAD_PAYROLL_REQUEST',\r\n 'payrollTickets/DOWNLOAD_PAYROLL_SUCCESS',\r\n 'payrollTickets/DOWNLOAD_PAYROLL_FAILURE'\r\n)();\r\n\r\nexport const getPayrollPinCodeAsync = createAsyncAction(\r\n 'payrollTickets/GET_PAYROLL_PIN_CODE_REQUEST',\r\n 'payrollTickets/GET_PAYROLL_PIN_CODE_SUCCESS',\r\n 'payrollTickets/GET_PAYROLL_PIN_CODE_FAILURE'\r\n)();","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\n\r\nimport { AppProvider } from '../app';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { default as themeService } from './themeService';\r\nimport * as actions from './actions';\r\nimport { ThemaName } from './types';\r\n\r\ntype ThemedAppContainerProps = {} & ThemedAppContainerStateProps & ThemedAppContainerDispatchProps;\r\n\r\ntype ThemedAppContainerStateProps = {\r\n themeName: ThemaName;\r\n};\r\n\r\ntype ThemedAppContainerDispatchProps = {\r\n detectThemeName: typeof actions.detectThemeName;\r\n};\r\n\r\nconst ThemedAppContainer: React.FunctionComponent = props => {\r\n const detectThemeName = props.detectThemeName;\r\n\r\n useEffect(() => {\r\n console.warn('ThemedAppContainer.useEffect');\r\n\r\n detectThemeName();\r\n }, [detectThemeName]);\r\n\r\n console.warn('ThemedAppContainer');\r\n\r\n const theme = themeService.createTheme(props.themeName);\r\n console.warn(theme);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState): ThemedAppContainerStateProps => {\r\n return {\r\n themeName: state.theme.themeName\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): ThemedAppContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n detectThemeName: actions.detectThemeName\r\n },\r\n dispatch\r\n );\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ThemedAppContainer);\r\n","import { Padding, ThemeOptions } from '@material-ui/core/styles/createMuiTheme';\r\n\r\nimport IstokWebTtf from '../../fonts/IstokWeb/IstokWeb-Regular.ttf';\r\n\r\nconst MuiInputBaseInputPaddings: Padding = {\r\n Bottom: 7,\r\n Left: 0,\r\n Right: 0,\r\n Top: 6,\r\n Padding: (): string => `${6}px ${0}px ${7}px ${0}px`\r\n};\r\n\r\nconst IstokWeb = {\r\n fontFamily: 'Istok Web',\r\n fontStyle: 'normal',\r\n fontDisplay: 'swap' as 'swap',\r\n fontWeight: 400,\r\n src: `\r\n local('IstokWeb'),\r\n local('IstokWeb-Regular'),\r\n url(${IstokWebTtf}) format('truetype')\r\n `,\r\n unicodeRange:\r\n 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF'\r\n};\r\n\r\n// A custom theme for this app\r\nconst defaultThemeOptions = {\r\n breakpoints: {\r\n values: { xs: 0, sm: 600, md: 750, lg: 1280, xl: 1920 }\r\n },\r\n typography: {\r\n fontFamily: 'Istok Web, Arial'\r\n },\r\n paddings: {\r\n MuiInputBaseInput: MuiInputBaseInputPaddings\r\n },\r\n palette: {\r\n text: {\r\n secondary: '#7B7B7B',\r\n primary: '#000000'\r\n },\r\n listLine: '#D5D3D3',\r\n background: {\r\n default: 'white'\r\n }\r\n },\r\n overrides: {\r\n MuiCssBaseline: {\r\n '@global': {\r\n '@font-face': [IstokWeb]\r\n }\r\n },\r\n MuiInputBase: {\r\n root: {\r\n backgroundColor: 'transparent'\r\n },\r\n input: {\r\n padding: MuiInputBaseInputPaddings.Padding()\r\n }\r\n },\r\n MuiButton: {\r\n root: {\r\n textTransform: 'none'\r\n }\r\n },\r\n MuiIcon: {\r\n root: {\r\n width: 'unset',\r\n height: 'unset',\r\n fontSize: 'unset'\r\n }\r\n },\r\n MuiDivider: {\r\n vertical: {\r\n alignSelf: 'stretch',\r\n height: 'auto'\r\n }\r\n }\r\n }\r\n} as ThemeOptions;\r\n\r\nexport default defaultThemeOptions;\r\n","import { RequiredColorPalette } from '../types';\r\n\r\n// TODO: zakazat onst palette = {} as PaletteOptions;\r\nconst palette: RequiredColorPalette = { primary: { main: 'rgb(63, 81, 181)' } };\r\n\r\nexport default palette;\r\n","import { RequiredColorPalette } from '../types';\r\n\r\nconst palette: RequiredColorPalette = {\r\n primary: {\r\n main: 'rgb(242,79,0)'\r\n }\r\n};\r\n\r\nexport default palette;\r\n","import { RequiredColorPalette } from '../types';\r\n\r\n// TODO: zakazat onst palette = {} as PaletteOptions;\r\nconst palette: RequiredColorPalette = { primary: { main: '#15612c' } };\r\n\r\nexport default palette;\r\n","import { RequiredColorPalette } from '../types';\r\n\r\n// TODO: zakazat onst palette = {} as PaletteOptions;\r\nconst palette: RequiredColorPalette = { primary: { main: '#15612c' } };\r\n\r\nexport default palette;\r\n","import { PaletteOptions } from '@material-ui/core/styles/createPalette';\r\n\r\nimport { ThemaName } from '../types';\r\nimport { default as ColorPalettes } from './index';\r\n\r\nclass PaletteProvider {\r\n getPallete = (theme: ThemaName): PaletteOptions => {\r\n for (const themeKey in ColorPalettes) {\r\n if (themeKey === theme) {\r\n return ColorPalettes[themeKey];\r\n }\r\n }\r\n\r\n throw new Error(`Unsupported theme ${theme}`);\r\n };\r\n}\r\n\r\nexport default new PaletteProvider();\r\n","import { PaletteOptions } from '@material-ui/core/styles/createPalette';\r\n\r\nimport { default as defaultPalette } from './palette.default';\r\nimport { default as cezepPalette } from './palette.cezep';\r\nimport { default as lmPalette } from './palette.lm';\r\nimport { default as ksystemPalette } from './palette.ksystem';\r\n\r\nimport { ThemaName } from '../types';\r\n\r\nconst ColorPalettes = {\r\n default: defaultPalette,\r\n cezep: cezepPalette,\r\n ksystem: ksystemPalette,\r\n lm: lmPalette\r\n} as Record;\r\n\r\nexport default ColorPalettes;\r\n\r\nexport { default as PaletteProvider } from './paletteProvider';\r\n","import { createMuiTheme, Theme } from '@material-ui/core/styles';\r\n\r\nimport { default as DefaultThemeOptions } from './defaultThemeOptions';\r\nimport ColorPalettes, { PaletteProvider } from './colorPalettes';\r\nimport { ThemaName } from './types';\r\n\r\nclass ThemeService {\r\n createTheme = (themeName: ThemaName): Theme => {\r\n const tennantPalette = PaletteProvider.getPallete(themeName);\r\n const finalThemeOptions = { ...DefaultThemeOptions, palette: { ...tennantPalette, ...DefaultThemeOptions.palette } };\r\n\r\n return createMuiTheme(finalThemeOptions);\r\n };\r\n\r\n getThemeName = (tenantKey: string): ThemaName => {\r\n for (const themeKey in ColorPalettes) {\r\n if (themeKey === tenantKey) {\r\n return themeKey as ThemaName;\r\n }\r\n }\r\n\r\n return \"default\";\r\n };\r\n}\r\n\r\nexport default new ThemeService();\r\n","import { createSelector } from 'reselect';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { DeepReadonly } from 'utility-types';\r\nimport Document from '../../models/document';\r\nimport { NormalizedByIdState } from '../../core';\r\n\r\nconst getDocumentsAllIds = (state: ApplicationState): number[] => state.documents.documentList.allIds;\r\n\r\nconst getDocumentsById = (state: ApplicationState): NormalizedByIdState => state.documents.documentList.byId;\r\n\r\nexport const selectDocumentById = (id: number) => (state: ApplicationState): Document => state.documents.documentList.byId[id];\r\n\r\nexport const selectDocuments = createSelector(\r\n [getDocumentsAllIds, getDocumentsById],\r\n (allIds, byId): DeepReadonly => {\r\n return allIds.map(id => byId[id]);\r\n }\r\n);\r\n","export * from './baseModel';\r\nexport * from './payrollModel';\r\nexport * from './documentModel';\r\nexport * from './documentGroupModel';\r\n\r\nexport * from './enums/documentType';\r\nexport * from './enums/documentGroupType';\r\n","import { IconName } from '../../icons';\r\nimport { Tenants } from '../tenant';\r\n\r\nexport class MenuItemModel {\r\n to: string;\r\n lable: string;\r\n icon: IconName;\r\n onlyForTenants?: Tenants[];\r\n\r\n constructor(to: string, label: string, icon: IconName, onlyForTenants?: Tenants[]) {\r\n this.to = to;\r\n this.lable = label;\r\n this.icon = icon;\r\n this.onlyForTenants = onlyForTenants;\r\n }\r\n}\r\n\r\nexport type UserInfo = {\r\n fullName: string | undefined;\r\n initials: string | undefined;\r\n personalId: string | undefined;\r\n};\r\n","import { MenuItemModel } from '../features/menu/types';\r\n\r\nexport const MenuItemsConfiguration: MenuItemModel[] = [\r\n new MenuItemModel('/payrolltickets', 'Výplatní lístky', 'file-invoice'),\r\n new MenuItemModel('/payrollticketpattern', 'Vzorový výplatní lístek', 'file-alt'),\r\n new MenuItemModel('/documents', 'Informace pro zaměstnance', 'folder-download'),\r\n new MenuItemModel('/shiftSchedules', 'Harmonogramy směn', 'folder-download', [\"cezep\"]),\r\n\r\n // Vzdy posledni\r\n new MenuItemModel('/signout', 'Odhlásit', 'power-off')\r\n];\r\n","import { MenuItemsConfiguration } from '../../configuration/mainMenu';\r\nimport { tenantProvider } from '../../features/tenant';\r\nimport { MenuItemModel } from './types';\r\n\r\nclass MenuProvider {\r\n getMenu = (): MenuItemModel[] => {\r\n const tenantKey = tenantProvider.getTenant();\r\n\r\n return MenuItemsConfiguration.filter((menuItem: MenuItemModel) => {\r\n if (!menuItem.onlyForTenants) {\r\n return true;\r\n }\r\n \r\n const isMenuItemForCurrentTenant = menuItem.onlyForTenants.includes(tenantKey);\r\n\r\n return isMenuItemForCurrentTenant;\r\n });\r\n };\r\n}\r\n\r\nexport default new MenuProvider();\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Divider, List, ListItem, ListItemText, makeStyles, Theme, createStyles, Box } from '@material-ui/core';\r\nimport { useRouteMatch, NavLink as ReactRouterDomNavLink } from 'react-router-dom';\r\n\r\nimport { MenuItemsConfiguration } from '../../configuration/mainMenu';\r\nimport { MenuItemModel } from './types';\r\nimport { Icon } from '../../icons';\r\nimport menuProvider from './menuProvider';\r\n\r\nconst drawerWidth = 240;\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex'\r\n },\r\n appBar: {\r\n boxShadow: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth\r\n }\r\n },\r\n toolBar: {\r\n backgroundColor: 'white'\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3)\r\n },\r\n grow: {\r\n flexGrow: 1\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n width: 'fit-content'\r\n }\r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n userInfo: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n textAlign: 'center'\r\n },\r\n userInfoPersonalId: {\r\n fontWeight: 500\r\n },\r\n userInfoAvatar: {\r\n width: '5rem',\r\n height: '5rem'\r\n },\r\n menuItemRoot: {\r\n paddingTop: '0px',\r\n paddingBottom: '0px',\r\n paddingLeft: '0px',\r\n '& > a': {\r\n textDecoration: 'none'\r\n },\r\n '&:not(:last-of-type)': {\r\n borderBottom: `1px solid ${theme.palette.listLine}`\r\n }\r\n },\r\n menuItemDivider: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n menuItemIcon: {\r\n fontSize: '1.2rem',\r\n color: theme.palette.text.secondary\r\n },\r\n menuItemIconActive: {\r\n fontSize: '1.2rem',\r\n color: theme.palette.text.primary\r\n },\r\n menuItemText: {\r\n fontSize: '1.2rem'\r\n },\r\n // TODO: - dodelat jako jednu classu\r\n menuItemTextActive: {\r\n fontSize: '1.2rem',\r\n color: theme.palette.text.primary\r\n },\r\n menuItemActive: {\r\n width: '5px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n // TODO: - dodelat jako jednu classu\r\n menuItem: {\r\n width: '5px',\r\n backgroundColor: theme.palette.primary.main,\r\n visibility: 'hidden'\r\n }\r\n })\r\n);\r\n\r\nconst MainMenuNavLink: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n const match = useRouteMatch({\r\n path: props.menuItem.to,\r\n exact: true\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst MainMenuContent: React.FunctionComponent = () => {\r\n const classes = useStyles();\r\n const [menuItems, setMenuItems] = useState([]);\r\n\r\n console.warn('MainMenuContent');\r\n\r\n useEffect(() => {\r\n const menuItemsByTenant = menuProvider.getMenu();\r\n\r\n setMenuItems(menuItemsByTenant);\r\n },[]);\r\n\r\n return (\r\n \r\n \r\n {menuItems.map((menuItem: MenuItemModel) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MainMenuContent;\r\n","import { createSelector } from 'reselect';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { UserInfo } from './types';\r\nimport { User } from '../authentication';\r\n\r\nconst getUser = (state: ApplicationState): DeepReadonly => state.authentication.user;\r\n\r\nexport const getUserInfoSelector = createSelector([getUser], (user): UserInfo | null => {\r\n if (!user) {\r\n return null;\r\n }\r\n\r\n return { fullName: user.fullName, personalId: user.personalId, initials: user.initials };\r\n});\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles, Typography, Box } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\n\r\nimport MainMenuContent from './mainMenuContent';\r\nimport { UserInfo } from './types';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { getUserInfoSelector } from './selectors';\r\n\r\nconst drawerWidth = 240;\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n display: 'flex'\r\n },\r\n drawer: {\r\n [theme.breakpoints.up('md')]: {\r\n width: drawerWidth,\r\n flexShrink: 0\r\n }\r\n },\r\n appBar: {\r\n boxShadow: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth\r\n }\r\n },\r\n toolBar: {\r\n backgroundColor: 'white'\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n drawerPaper: {\r\n width: drawerWidth\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3)\r\n },\r\n grow: {\r\n flexGrow: 1\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n /* minHeight: \"inherit\", */\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n width: 'fit-content'\r\n }\r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n userInfo: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n textAlign: 'center',\r\n paddingTop: theme.spacing(1)\r\n },\r\n userInfoPersonalId: {\r\n //fontSize: \"0.9rem\",\r\n fontWeight: 500\r\n },\r\n userInfoAvatar: {\r\n width: '5rem',\r\n height: '5rem'\r\n },\r\n menuItemRoot: {\r\n paddingTop: '0px',\r\n paddingBottom: '0px'\r\n },\r\n menuItemDivider: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n menuItemIcon: {\r\n fontSize: '1.2rem',\r\n color: theme.palette.text.secondary\r\n },\r\n menuItemText: {\r\n fontSize: '1.2rem'\r\n },\r\n menuItemActive: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n menuItemInActive: {\r\n width: '0px',\r\n backgroundColor: 'transparent'\r\n }\r\n })\r\n);\r\n\r\nconst defaultProps = {\r\n bgcolor: 'background.paper',\r\n borderColor: 'primary.main',\r\n m: 1,\r\n border: 1.5,\r\n style: { width: '5rem', height: '5rem' }\r\n};\r\n\r\ntype MainMenuDrawerContentContainerProps = {} & MainMenuDrawerContentContainerStateProps;\r\n\r\ntype MainMenuDrawerContentContainerStateProps = {\r\n userInfo: UserInfo | null;\r\n};\r\n\r\nconst MainMenuDrawerContentContainer: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n\r\n console.warn('MainMenuDrawerContent');\r\n if (!props.userInfo) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n {props.userInfo.initials}\r\n \r\n \r\n\r\n {/* MK */}\r\n \r\n \r\n \r\n {props.userInfo.fullName}\r\n \r\n \r\n \r\n {props.userInfo.personalId}\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState): MainMenuDrawerContentContainerStateProps => {\r\n return {\r\n userInfo: getUserInfoSelector(state)\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(MainMenuDrawerContentContainer);\r\n","import React from 'react';\r\nimport { makeStyles, Theme, createStyles, Hidden, Drawer, useTheme } from '@material-ui/core';\r\nimport { StyleRules } from '@material-ui/core/styles';\r\n\r\nimport MainMenuDrawerContent from './mainMenuDrawerContent';\r\n\r\ntype MainMenuDrawerClassKey = 'drawer' | 'drawerPaper';\r\ntype MainMenuDrawerStyleProps = {};\r\ntype MainMenuDrawerProps = {\r\n mobileOpen: boolean;\r\n\r\n handleDrawerToggle: () => void;\r\n};\r\n\r\n// TODO: dat do thematu jako property\r\nconst drawerWidthMd = 240;\r\nconst drawerWidthLg = 340;\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n drawer: {\r\n [theme.breakpoints.up('md')]: {\r\n width: drawerWidthMd,\r\n flexShrink: 0\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n width: drawerWidthLg\r\n }\r\n },\r\n drawerPaper: {\r\n width: drawerWidthMd,\r\n [theme.breakpoints.up('lg')]: {\r\n width: drawerWidthLg\r\n }\r\n }\r\n })\r\n);\r\n\r\nconst MainMenuDrawer: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default MainMenuDrawer;\r\n","import { Tenants, tenantProvider } from '../../features/tenant';\r\nimport { PayrollTicketPatternLanguageType } from './types';\r\n\r\nimport { default as cezepPayrollTicketPatternImage } from './cezep_payrollTicket_pattern_50.jpg';\r\nimport { default as cezepPayrollTicketPatternEnImage } from './cezep_payrollTicket_pattern_EN_50.jpg';\r\n\r\nimport { default as lmPayrollTicketPatternImage } from './lm_payrollTicket_pattern_50.jpg';\r\nimport { default as lmPayrollTicketPatternEnImage } from './lm_payrollTicket_pattern_EN_50.jpg';\r\n\r\nconst configuration = {\r\n cezep: {\r\n cz: cezepPayrollTicketPatternImage,\r\n en: cezepPayrollTicketPatternEnImage\r\n },\r\n lm: {\r\n cz: lmPayrollTicketPatternImage,\r\n en: lmPayrollTicketPatternEnImage\r\n }\r\n} as Record>;\r\n\r\nclass PayrollTicketPatternProvider {\r\n getPayrollPattern = (language: PayrollTicketPatternLanguageType): string => {\r\n const tenantKey = tenantProvider.getTenant();\r\n\r\n switch (tenantKey) {\r\n case 'lm':\r\n return configuration.lm[language];\r\n case 'ksystem':\r\n return '';\r\n case 'cezep':\r\n return configuration.cezep[language];\r\n default:\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default new PayrollTicketPatternProvider();\r\n","import React, { useCallback, useState } from 'react';\r\nimport { Theme, makeStyles, createStyles } from '@material-ui/core';\r\n\r\nimport { Tabs } from '../../components';\r\nimport payrollTicketPatternProvider from './payrollTicketPatternProvider';\r\nimport { PayrollTicketPatternLanguageTabItem, PayrollTicketPatternLanguageType } from './types';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n image: {\r\n maxWidth: '100%'\r\n }\r\n })\r\n);\r\n\r\ntype PayrollTicketPatternContainerProps = {};\r\n\r\nconst languages: PayrollTicketPatternLanguageTabItem[] = [\r\n { name: 'CZ', type: 'cz' },\r\n { name: 'EN', type: 'en' }\r\n];\r\n\r\nconst PayrollTicketPatternContainer: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n const [selectedLanguage, onSelectedLanguageChange] = useState('cz');\r\n\r\n const onSelectedItemChange = useCallback((selectedItem: PayrollTicketPatternLanguageType) => {\r\n onSelectedLanguageChange(selectedItem);\r\n }, []);\r\n\r\n const imageSrc = payrollTicketPatternProvider.getPayrollPattern(selectedLanguage);\r\n\r\n const tabItemKeySelector = useCallback((tabItem: PayrollTicketPatternLanguageTabItem) => {\r\n return tabItem.type;\r\n }, []);\r\n\r\n const tabItemLabelSelector = useCallback((tabItem: PayrollTicketPatternLanguageTabItem) => {\r\n return tabItem.name;\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n
\r\n \"Vzor\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default PayrollTicketPatternContainer;\r\n","import { createAction } from 'typesafe-actions';\r\n\r\nexport const afterAuthenticatedAppDidMount = createAction('app/AFTER_AUTHENTICATED_APP_DID_MOUNT')();\r\n\r\nexport const afterNavigation = createAction('app/AFTER_NAVIGATIOn')();\r\n","import React, { useEffect } from 'react';\r\nimport { Switch, Route, Redirect, useLocation } from 'react-router-dom';\r\nimport { useDispatch } from 'react-redux';\r\n\r\n/* import { Newses } from '../newses'; */\r\nimport { PayrollTicketsContainer } from '../payrollTickets';\r\nimport { PayrollTicketPatternContainer } from '../payrollTicketPattern';\r\nimport { SignOutContainer } from '../signOut';\r\nimport { DocumentsContainer } from '../documents';\r\nimport { ShiftSchedulesContainer } from '../shiftSchedules';\r\nimport { afterNavigation } from './actions';\r\n\r\ntype AuthenticatedAppRouterProps = {};\r\n\r\nconst AuthenticatedAppRouter: React.FunctionComponent = (): React.ReactElement => {\r\n console.warn('AuthenticatedAppRouter');\r\n \r\n const location = useLocation();\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n console.debug('AuthenticatedAppRouter.useEffect');\r\n\r\n dispatch(afterNavigation());\r\n }, [location.pathname, dispatch]);\r\n\r\n return (\r\n \r\n \r\n ;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AuthenticatedAppRouter;\r\n","import { tenantProvider } from '../../features/tenant';\r\n\r\nimport { default as CEZ_EP_LOGO } from './cez_ep.png';\r\nimport { default as LOMY_MORINA_LOGO } from './logo_lomy_morina.png';\r\n\r\nclass LogoProvider {\r\n getLogo = (): string => {\r\n const tenantKey = tenantProvider.getTenant();\r\n\r\n switch (tenantKey) {\r\n case 'lm':\r\n return LOMY_MORINA_LOGO;\r\n case 'ksystem':\r\n return '';\r\n case 'cezep':\r\n return CEZ_EP_LOGO;\r\n default:\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default new LogoProvider();\r\n","import React, { useEffect } from 'react';\r\nimport { Divider, makeStyles, Theme, createStyles, AppBar, Toolbar, IconButton, Typography, Badge } from '@material-ui/core';\r\nimport { NavLink as ReactRouterDomNavLink } from 'react-router-dom';\r\n\r\nimport { MainMenuDrawer } from '../menu';\r\nimport AuthenticatedAppRouter from './authenticatedAppRouter';\r\nimport { Logo, Icon } from '../../components';\r\nimport { logoProvider } from '../../customization/logos';\r\nimport { AlertsContainer } from '../alerts';\r\nimport * as actions from './actions';\r\n\r\nconst drawerWidth = 240;\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n drawer: {\r\n [theme.breakpoints.up('md')]: {\r\n width: drawerWidth,\r\n flexShrink: 0\r\n }\r\n },\r\n appBar: {\r\n boxShadow: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n marginLeft: drawerWidth\r\n }\r\n },\r\n toolBar: {\r\n backgroundColor: 'white',\r\n paddingRight: '0px'\r\n },\r\n toolBarImage: {\r\n height: 32,\r\n display: 'block',\r\n marginLeft: 'auto',\r\n marginRight: 'auto'\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n drawerPaper: {\r\n width: drawerWidth\r\n },\r\n contentContainer: {\r\n flexGrow: 1\r\n },\r\n content: {\r\n flexGrow: 1,\r\n marginLeft: theme.spacing(1),\r\n marginTop: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n marginBottom: theme.spacing(5),\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(5),\r\n marginTop: theme.spacing(5),\r\n marginRight: theme.spacing(5),\r\n marginBottom: theme.spacing(5)\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n marginLeft: theme.spacing(10),\r\n marginTop: theme.spacing(10),\r\n marginRight: theme.spacing(10),\r\n marginBottom: theme.spacing(10)\r\n }\r\n },\r\n grow: {\r\n flexGrow: 1\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n width: 'fit-content'\r\n },\r\n '& > a': {\r\n textDecoration: 'none'\r\n }\r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none'\r\n }\r\n },\r\n userInfo: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n textAlign: 'center'\r\n },\r\n userInfoPersonalId: {\r\n fontWeight: 500\r\n },\r\n userInfoAvatar: {\r\n width: '5rem',\r\n height: '5rem'\r\n },\r\n menuItemRoot: {\r\n paddingTop: '0px',\r\n paddingBottom: '0px'\r\n },\r\n menuItemDivider: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n menuItemIcon: {\r\n fontSize: '1.2rem',\r\n color: theme.palette.text.secondary\r\n },\r\n menuItemText: {\r\n fontSize: '1.2rem'\r\n },\r\n menuItemActive: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n menuItemInActive: {\r\n width: '0px',\r\n backgroundColor: 'transparent'\r\n },\r\n root: {\r\n minHeight: '100vh',\r\n display: 'flex',\r\n flex: '1 0 auto',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.up('md')]: {\r\n backgroundColor: '#fafafa'\r\n }\r\n },\r\n leftDrawer: { flexShrink: 0 },\r\n main: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n width: `calc(100% - ${drawerWidth}px)`\r\n }\r\n }\r\n })\r\n);\r\n\r\ntype AuthenticatedAppProps = {\r\n afterAuthenticatedAppDidMount: typeof actions.afterAuthenticatedAppDidMount;\r\n};\r\n\r\nexport const AuthenticatedApp: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n const [mobileOpen, setMobileOpen] = React.useState(false);\r\n const afterAuthenticatedAppDidMount = props.afterAuthenticatedAppDidMount;\r\n const logo = logoProvider.getLogo();\r\n\r\n const handleDrawerToggle = (): void => {\r\n setMobileOpen(!mobileOpen);\r\n };\r\n\r\n useEffect(() => {\r\n console.warn('AuthenticatedApp.useEffect');\r\n\r\n afterAuthenticatedAppDidMount();\r\n }, [afterAuthenticatedAppDidMount]);\r\n\r\n /* const renderMobileMenu = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ); */\r\n\r\n const renderDesktopMenu = (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {/*
\r\n \r\n \r\n \r\n
*/}\r\n
\r\n );\r\n console.warn('AuthenticatedApp');\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {renderDesktopMenu}\r\n \r\n \r\n\r\n
\r\n {/*TODO: Dodelat alerty/nootifikace*/}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n K-system.CZ s.r.o. | ZAMĚSTNANEC.online\r\n \r\n
\r\n
\r\n {/* {renderMobileMenu} */}\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { withStyles, Theme } from '@material-ui/core';\r\nimport { ClassNameMap, StyleRules } from '@material-ui/core/styles/withStyles';\r\n\r\nimport { Logo } from '../../components';\r\nimport { logoProvider } from '../../customization/logos';\r\n\r\nconst styles = (theme: Theme): StyleRules => ({\r\n root: {\r\n paddingTop: '6px'\r\n },\r\n image: {\r\n height: 32,\r\n display: 'block',\r\n marginLeft: 'auto',\r\n marginRight: 'auto'\r\n }\r\n});\r\n\r\ntype UnauthenticatedAppHeaderKey = 'root' | 'image';\r\n\r\ntype UnauthenticatedAppHeaderProps = {\r\n classes: ClassNameMap;\r\n};\r\n\r\nconst UnauthenticatedAppHeader: React.FunctionComponent = props => {\r\n const logo= logoProvider.getLogo();\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default withStyles(styles)(UnauthenticatedAppHeader);\r\n","import React from 'react';\r\nimport { Typography, createStyles, makeStyles, Theme } from '@material-ui/core';\r\n\r\n// TODO: Doresit pozici kdyz je stranka malo vysoka, tak aby byla porad dole a to i kdyz je stranka dlouha a text konci v pulce,\r\n// tak paticka musi byt dole\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n footerText: {\r\n margin: `${theme.spacing(4)}px 0px 0px `,\r\n fontSize: '0.9rem',\r\n fontWeight: 500\r\n }\r\n })\r\n);\r\n\r\ntype UnauthenticatedAppFooterProps = {};\r\n\r\nconst UnauthenticatedAppFooter: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n ZAMĚSTNANEC.online | K-system.CZ s.r.o.\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default UnauthenticatedAppFooter;\r\n","import React from 'react';\r\nimport { Container, Theme, makeStyles, createStyles } from '@material-ui/core';\r\n\r\nimport { default as UnauthenticatedAppHeader } from './unauthenticatedAppHeader';\r\nimport { default as UnauthenticatedAppFooter } from './unauthenticatedAppFooter';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n padding: '0px 0px 0 0px',\r\n backgroundColor: 'white',\r\n minHeight: '100vh'\r\n },\r\n loginText: {\r\n color: theme.palette.primary.main,\r\n margin: '30px 0px 0px 0px'\r\n },\r\n infoText: {\r\n padding: '20px 0px 0px 0px',\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n },\r\n form: {\r\n paddingTop: '20px'\r\n },\r\n noAccountText: {\r\n padding: `${theme.spacing(2)}px 0px 0px `,\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n },\r\n text: {\r\n padding: `${theme.spacing(3)}px 0px 0px `,\r\n lineHeight: 1.4,\r\n fontSize: '1.12rem'\r\n }\r\n })\r\n);\r\n\r\ntype UnauthenticatedAppOneColumnLayoutKey = 'root' | 'loginText' | 'infoText' | 'form' | 'noAccountText' | 'text' | 'footerText';\r\n\r\ntype UnauthenticatedAppOneColumnLayoutProps = {\r\n /* classes: ClassNameMap; */\r\n};\r\n\r\nconst UnauthenticatedAppOneColumnLayout: React.FunctionComponent = props => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n );\r\n};\r\n\r\n//export default withStyles(styles)(UnauthenticatedAppOneColumnLayout);\r\nexport default UnauthenticatedAppOneColumnLayout;\r\n","import React from 'react';\r\nimport { Grid, makeStyles, createStyles, Theme, Typography, Container, Box } from '@material-ui/core';\r\n\r\nimport UnauthenticatedAppHeader from './unauthenticatedAppHeader';\r\nimport UnauthenticatedAppFooter from './unauthenticatedAppFooter';\r\nimport { Icon } from '../../components';\r\n\r\nconst useHeaderStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n paddingTop: '136px'\r\n },\r\n image: {\r\n height: '64px'\r\n }\r\n })\r\n);\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minHeight: '100vh',\r\n [theme.breakpoints.up('md')]: {\r\n backgroundColor: '#fafafa'\r\n }\r\n },\r\n gridRoot: {\r\n paddingTop: '50px'\r\n },\r\n columnLeft: { backgroundColor: theme.palette.background.paper },\r\n columnRight: {\r\n backgroundColor: theme.palette.primary.main,\r\n textAlign: 'center'\r\n },\r\n columnRightUserIcon: {\r\n fontSize: '18em',\r\n textAlign: 'center',\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n marginTop: '64px',\r\n marginBottom: '64px',\r\n color: 'white',\r\n opacity: 0.08\r\n },\r\n columnRightEmployeeText: {\r\n marginTop: '100px',\r\n color: 'white'\r\n }\r\n })\r\n);\r\n\r\ntype UnauthenticatedAppTwoColumnLayoutProps = {\r\n /* classes: ClassNameMap; */\r\n};\r\n\r\nconst UnauthenticatedAppTwoColumnLayout: React.FunctionComponent = props => {\r\n const headerClasses = useHeaderStyles();\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.children}\r\n \r\n \r\n \r\n ZAMĚSTNANEC.online\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UnauthenticatedAppTwoColumnLayout;\r\n","import React from 'react';\r\nimport { Switch, Route, Redirect } from 'react-router-dom';\r\n\r\nimport { SingInContainer } from '../signIn';\r\n\r\ntype UnauthenticatedAppRouterProps = {};\r\n\r\nconst UnauthenticatedAppRouter: React.FunctionComponent = (): React.ReactElement => {\r\n console.warn('AuthenticatedAppRouter');\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n if (location.pathname !== '/signout') {\r\n return ;\r\n }\r\n\r\n return ;\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default UnauthenticatedAppRouter;\r\n","import React from 'react';\r\nimport { Hidden } from '@material-ui/core';\r\n\r\nimport { default as UnauthenticatedAppOneColumnLayout } from './unauthenticatedAppOneColumnLayout';\r\nimport { default as UnauthenticatedAppTwoColumnLayout } from './unauthenticatedAppTwoColumnLayout';\r\nimport UnauthenticatedAppRouter from './unauthenticatedAppRouter';\r\n\r\ntype UnauthenticatedAppProps = {};\r\n\r\nconst UnauthenticatedApp: React.FunctionComponent = props => {\r\n const content = ;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UnauthenticatedApp;\r\n","import React, { Suspense } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\n\r\nimport { AuthenticatedApp } from './authenticatedApp';\r\nimport { default as UnauthenticatedApp } from './unauthenticatedApp';\r\nimport { AppProviderContainerProps, AppProviderContainerDispatchProps, AppProviderContainerStateProps } from './types';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport { FullPageLoadingIndicatorContainer } from '../../components';\r\nimport * as authenticationActions from '../authentication/actions';\r\nimport { afterAuthenticatedAppDidMount } from './actions';\r\n\r\nconst renderLoader = (): React.ReactElement => ;\r\n\r\nexport class AppProviderContainer extends React.Component {\r\n componentDidMount(): void {\r\n this.props.tryLoadAuthenticatedUserFormCredentials();\r\n }\r\n\r\n render(): React.ReactElement {\r\n const { user } = this.props;\r\n\r\n console.debug(\"AppProviderContainer.render\");\r\n\r\n // TODO: 90 jako konstanta v thematu\r\n return (\r\n \r\n \r\n \r\n {user ? : }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState): AppProviderContainerStateProps => {\r\n return {\r\n user: state.authentication.user\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): AppProviderContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n tryLoadAuthenticatedUserFormCredentials: authenticationActions.tryLoadAuthenticatedUserFormCredentials,\r\n afterAuthenticatedAppDidMount: afterAuthenticatedAppDidMount\r\n },\r\n dispatch\r\n );\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppProviderContainer);\r\n","import { all, put, takeEvery, select, ForkEffect, AllEffect, PutEffect, SelectEffect } from 'redux-saga/effects';\r\nimport { ActionType } from 'typesafe-actions';\r\nimport { CallHistoryMethodAction, push } from 'connected-react-router';\r\nimport { LocationState, Path } from 'history';\r\n\r\nimport { afterAuthenticatedAppDidMount, afterNavigation } from './actions';\r\nimport { addErrorAlertWithTenantFilter, addInfoAlerWithCustomComponentWithTenantFilter } from '../alerts';\r\nimport { getUserExpiryDate } from '../authentication';\r\nimport { NewSectionNotification, NewDocumentNotification, getAccesToPortalAfterTerminationOfEmployment } from '../notifications';\r\nimport { getUserTenantDomain } from '../authentication/selectors';\r\nimport { tenantProvider, TenantDomains } from '../tenant';\r\n\r\n\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(afterAuthenticatedAppDidMount, afterAuthenticatedAppDidMountHandler)]);\r\n yield all([yield takeEvery(afterNavigation, afterNavigationHandler)]);\r\n}\r\n\r\nfunction* afterAuthenticatedAppDidMountHandler(\r\n action: ReturnType\r\n): Generator<\r\n | SelectEffect\r\n | PutEffect>\r\n | ReturnType\r\n | ReturnType,\r\n void,\r\n Date | null\r\n> {\r\n const userExpiryDate = yield select(getUserExpiryDate);\r\n const message = getAccesToPortalAfterTerminationOfEmployment(userExpiryDate);\r\n\r\n yield addErrorAlertWithTenantFilter(message, 'accesToPortalAfterTerminationOfEmployment');\r\n yield addInfoAlerWithCustomComponentWithTenantFilter(\r\n message,\r\n NewSectionNotification,\r\n {\r\n sectionName: 'Informace pro zaměstnance',\r\n sectionPath: '/documents',\r\n sectionDescription: 'Naleznete tam důležité dokumenty'\r\n },\r\n 'newSection'\r\n );\r\n}\r\n\r\nfunction* afterNavigationHandler(\r\n action: ReturnType\r\n): Generator<\r\n | SelectEffect\r\n | PutEffect>\r\n | ReturnType\r\n | ReturnType,\r\n void,\r\n string | null\r\n> {\r\n const userTenantDomain = yield select(getUserTenantDomain);\r\n const currentTenantDomain = tenantProvider.getSubdomain();\r\n if (!userTenantDomain) {\r\n yield put(push(\"/signout\"));\r\n return;\r\n }\r\n\r\n const currentTenant = TenantDomains[currentTenantDomain];\r\n const userTenant = TenantDomains[userTenantDomain];\r\n\r\n if (userTenant !== currentTenant) {\r\n yield put(push(\"/signout\"));\r\n return;\r\n }\r\n}\r\n","export { default as AppProvider } from './appProviderContainer';\r\nexport {default as appSaga} from './sagas';\r\n","import { library } from '@fortawesome/fontawesome-svg-core';\r\nimport {\r\n faUserTie,\r\n faIdCardAlt,\r\n faBell,\r\n faPowerOff,\r\n faBars,\r\n faDownload,\r\n faFileInvoice,\r\n faFileAlt,\r\n faKey,\r\n faFolderDownload\r\n} from '@fortawesome/pro-light-svg-icons';\r\n\r\nlibrary.add(faUserTie, faIdCardAlt, faBell, faPowerOff, faBars, faDownload, faFileInvoice, faFileAlt, faKey, faFolderDownload);\r\n\r\nexport type IconName =\r\n | 'user-tie'\r\n | 'id-card-alt'\r\n | 'bell'\r\n | 'power-off'\r\n | 'bars'\r\n | 'download'\r\n | 'file-invoice'\r\n | 'file-alt'\r\n | 'key'\r\n | 'folder-download';\r\n\r\nexport type IconPrefix = 'fal';\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer, ActionType } from 'typesafe-actions';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { AuthenticationState, AuthenticationAction, User } from './types';\r\nimport { loadAuthenticatedUserFormStorageAsync, setAuthenticatedUserFormCredentials } from './actions';\r\nimport { signInValidateOptAsync } from '../signIn';\r\nimport { signOutAsync } from '../signOut';\r\n\r\nexport const initialState: AuthenticationState = {\r\n user: null,\r\n isAuthenticated: false\r\n};\r\n\r\ntype RootActions = AuthenticationAction | ActionType | ActionType;\r\n\r\nconst userReducer = createReducer, RootActions>(initialState.user)\r\n .handleAction([loadAuthenticatedUserFormStorageAsync.request, loadAuthenticatedUserFormStorageAsync.failure], (state, action) => null)\r\n .handleAction(loadAuthenticatedUserFormStorageAsync.success, (state, action) => {\r\n return { ...action.payload };\r\n }) \r\n .handleAction(setAuthenticatedUserFormCredentials, (state, action) => {\r\n return { ...action.payload };\r\n })\r\n .handleAction(signOutAsync.success, (state, action) => initialState.user);\r\n\r\nconst isAuthenticatedReducer = createReducer, RootActions>(initialState.isAuthenticated)\r\n .handleAction([loadAuthenticatedUserFormStorageAsync.request, loadAuthenticatedUserFormStorageAsync.failure], (state, action) => false)\r\n .handleAction([loadAuthenticatedUserFormStorageAsync.success, setAuthenticatedUserFormCredentials], (state, action) => true)\r\n .handleAction(signOutAsync.success, (state, action) => initialState.isAuthenticated);\r\n \r\nexport default combineReducers({\r\n user: userReducer,\r\n isAuthenticated: isAuthenticatedReducer\r\n});\r\n","import { createAction, createAsyncAction } from 'typesafe-actions';\r\n\r\nimport { DocumentGroupModel } from '../../api/interfaces';\r\nimport { ShiftSchedulesSuccessResponse } from './types';\r\n\r\nexport const selectGroup = createAction('shiftSchedules/SELECT_GROUP')();\r\n\r\nexport const getGroupsAsync = createAsyncAction(\r\n 'shiftSchedules/GET_GROUPS_REQUEST',\r\n 'shiftSchedules/GET_GROUPS_SUCCESS',\r\n 'shiftSchedules/GET_YGROUPS_FAILURE'\r\n)();\r\n\r\nexport const getDocumentsAsync = createAsyncAction(\r\n 'shiftSchedules/GET_DOCUMENTS_REQUEST',\r\n 'shiftSchedules/GET_DOCUMENTS_SUCCESS',\r\n 'shiftSchedules/GET_DOCUMENTS_FAILURE'\r\n)();\r\n\r\nexport const downloadDocumentAsync = createAsyncAction(\r\n 'shiftSchedules/DOWNLOAD_DOCUMENT_REQUEST',\r\n 'shiftSchedules/DOWNLOAD_DOCUMENT_SUCCESS',\r\n 'shiftSchedules/DOWNLOAD_DOCUMENT_FAILURE'\r\n)();\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer } from 'typesafe-actions';\r\nimport produce from 'immer';\r\n\r\nimport { DocumentsAction, DocumentsState } from './types';\r\nimport * as actions from './actions';\r\n\r\nexport const initialState: DocumentsState = {\r\n documentList: {\r\n byId: {},\r\n allIds: []\r\n }\r\n};\r\n\r\nconst documentListReducer = createReducer, DocumentsAction>(initialState.documentList).handleAction(\r\n actions.getDocumentsAsync.success,\r\n (state, action) => {\r\n const newState = produce(initialState.documentList, draft => {\r\n action.payload.forEach(document => {\r\n draft.byId[document.id] = {\r\n ...document,\r\n publicFrom: document.publicFromUtc ? new Date(document.publicFromUtc).toLocaleDateString() : 'nenastaveno'\r\n };\r\n draft.allIds.push(document.id);\r\n });\r\n });\r\n\r\n return newState;\r\n }\r\n);\r\n\r\nexport default combineReducers({\r\n documentList: documentListReducer\r\n});\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer } from 'typesafe-actions';\r\nimport produce from 'immer';\r\n\r\nimport { ShiftSchedulesAction, ShiftSchedulesState } from './types';\r\nimport * as actions from './actions';\r\n\r\nexport const initialState: ShiftSchedulesState = {\r\n documentList: {\r\n byId: {},\r\n allIds: [],\r\n byGroups: {}\r\n },\r\n groups: [],\r\n selectedGroupId: 0\r\n};\r\n\r\nconst documentListReducer = createReducer, ShiftSchedulesAction>(initialState.documentList).handleAction(\r\n actions.getDocumentsAsync.success,\r\n (state, action) => {\r\n const newState = produce(initialState.documentList, draft => {\r\n action.payload.documents.forEach(document => {\r\n draft.byId[document.id] = document;\r\n draft.allIds.push(document.id);\r\n draft.byGroups[action.payload.groupId] = action.payload.documents;\r\n });\r\n });\r\n\r\n return newState;\r\n }\r\n);\r\n\r\nconst groupsReducer = createReducer, ShiftSchedulesAction>(initialState.groups)\r\n .handleAction(actions.getGroupsAsync.success, (state, action) => action.payload)\r\n .handleAction(actions.getGroupsAsync.failure, (state, action) => initialState.groups);\r\n\r\nconst selectedGroupIdReducer = createReducer, ShiftSchedulesAction>(\r\n initialState.selectedGroupId\r\n).handleAction(actions.selectGroup, (state, action) => action.payload);\r\n\r\nexport default combineReducers({\r\n documentList: documentListReducer,\r\n groups: groupsReducer,\r\n selectedGroupId: selectedGroupIdReducer\r\n});\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer } from 'typesafe-actions';\r\n\r\nimport { ThemeState, ThemeAction } from './types';\r\nimport * as actions from './actions';\r\n\r\nexport const initialState: ThemeState = {\r\n themeName: 'default'\r\n};\r\n\r\nconst themeNameReducer = createReducer(initialState.themeName).handleAction(\r\n actions.selectThemeName,\r\n (state, action) => action.payload\r\n);\r\n\r\nexport default combineReducers({\r\n themeName: themeNameReducer\r\n});\r\n","import { createReducer } from 'typesafe-actions';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { ErrorsState, ErrorsAction } from './types';\r\nimport { genericError } from './actions';\r\n\r\nexport const initialState: ErrorsState = {\r\n errorCode: 0,\r\n errorMessage: ''\r\n};\r\n\r\nconst errorsReducer = createReducer, ErrorsAction>(initialState).handleAction(\r\n genericError,\r\n (state, action) => initialState\r\n);\r\n\r\nexport default errorsReducer;\r\n","export class Stack {\r\n private stack: T[];\r\n\r\n constructor(stack?: T[]) {\r\n this.stack = stack || [];\r\n }\r\n\r\n push(item: T): void {\r\n this.stack.push(item);\r\n }\r\n\r\n pop(): T | undefined {\r\n return this.stack.pop();\r\n }\r\n\r\n clear(): void {\r\n this.stack = [];\r\n }\r\n\r\n clone(): Stack {\r\n return new Stack([...this.stack]);\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.stack.isEmpty();\r\n }\r\n}\r\n","import { createReducer } from 'typesafe-actions';\r\n\r\nimport { FullPageLoadingIndicatorState, FullPageLoadingIndicatorAction } from './types';\r\nimport * as actions from './actions';\r\n\r\nimport { Stack } from '../../utils/stack';\r\n\r\nexport const initialState: FullPageLoadingIndicatorState = {\r\n showIndicator: false,\r\n indicatorStack: new Stack()\r\n};\r\n\r\nconst fullPageLoadingIndicatorReducer = createReducer(initialState)\r\n .handleAction(actions.showFullPageLoadingIndicator, (state, action) => {\r\n const newStack = state.indicatorStack.clone();\r\n newStack.push(true);\r\n\r\n return { showIndicator: !newStack.isEmpty(), indicatorStack: newStack };\r\n })\r\n .handleAction(actions.hideFullPageLoadingIndicator, (state, action) => {\r\n const newStack = state.indicatorStack.clone();\r\n newStack.pop();\r\n\r\n return { showIndicator: !newStack.isEmpty(), indicatorStack: newStack };\r\n });\r\n\r\nexport default fullPageLoadingIndicatorReducer;\r\n","export const currentYear = new Date().getFullYear();\r\n","import { combineReducers } from 'redux';\r\nimport { createReducer } from 'typesafe-actions';\r\nimport produce from 'immer';\r\n\r\nimport { PayrollTicketsState, PayrollTicketsAction } from './types';\r\nimport * as actions from './actions';\r\nimport { currentYear } from '../../configuration/environment';\r\n\r\nexport const initialState: PayrollTicketsState = {\r\n years: [currentYear],\r\n selectedYear: currentYear,\r\n payrollTicketList: {\r\n byYears: { [currentYear]: [] }\r\n }\r\n};\r\n\r\nconst yearsReducer = createReducer, PayrollTicketsAction>(initialState.years)\r\n .handleAction(actions.getPeriodsAsync.success, (state, action) => action.payload)\r\n .handleAction(actions.getPeriodsAsync.failure, (state, action) => initialState.years);\r\n\r\nconst selectedYearReducer = createReducer, PayrollTicketsAction>(initialState.selectedYear).handleAction(\r\n actions.selectYear,\r\n (state, action) => action.payload\r\n);\r\n\r\nconst payrollTicketListReducer = createReducer, PayrollTicketsAction>(\r\n initialState.payrollTicketList\r\n).handleAction(actions.getPayrollsAsync.success, (state, action) => {\r\n const newState = produce(state, draft => {\r\n draft.byYears[action.payload.year] = action.payload.payrolls;\r\n });\r\n\r\n return newState;\r\n});\r\n\r\nexport default combineReducers({\r\n years: yearsReducer,\r\n selectedYear: selectedYearReducer,\r\n payrollTicketList: payrollTicketListReducer\r\n});\r\n","import React, { useEffect } from 'react';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport * as actions from './actions';\r\n\r\ntype SingOutContainerProps = {} & SingOutContainerDispatchProps;\r\n\r\ntype SingOutContainerDispatchProps = {\r\n signOutRequest: typeof actions.signOutAsync.request;\r\n};\r\n\r\nconst SignOutContainer: React.FunctionComponent = props => {\r\n console.warn('SignOutContainer');\r\n const signOutRequest = props.signOutRequest;\r\n\r\n useEffect(() => {\r\n console.warn('SignOutContainer.useEffect');\r\n\r\n signOutRequest();\r\n }, [signOutRequest]);\r\n\r\n return null;\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): SingOutContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n signOutRequest: actions.signOutAsync.request\r\n },\r\n dispatch\r\n );\r\n\r\nexport default connect(undefined, mapDispatchToProps)(SignOutContainer);\r\n","import { put, all, takeEvery, PutEffect, ForkEffect, AllEffect } from 'redux-saga/effects';\r\n\r\nimport apiClient from '../../api/apiClientInstance';\r\nimport { BaseResponse } from '../../api/responses';\r\n\r\nimport { signOutAsync } from './actions';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(signOutAsync.request, signOutRequest)]);\r\n}\r\n\r\ntype SignOutRequestGeneratorType = Promise | PutEffect>;\r\n\r\nfunction* signOutRequest(action: ReturnType): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n console.warn('signOutRequest');\r\n\r\n const response: BaseResponse = yield apiClient.Authentication.signOut();\r\n yield put(signOutAsync.success());\r\n } catch (error) {\r\n //TODO: obecna chyba\r\n console.error(error);\r\n yield put(signOutAsync.success());\r\n }\r\n}\r\n","import { all, put, takeEvery, ForkEffect, AllEffect, PutEffect, call, CallEffect } from 'redux-saga/effects';\r\nimport cookies from 'js-cookie';\r\nimport jwtDecode from 'jwt-decode';\r\n\r\nimport { tryLoadAuthenticatedUserFormCredentials, setAuthenticatedUserFormCredentials } from './actions';\r\nimport { User } from './types';\r\nimport { signOutAsync } from '../signOut';\r\nimport { signInValidateOptAsync } from '../signIn';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([\r\n yield takeEvery(tryLoadAuthenticatedUserFormCredentials, tryLoadAuthenticatedUserFormCredentialHandler),\r\n yield takeEvery(signOutAsync.success, sigOutSuccess),\r\n yield takeEvery(signInValidateOptAsync.success, signInSuccess)\r\n ]);\r\n}\r\n\r\nfunction* tryLoadAuthenticatedUserFormCredentialHandler(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n yield loadAuthenticatedUserFormCredential();\r\n } catch (error) {\r\n //TODO: Obecnou akci na chybu, reducer a nejak to propagovat do stavu\r\n }\r\n}\r\n\r\ntype TokenDto = {\r\n unique_name: string;\r\n nameid: string;\r\n tenanthost: string;\r\n initials: string;\r\n exp: number;\r\n expiration: string;\r\n};\r\n\r\ntype LoadAuthenticatedUserFormCredentialGeneratorType = CallEffect | PutEffect>;\r\ntype LoadAuthenticatedUserFormCredentialGenerator = Generator;\r\n\r\nfunction* loadAuthenticatedUserFormCredential(): LoadAuthenticatedUserFormCredentialGenerator {\r\n console.warn('tryLoadAuthenticatedUserFormCredentialHandler');\r\n\r\n const token = cookies.get('token');\r\n if (!token) {\r\n return;\r\n }\r\n\r\n //TODO: vymyslet\r\n const decodedToken = jwtDecode(token);\r\n\r\n console.warn(decodedToken);\r\n\r\n if (Date.now() >= decodedToken.exp * 1000) {\r\n // Je expirovany, neni co obnovit\r\n return;\r\n }\r\n\r\n const dateOfUserExpiry = decodedToken.expiration ? new Date(decodedToken.expiration) : null;\r\n\r\n // Neni expirovany, muzeme hydratovat uzivatele\r\n yield put(\r\n setAuthenticatedUserFormCredentials({\r\n fullName: decodedToken.unique_name,\r\n personalId: decodedToken.nameid,\r\n tenantHost: decodedToken.tenanthost,\r\n initials: decodedToken.initials,\r\n dateOfUserExpiry: dateOfUserExpiry\r\n } as User)\r\n );\r\n}\r\n\r\nfunction* sigOutSuccess(action: ReturnType): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n yield console.warn('sigOutSuccess');\r\n\r\n const token = cookies.get('token');\r\n if (!token) {\r\n return;\r\n }\r\n\r\n cookies.remove('token');\r\n } catch (error) {\r\n //TODO: Obecnou akci na chybu, reducer a nejak to propagovat do stavu\r\n }\r\n}\r\n\r\nfunction* signInSuccess(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: AsyncGenerator {\r\n try {\r\n yield loadAuthenticatedUserFormCredential();\r\n } catch (error) {\r\n //TODO: Obecnou akci na chybu, reducer a nejak to propagovat do stavu\r\n }\r\n}\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Backdrop, CircularProgress, makeStyles, createStyles, Theme } from '@material-ui/core';\r\nimport { VisibilityProperty } from 'csstype';\r\n\r\nimport { StyleRules } from '@material-ui/core/styles';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {\r\n position: 'fixed' as 'fixed',\r\n zIndex: 1300,\r\n right: '0px',\r\n bottom: '0px',\r\n top: '0px',\r\n left: '0px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n visibility: (props): VisibilityProperty => props.visibility\r\n }\r\n })\r\n);\r\n\r\ntype FullPageLoadingIndicatorClassKey = 'root';\r\n\r\ntype FullPageLoadingIndicatorStyleProps = {\r\n visibility: VisibilityProperty;\r\n};\r\n\r\ntype FullPageLoadingIndicatorProps = {\r\n size: number;\r\n} & FullPageLoadingIndicatorStateProps;\r\n\r\ntype FullPageLoadingIndicatorStateProps = {\r\n show: boolean;\r\n};\r\n\r\nconst FullPageLoadingIndicatorContainer: React.FunctionComponent = props => {\r\n console.warn('FullPageLoadingIndicator');\r\n const classes = useStyles({ visibility: props.show ? 'visible' : 'hidden' });\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = ({ fullPageLoadingIndicator }: ApplicationState): FullPageLoadingIndicatorStateProps => {\r\n return {\r\n show: fullPageLoadingIndicator.showIndicator\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FullPageLoadingIndicatorContainer);\r\n","export const TenantDomains = {\r\n localhost: 'localhost',\r\n dev: 'dev',\r\n cezep: 'cezep',\r\n lm: 'lm',\r\n ksystem: 'ksystem'\r\n} as Record;\r\n\r\nexport type Tenants = 'localhost' | 'dev' | 'cezep' | 'lm' | 'ksystem';\r\n","import { TenantDomains, Tenants } from './tenantDomains';\r\n\r\nclass TenantProvider {\r\n getTenant = (): Tenants => {\r\n const currentTenantDomain = this.getSubdomain();\r\n /* return 'lm'; */\r\n for (const domainKey in TenantDomains) {\r\n const domain = TenantDomains[domainKey];\r\n if (currentTenantDomain === domain) {\r\n return domain;\r\n }\r\n }\r\n\r\n throw new Error(`Unsupported tenant ${currentTenantDomain}`);\r\n };\r\n\r\n getSubdomain = (): string => {\r\n /* return 'lm'; */\r\n const full = window.location.host;\r\n const parts = full.split('.');\r\n const subWithPort = parts[0];\r\n const subWithPortParts = subWithPort.split(':');\r\n\r\n return subWithPortParts[0];\r\n };\r\n}\r\n\r\nexport default new TenantProvider();\r\n","import { tenantProvider, Tenants } from './';\r\n\r\nconst RegistrationEmails = {\r\n \"cezep\": 'Lenka.vyhnankova@cez.cz'\r\n} as Record;\r\n\r\nconst DefaultRegistrationEmail = 'dev@zamestnanec.online';\r\n\r\nclass TenantConfigurationService {\r\n getRegistrationEmail = (): string => {\r\n const tenantKey = tenantProvider.getTenant();\r\n\r\n for (const emailKey in RegistrationEmails) {\r\n if (emailKey === tenantKey) {\r\n return RegistrationEmails[emailKey];\r\n }\r\n }\r\n\r\n return DefaultRegistrationEmail;\r\n };\r\n}\r\n\r\nexport default new TenantConfigurationService();\r\n","export { default as tenantProvider } from './tenantProvider';\r\nexport { default as tenantConfiguratinService } from './tenantConfiguratinService';\r\nexport * from './tenantDomains';\r\n\r\n","import React from 'react';\r\nimport { Typography, Grid, Box, makeStyles, Theme, StyleRules, createStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {\r\n '& a': {\r\n color: 'inherit'\r\n }\r\n }\r\n })\r\n);\r\n\r\ntype NewSectionNotificationClassKey = 'root';\r\n\r\ntype NewSectionNotificationProps = {\r\n sectionName: string;\r\n sectionDescription: string;\r\n sectionPath: string;\r\n};\r\n\r\nconst NewSectionNotification = (props: NewSectionNotificationProps): React.ReactElement => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {'Novinka: Připravili jsme pro vás novou sekci '}\r\n \r\n \r\n {props.sectionName}\r\n \r\n \r\n {'. '}\r\n {props.sectionDescription}.\r\n \r\n Přejít do sekce\r\n \r\n \r\n );\r\n};\r\n\r\nexport default NewSectionNotification;\r\n","import React from 'react';\r\nimport { withStyles, Theme } from '@material-ui/core';\r\nimport { ClassNameMap, StyleRules } from '@material-ui/core/styles/withStyles';\r\n\r\ntype LogoClassKey = 'root';\r\n\r\ntype LogoProps = {\r\n imageSrc: string;\r\n alt: string;\r\n classes: ClassNameMap;\r\n};\r\n\r\nconst styles = (theme: Theme): StyleRules => ({\r\n root: {\r\n height: 32,\r\n display: 'block',\r\n marginLeft: 'auto',\r\n marginRight: 'auto'\r\n }\r\n});\r\n\r\nconst Logo: React.FunctionComponent = (props): React.ReactElement => {\r\n return {props.alt};\r\n};\r\n\r\nexport default withStyles(styles)(Logo);\r\n","import React, { useState, ReactNode } from 'react';\r\nimport { Theme, InputAdornment, Input as MuiInput, InputLabel, FormControl, FormHelperText } from '@material-ui/core';\r\nimport { InputProps as MuiInputProps } from '@material-ui/core/Input';\r\nimport { InputLabelProps as MuiInputLabelProps } from '@material-ui/core/InputLabel';\r\nimport withStyles, { ClassNameMap } from '@material-ui/core/styles/withStyles';\r\n\r\nimport { IconName, Icon } from '../../icons';\r\n\r\nconst withStylesFunction = withStyles(({ palette, spacing, paddings }: Theme) => ({\r\n labelFormControl: {\r\n transform: 'translate(44px, 24px) scale(1)'\r\n },\r\n iconRoot: {\r\n width: '1.2em',\r\n color: palette.text.secondary\r\n },\r\n inputInput: {\r\n fontWeight: 'bold'\r\n },\r\n inputRoot: {\r\n paddingBottom: `calc(${spacing(2)}px - ${paddings.MuiInputBaseInput.Bottom}px)`\r\n },\r\n inputStartAdornment: {\r\n marginRight: spacing(2)\r\n }\r\n}));\r\n\r\ntype InputClassKey = 'labelFormControl' | 'iconRoot' | 'inputInput' | 'inputRoot' | 'inputStartAdornment';\r\n\r\ntype InputProps = {\r\n classes: ClassNameMap;\r\n iconName: IconName;\r\n labelText: string;\r\n helperText: ReactNode;\r\n error: boolean;\r\n InputProps?: MuiInputProps;\r\n InputLabelProps?: MuiInputLabelProps;\r\n};\r\n\r\nconst Input: React.FunctionComponent = props => {\r\n const [shrink, setShrink] = useState(false);\r\n\r\n const shrinkLabel = (): void => {\r\n setShrink(true);\r\n };\r\n\r\n const unShrinkLabel = (event: React.FocusEvent): void => {\r\n if (event.target.value.length === 0) {\r\n setShrink(false);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {props.labelText}\r\n \r\n \r\n \r\n \r\n }\r\n {...{ ...props.InputProps, error: props.error }}\r\n />\r\n {props.helperText}\r\n \r\n\r\n {/* \r\n \r\n \r\n )\r\n }}\r\n InputLabelProps={{\r\n shrink: shrink,\r\n classes: {\r\n formControl: !shrink ? props.classes.labelFormControl : undefined\r\n }\r\n }}\r\n /> */}\r\n \r\n );\r\n};\r\n\r\nexport default withStylesFunction(Input);\r\n","import React from 'react';\r\nimport { makeStyles, createStyles, Theme, Tabs as MuiTabs, Tab as MuiTab } from '@material-ui/core';\r\n\r\nimport { TabsProps } from './types';\r\nimport { isOfType } from 'typesafe-actions';\r\nimport { number, string } from 'yup';\r\nimport { strict } from 'assert';\r\n\r\nexport const useTabsStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {},\r\n image: {\r\n maxWidth: '100%'\r\n },\r\n tabsRoot: {\r\n paddingLeft: theme.spacing(2),\r\n borderBottom: `1px solid ${theme.palette.text.secondary}`\r\n },\r\n tabRoot: {\r\n minWidth: '90px'\r\n },\r\n tabIndicator: {\r\n height: '3px'\r\n },\r\n tabTextColorPrimary: {\r\n '&.Mui-disabled': {\r\n color: theme.palette.primary.main\r\n },\r\n '&.Mui-selected': {\r\n color: theme.palette.text.primary\r\n }\r\n }\r\n })\r\n);\r\n\r\nconst Tabs = (props: TabsProps) => {\r\n const classes = useTabsStyles();\r\n const tabOffset = 1; // Prvni tab je popisek\r\n\r\n const tabItemKeySelector = props.tabItemKeySelector\r\n ? props.tabItemKeySelector\r\n : (tabItem: TTabItemType) => {\r\n if (typeof tabItem === 'number') {\r\n return tabItem as number;\r\n } else if (typeof tabItem === 'string') {\r\n return tabItem as string;\r\n } else {\r\n throw new Error('Unsupported type of defaul tab item key selector');\r\n }\r\n };\r\n\r\n const tabItemLabelSelector = props.tabItemLabelSelector\r\n ? props.tabItemLabelSelector\r\n : (tabItem: TTabItemType) => {\r\n if (typeof tabItem === 'number') {\r\n return tabItem as number;\r\n } else if (typeof tabItem === 'string') {\r\n return tabItem as string;\r\n } else {\r\n throw new Error('Unsupported type of defaul tab item key selector');\r\n }\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<{}>, selectedTabValue: number): void => {\r\n event.preventDefault();\r\n const itemKey = selectedTabValue;\r\n props.onSelectedItemChange(itemKey);\r\n\r\n console.warn('Tabs changed', selectedTabValue);\r\n };\r\n /* const handleChange = (event: React.ChangeEvent<{}>, selectedTabIndex: number): void => {\r\n event.preventDefault();\r\n const itemKey = tabItemKeySelector(props.tabItems[selectedTabIndex - tabOffset]);\r\n props.onSelectedItemChange(itemKey);\r\n\r\n console.warn('Tabs changed', selectedTabIndex);\r\n }; */\r\n\r\n /* const selectedTabIndex = props.tabItems.indexOf(props.selectedTabItemKey) + tabOffset;\r\n\r\n console.warn('Tabs render', selectedTabIndex); */\r\n\r\n return (\r\n \r\n \r\n {props.tabItems.map(tabItem => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default Tabs;\r\n","export { Logo } from './logo';\r\nexport { Input } from './input';\r\nexport { FullPageLoadingIndicatorContainer } from './fullPageLoadingIndicator';\r\nexport { Icon } from './icon';\r\nexport { Tabs } from './tabs';\r\n","import React from 'react';\r\nimport { Typography, Grid, Box, makeStyles, Theme, StyleRules, createStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {\r\n '& a': {\r\n color: 'inherit'\r\n }\r\n }\r\n })\r\n);\r\n\r\ntype NewDocumentNotificationClassKey = 'root';\r\n\r\ntype NewDocumentNotificationProps = {\r\n sectionName: string;\r\n documentDescription: string;\r\n sectionPath: string;\r\n};\r\n\r\nconst NewDocumentNotification = (props: NewDocumentNotificationProps): React.ReactElement => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {'Upozornění: '}{props.documentDescription}\r\n \r\n \r\n {props.sectionName}\r\n \r\n \r\n {'. '}\r\n \r\n Přejít do sekce\r\n \r\n \r\n );\r\n};\r\n\r\nexport default NewDocumentNotification;\r\n","export const getAccesToPortalAfterTerminationOfEmployment = (userExpiryDate: Date | null) => {\r\n let message =\r\n 'Upozornění: Přístup do portálu po ukončení pracovního poměru bude možné max. 1 měsíc po posledním výplatním termínu – tj. k 15. dni v měsíci';\r\n if (userExpiryDate) {\r\n message = `Upozornění: Váš přístup do portálu bude ukončen ke dni: ${userExpiryDate.toLocaleDateString('cs')}`;\r\n }\r\n\r\n return message;\r\n};\r\n","import { Tenants, tenantProvider } from '../tenant';\r\nimport { NotificationConfiguration, NotificationTypes } from './types';\r\n\r\nconst notificationConfigurations = {\r\n cezep: { newDocument: true, newSection: true, accesToPortalAfterTerminationOfEmployment: true }\r\n} as Record;\r\n\r\nexport const isNotificationAllowed = (notificationType: NotificationTypes): boolean => {\r\n if (notificationType === 'genericError' || notificationType === 'genericSuccess') {\r\n return true;\r\n }\r\n\r\n const tenant = tenantProvider.getTenant();\r\n const configuration = notificationConfigurations[tenant];\r\n\r\n if (!configuration) {\r\n return false;\r\n }\r\n\r\n const notificationTypecCnfiguration = configuration[notificationType];\r\n\r\n return notificationTypecCnfiguration;\r\n};\r\n","import { all, put, takeEvery, select, ForkEffect, AllEffect, PutEffect, SelectEffect } from 'redux-saga/effects';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport { getDocumentsAsync, downloadDocumentAsync } from './actions';\r\nimport apiClientInstance from '../../api/apiClientInstance';\r\nimport { DocumentModel, DocumentType } from '../../api/interfaces';\r\nimport { BaseDataResponse } from '../../api/responses';\r\nimport { selectDocumentById } from './selectors';\r\nimport Document from '../../models/document';\r\nimport { DownloadFileResponse } from '../downloadFile';\r\nimport { downloadFile } from '../downloadFile/actions';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([\r\n yield takeEvery(getDocumentsAsync.request, getDocumentsRequest),\r\n yield takeEvery(downloadDocumentAsync.request, downloadDocumentRequest)\r\n ]);\r\n}\r\n\r\ntype GetDocumentsRequestGeneratorType =\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getDocumentsRequest(\r\n action: ReturnType\r\n): Generator> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getDocumentsRequest');\r\n\r\n const response: BaseDataResponse = yield apiClientInstance.Documents.getAsync(DocumentType.GeneralInformation);\r\n if (response.resultCode === 0) {\r\n const orderedData = response.data.sort((a, b) => {\r\n if (a.publicFromUtc > b.publicFromUtc) {\r\n return -1;\r\n }\r\n if (a.publicFromUtc < b.publicFromUtc) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n yield put(getDocumentsAsync.success(orderedData));\r\n } else {\r\n yield put(getDocumentsAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getDocumentsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype DownloadDocumentRequestGeneratorType =\r\n | SelectEffect\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* downloadDocumentRequest(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('downloadDocumentRequest');\r\n\r\n const payroll: Document = yield select(selectDocumentById(action.payload));\r\n const blob: Blob = yield apiClientInstance.Documents.getPdfAsync(action.payload);\r\n\r\n if (blob !== undefined) {\r\n const downloadFileResponse: DownloadFileResponse = {\r\n data: blob,\r\n filename: payroll.fileName\r\n };\r\n yield put(downloadDocumentAsync.success());\r\n yield put(downloadFile(downloadFileResponse));\r\n } else {\r\n yield put(downloadDocumentAsync.failure(new Error('Stažení souboru se nezdařilo.')));\r\n }\r\n } catch (error) {\r\n yield put(downloadDocumentAsync.failure(error));\r\n }\r\n}\r\n","export enum DocumentType {\r\n GeneralInformation = 0,\r\n\r\n ShiftSchedule = 1\r\n}\r\n","export enum DocumentGroupType {\r\n ShiftSchedule = 1\r\n}\r\n","import { all, put, takeEvery, select, ForkEffect, AllEffect, PutEffect, SelectEffect } from 'redux-saga/effects';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport { getDocumentsAsync, downloadDocumentAsync, getGroupsAsync, selectGroup } from './actions';\r\nimport apiClientInstance from '../../api/apiClientInstance';\r\nimport { DocumentGroupModel, DocumentGroupType, DocumentModel, DocumentType } from '../../api/interfaces';\r\nimport { BaseDataResponse } from '../../api/responses';\r\nimport { selectDocumentById, selectDocumentsByGroup, selectSelectedGroupId } from './selectors';\r\nimport Document from '../../models/document';\r\nimport { DownloadFileResponse } from '../downloadFile';\r\nimport { downloadFile } from '../downloadFile/actions';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([\r\n yield takeEvery(getGroupsAsync.request, getGroupsRequest),\r\n yield takeEvery(getGroupsAsync.success, getGroupsSuccess),\r\n yield takeEvery(getDocumentsAsync.request, getDocumentsRequest),\r\n yield takeEvery(downloadDocumentAsync.request, downloadDocumentRequest),\r\n yield takeEvery(selectGroup, selectedGroupChanged)\r\n ]);\r\n}\r\n\r\ntype GetDocumentsRequestGeneratorType =\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getDocumentsRequest(\r\n action: ReturnType\r\n): Generator> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getDocumentsRequest');\r\n\r\n const response: BaseDataResponse = yield apiClientInstance.Documents.getByGroupAsync(action.payload);\r\n if (response.resultCode === 0) {\r\n yield put(getDocumentsAsync.success({ documents: response.data, groupId: action.payload }));\r\n } else {\r\n yield put(getDocumentsAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getDocumentsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype DownloadDocumentRequestGeneratorType =\r\n | SelectEffect\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* downloadDocumentRequest(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('downloadDocumentRequest');\r\n\r\n const payroll: Document = yield select(selectDocumentById(action.payload));\r\n const blob: Blob = yield apiClientInstance.Documents.getPdfAsync(action.payload);\r\n\r\n if (blob !== undefined) {\r\n const downloadFileResponse: DownloadFileResponse = {\r\n data: blob,\r\n filename: payroll.fileName\r\n };\r\n yield put(downloadDocumentAsync.success());\r\n yield put(downloadFile(downloadFileResponse));\r\n } else {\r\n yield put(downloadDocumentAsync.failure(new Error('Stažení souboru se nezdařilo.')));\r\n }\r\n } catch (error) {\r\n yield put(downloadDocumentAsync.failure(error));\r\n }\r\n}\r\n\r\ntype SelectedGroupChangedGeneratorType =\r\n | SelectEffect\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* selectedGroupChanged(action: ReturnType): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('selectedGroupChanged');\r\n\r\n const documents: Document[] = yield select(selectDocumentsByGroup(action.payload));\r\n if (documents.length === 0) {\r\n // Nejsou zadne listky zkusi je nacist\r\n yield put(getDocumentsAsync.request(action.payload));\r\n }\r\n } catch (error) {\r\n yield put(getDocumentsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype GetPeriodsRequestGeneratorType =\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getGroupsRequest(\r\n action: ReturnType\r\n): Generator> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getGroupsRequest');\r\n const response: BaseDataResponse = yield apiClientInstance.DocumentGroups.getAsync(DocumentGroupType.ShiftSchedule);\r\n if (response.resultCode === 0) {\r\n const orderedData = response.data.sort((a, b) => {\r\n if (a.order < b.order) {\r\n return -1;\r\n }\r\n if (a.order > b.order) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n yield put(getGroupsAsync.success(orderedData));\r\n\r\n if (orderedData.length > 0) {\r\n yield put(selectGroup(orderedData[0].id));\r\n }\r\n } else {\r\n yield put(getGroupsAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getGroupsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype GetPeriodSuccessGeneratorType =\r\n | SelectEffect\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\ntype GetPeriodSuccessGeneratorReturnType = PutEffect> | void;\r\n\r\nfunction* getGroupsSuccess(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getGroupsSuccess');\r\n const groups = action.payload;\r\n if (groups.length === 0) {\r\n return;\r\n }\r\n\r\n const selectedGroup = yield select(selectSelectedGroupId);\r\n const existDocumentsForSelectedGroup = !!groups.find(group => group.id === selectedGroup);\r\n if (existDocumentsForSelectedGroup) {\r\n yield put(getDocumentsAsync.request(selectedGroup));\r\n return;\r\n }\r\n } catch (error) {\r\n yield put(getGroupsAsync.failure(error));\r\n }\r\n}\r\n","import { all, put, takeEvery, PutEffect, ForkEffect, AllEffect } from 'redux-saga/effects';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport * as actions from './actions';\r\nimport { tenantProvider } from '../tenant';\r\nimport { themeService } from '../themes';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(actions.detectThemeName, detectThemeName)]);\r\n}\r\n\r\nfunction* detectThemeName(\r\n action: ReturnType\r\n): Generator>, void> {\r\n // TODO: AsyncGenerator {\r\n try {\r\n const tenantKey = tenantProvider.getTenant();\r\n const themeName = themeService.getThemeName(tenantKey);\r\n yield put(actions.selectThemeName(themeName));\r\n } catch (error) {\r\n //TODO: obecna chyba\r\n console.error(error);\r\n }\r\n}\r\n","import { ForkEffect, AllEffect, all, put, takeEvery, PutEffect } from 'redux-saga/effects';\r\nimport { genericError } from './actions';\r\nimport { addErrorAlertWithTenantFilter } from '../alerts';\r\n\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(genericError, genericErrorHandler)]);\r\n}\r\n\r\nfunction* genericErrorHandler(action: ReturnType): Generator, void, unknown> {\r\n try {\r\n yield addErrorAlertWithTenantFilter(action.payload, 'genericError');\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n","import { all, takeEvery, ForkEffect, AllEffect } from 'redux-saga/effects';\r\n\r\nimport { downloadFile } from './actions';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([yield takeEvery(downloadFile, downloadFileHandler)]);\r\n}\r\n\r\nfunction downloadFileHandler(action: ReturnType): void {\r\n // TODO: : Generator {\r\n try {\r\n const downloadFileResponse = action.payload;\r\n if (navigator.msSaveOrOpenBlob) {\r\n navigator.msSaveOrOpenBlob(downloadFileResponse.data, downloadFileResponse.filename);\r\n } else {\r\n const url = window.URL.createObjectURL(downloadFileResponse.data);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.setAttribute('download', downloadFileResponse.filename);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n }\r\n } catch (error) {\r\n //TODO: Logovat obecnou chybu\r\n }\r\n}\r\n","import React from 'react';\r\nimport { makeStyles, createStyles, Theme } from '@material-ui/core';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { Tabs } from '../../components';\r\n\r\ntype PayrollTicketsYearsProps = DeepReadonly<{\r\n years: number[];\r\n selectedYear: number;\r\n onSelectedYearChange(year: number): void;\r\n}>;\r\n\r\nconst PayrollTicketsYears: React.FunctionComponent = props => {\r\n console.warn('PayrollTicketsYears');\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default PayrollTicketsYears;\r\n","import React, { memo } from 'react';\r\nimport {\r\n makeStyles,\r\n createStyles,\r\n Theme,\r\n Table,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n TableBody,\r\n Divider,\r\n Box,\r\n withStyles,\r\n Typography\r\n} from '@material-ui/core';\r\nimport { TableCellProps } from '@material-ui/core/TableCell';\r\nimport { WithStyles, StyleRules, ClassNameMap } from '@material-ui/core/styles/withStyles';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { PayrollTicket } from './types';\r\nimport { Icon } from '../../icons';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {},\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n /* tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n }, */\r\n tableCellBody: {\r\n color: theme.palette.text.secondary,\r\n padding: '0px 16px'\r\n } /* \r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },*/,\r\n tableRowAnyItem: { padding: '16px' },\r\n actionIconRoot: {\r\n '&:not(:last-of-type)': {\r\n marginRight: '15px'\r\n }\r\n },\r\n actionIcon: {\r\n fontSize: '1.2rem'\r\n }\r\n })\r\n);\r\n\r\ntype TableRowClassKey = 'root' | 'listRoot' | 'tableRowAnyItem' | 'tableCellBody' | 'table' | 'actionIconRoot' | 'actionIcon';\r\n\r\nconst extendedTableCellStyles = (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: { padding: '0px' },\r\n wrapper: { display: 'flex' },\r\n body: {\r\n padding: '16px'\r\n /* cursor: \"pointer\" */\r\n },\r\n bodyActive: {\r\n padding: '16px',\r\n /* cursor: \"pointer\", */\r\n color: theme.palette.text.primary\r\n },\r\n indicatorActive: {\r\n width: '4px',\r\n backgroundColor: theme.palette.primary.main\r\n },\r\n indicatorInactive: {\r\n width: '4px',\r\n backgroundColor: 'transparent'\r\n }\r\n });\r\n\r\ntype ExtendedTableCellClassKey = 'root' | 'wrapper' | 'body' | 'bodyActive' | 'indicatorActive' | 'indicatorInactive';\r\ntype ExtendedTableCellStyleProps = {};\r\ntype ExtendedTableCellProps = {\r\n selected?: boolean;\r\n children: React.ReactNode;\r\n} & TableCellProps &\r\n ExtendedTableCellStyleProps &\r\n WithStyles;\r\n\r\nconst ExtendedTableCell: React.FunctionComponent = props => {\r\n console.warn('ExtendedTableCell');\r\n const { selected, children, classes, ...muiTableCellProps } = props;\r\n const { body, bodyActive, wrapper, indicatorActive, indicatorInactive, ...muiTableCellClasses } = classes;\r\n\r\n return (\r\n \r\n
\r\n \r\n {children}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst ExtendedTableCellWithStyles = withStyles(extendedTableCellStyles)(ExtendedTableCell);\r\n\r\ntype PayrollTicketsTableProps = DeepReadonly<{\r\n rows: PayrollTicket[];\r\n\r\n downloadPayrollAction: (payrollId: number) => void;\r\n getPayrollPinCode: (pairollId: number) => void;\r\n}>;\r\n\r\nconst getTableRows = (\r\n rows: DeepReadonly,\r\n selected: number,\r\n classes: ClassNameMap,\r\n handleClick: (event: React.MouseEvent, id: number) => void,\r\n handleActionDownloadPayroll: (pairollId: number) => void,\r\n handleActionGetPayrollPinCode: (pairollId: number) => void\r\n): React.ReactElement[] | React.ReactElement => {\r\n if (rows.length === 0) {\r\n return (\r\n \r\n \r\n Pro vybrané období nejsou k dispozici žádné výplatní lístky.\r\n \r\n \r\n );\r\n }\r\n\r\n return rows.map(row => (\r\n handleClick(event, row.id)}\r\n >\r\n \r\n {row.period}\r\n \r\n \r\n {row.name}\r\n \r\n \r\n \r\n handleActionDownloadPayroll(row.id)\r\n }}\r\n />\r\n\r\n handleActionGetPayrollPinCode(row.id)\r\n }}\r\n />\r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nconst PayrollTicketsTable: React.FunctionComponent = memo(props => {\r\n console.warn('PayrollTicketsTable');\r\n const classes = useStyles();\r\n const defaultSelectedValue = props.rows[0] ? props.rows[0].id : -1;\r\n const [selected, setSelected] = React.useState(defaultSelectedValue);\r\n const handleClick = (event: React.MouseEvent, id: number): void => {\r\n setSelected(id);\r\n };\r\n\r\n const rows = getTableRows(props.rows, selected, classes, handleClick, props.downloadPayrollAction, props.getPayrollPinCode);\r\n\r\n return (\r\n \r\n \r\n \r\n Období\r\n Název\r\n Akce\r\n \r\n \r\n {rows}\r\n
\r\n );\r\n});\r\n\r\nexport default PayrollTicketsTable;\r\n","import React, { useEffect } from 'react';\r\nimport { Typography, Paper, makeStyles, createStyles, Theme } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport PayrollTicketsYears from './payrollTicketsYears';\r\nimport PayrollTicketsTable from './payrollTicketsTable';\r\nimport { PayrollTicket } from './types';\r\nimport * as actions from './actions';\r\n\r\nimport { selectPayrolTicketsBySelectedYear } from './selectors';\r\nimport { Icon } from '../../icons';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n /* flex: \"1\" */\r\n },\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n },\r\n tableCellBody: {\r\n color: theme.palette.text.secondary,\r\n padding: '0px 16px'\r\n },\r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },\r\n tabsRoot: {\r\n paddingLeft: theme.spacing(2),\r\n borderBottom: `1px solid ${theme.palette.text.secondary}`\r\n },\r\n tabRoot: {\r\n minWidth: '90px'\r\n },\r\n tabIndicator: {\r\n height: '3px'\r\n },\r\n tabTextColorPrimary: {\r\n '&.Mui-disabled': {\r\n color: theme.palette.primary.main\r\n },\r\n '&.Mui-selected': {\r\n color: theme.palette.text.primary\r\n }\r\n },\r\n infoTextRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none',\r\n padding: theme.spacing(2)\r\n },\r\n /* warningTextRoot: {\r\n marginTop: theme.spacing(2), \r\n }, */\r\n infoTextActionIconRoot: {\r\n margin: '0px 5px'\r\n },\r\n infoTextActionIcon: {\r\n fontSize: '1.2rem'\r\n }\r\n })\r\n);\r\n\r\ntype PayrollTicketsContainerStateProps = DeepReadonly<{\r\n years: number[];\r\n payrollTickets: PayrollTicket[];\r\n selectedYear: number;\r\n}>;\r\n\r\ntype PayrollTicketsContainerDispatchProps = {\r\n selectYear: typeof actions.selectYear;\r\n getPeriodsRequest: typeof actions.getPeriodsAsync.request;\r\n downloadPayrollAction: typeof actions.downloadPayrollAsync.request;\r\n getPayrollPinCodeAction: typeof actions.getPayrollPinCodeAsync.request;\r\n};\r\n\r\ntype PayrollTicketsContainerProps = {} & PayrollTicketsContainerStateProps & PayrollTicketsContainerDispatchProps;\r\n\r\nconst PayrollTicketsContainer: React.FunctionComponent = props => {\r\n console.warn('PayrollTicketsContainer');\r\n const classes = useStyles();\r\n const getPeriodsRequest = props.getPeriodsRequest;\r\n\r\n useEffect(() => {\r\n console.warn('PayrollTicketsContainer.useEffect');\r\n\r\n getPeriodsRequest();\r\n }, [getPeriodsRequest]);\r\n\r\n return (\r\n
\r\n \r\n Výplatní lístky\r\n \r\n \r\n \r\n Pro otevření staženého\r\n {\r\n \r\n }\r\n výplatního lístku je třeba zadat heslo, které si odešlete pomocí akce\r\n {\r\n \r\n }\r\n na příslušném řádku. Heslo Vám bude doručen na Vaše mobilní číslo. Doručené heslo zadáte do formuláře v PDF.\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: ApplicationState): PayrollTicketsContainerStateProps => {\r\n return {\r\n years: state.payrollTickets.years,\r\n payrollTickets: selectPayrolTicketsBySelectedYear(state),\r\n selectedYear: state.payrollTickets.selectedYear\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): PayrollTicketsContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n selectYear: actions.selectYear,\r\n getPeriodsRequest: actions.getPeriodsAsync.request,\r\n downloadPayrollAction: actions.downloadPayrollAsync.request,\r\n getPayrollPinCodeAction: actions.getPayrollPinCodeAsync.request,\r\n },\r\n dispatch\r\n );\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PayrollTicketsContainer);\r\n","import React, { memo } from 'react';\r\nimport { makeStyles, createStyles, Theme, Table, TableHead, TableRow, TableCell, TableBody, Box, Typography } from '@material-ui/core';\r\nimport { StyleRules, ClassNameMap } from '@material-ui/core/styles/withStyles';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport Document from '../../models/document';\r\nimport { Icon } from '../../icons';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {},\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n /* tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n }, */\r\n tableCellBody: {\r\n color: theme.palette.text.secondary\r\n /* padding: '0px 16px' */\r\n } /* \r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },*/,\r\n tableRowAnyItem: { padding: '16px' },\r\n actionIconRoot: {\r\n '&:not(:last-of-type)': {\r\n marginRight: '15px'\r\n }\r\n },\r\n actionIcon: {\r\n fontSize: '1.2rem'\r\n }\r\n })\r\n);\r\n\r\ntype TableRowClassKey = 'root' | 'listRoot' | 'tableRowAnyItem' | 'tableCellBody' | 'table' | 'actionIconRoot' | 'actionIcon';\r\n\r\ntype PayrollTicketsTableProps = DeepReadonly<{\r\n rows: Document[];\r\n\r\n downloadDocumentAction: (documentId: number) => void;\r\n}>;\r\n\r\nconst getTableRows = (\r\n rows: DeepReadonly,\r\n selected: number,\r\n classes: ClassNameMap,\r\n handleClick: (event: React.MouseEvent, id: number) => void,\r\n handleActionDownloadDocument: (documentId: number) => void\r\n): React.ReactElement[] | React.ReactElement => {\r\n if (rows.length === 0) {\r\n return (\r\n \r\n \r\n Aktuálně nejsou k dispozici žádné dokumenty ke stažení.\r\n \r\n \r\n );\r\n }\r\n\r\n return rows.map(row => (\r\n handleClick(event, row.id)}\r\n >\r\n \r\n {row.name}\r\n \r\n \r\n \r\n handleActionDownloadDocument(row.id)\r\n }}\r\n />\r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nconst DocumentsTable: React.FunctionComponent = props => {\r\n console.warn('ShiftSchedulesTable');\r\n const classes = useStyles();\r\n const defaultSelectedValue = props.rows[0] ? props.rows[0].id : -1;\r\n const [selected, setSelected] = React.useState(defaultSelectedValue);\r\n const handleClick = (event: React.MouseEvent, id: number): void => {\r\n setSelected(id);\r\n };\r\n\r\n const rows = getTableRows(props.rows, selected, classes, handleClick, props.downloadDocumentAction);\r\n\r\n return (\r\n \r\n \r\n \r\n Název\r\n Akce\r\n \r\n \r\n {rows}\r\n
\r\n );\r\n};\r\n\r\nexport default DocumentsTable;\r\n","import React, { useCallback } from 'react';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { DocumentGroupModel } from '../../api/interfaces';\r\n\r\nimport { Tabs } from '../../components';\r\n\r\ntype ShiftSchedulesGroupsProps = DeepReadonly<{\r\n groups: DocumentGroupModel[];\r\n selectedGroupId: number;\r\n onSelectedYearChange(groupId: number): void;\r\n}>;\r\n\r\nconst ShiftSchedulesGroups: React.FunctionComponent = props => {\r\n console.warn('ShiftSchedulesGroups');\r\n\r\n const tabItemKeySelector = useCallback((tabItem: DocumentGroupModel) => {\r\n return tabItem.id;\r\n }, []);\r\n\r\n const tabItemLabelSelector = useCallback((tabItem: DocumentGroupModel) => {\r\n return tabItem.name;\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ShiftSchedulesGroups;\r\n","import React from 'react';\r\nimport { Typography, Paper, createStyles, Theme, withStyles } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport DocumentsTable from './shiftSchedulesTable';\r\nimport * as actions from './actions';\r\n\r\nimport { selectDocuments } from './selectors';\r\nimport Document from '../../models/document';\r\nimport ShiftSchedulesYears from './shiftSchedulesGroups';\r\nimport { DocumentGroupModel } from '../../api/interfaces';\r\nimport { group } from 'console';\r\n\r\nconst withStylesFunction = withStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n /* flex: \"1\" */\r\n },\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n },\r\n tableCellBody: {\r\n color: theme.palette.text.secondary,\r\n padding: '0px 16px'\r\n },\r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },\r\n tabsRoot: {\r\n paddingLeft: theme.spacing(2),\r\n borderBottom: `1px solid ${theme.palette.text.secondary}`\r\n },\r\n tabRoot: {\r\n minWidth: '90px'\r\n },\r\n tabIndicator: {\r\n height: '3px'\r\n },\r\n tabTextColorPrimary: {\r\n '&.Mui-disabled': {\r\n color: theme.palette.primary.main\r\n },\r\n '&.Mui-selected': {\r\n color: theme.palette.text.primary\r\n }\r\n },\r\n infoTextRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none',\r\n padding: theme.spacing(2)\r\n },\r\n /* warningTextRoot: {\r\n marginTop: theme.spacing(2), \r\n }, */\r\n infoTextActionIconRoot: {\r\n margin: '0px 5px'\r\n },\r\n infoTextActionIcon: {\r\n fontSize: '1.2rem'\r\n }\r\n })\r\n);\r\n\r\ntype ShiftSchedulesContainerStateProps = DeepReadonly<{\r\n documents: Document[];\r\n groups: DocumentGroupModel[];\r\n selectedGroupId: number;\r\n}>;\r\n\r\ntype ShiftSchedulesContainerDispatchProps = {\r\n getGroupsAction: typeof actions.getGroupsAsync.request;\r\n downloadDocumentAction: typeof actions.downloadDocumentAsync.request;\r\n selectGroup: typeof actions.selectGroup;\r\n};\r\n\r\ntype ShiftSchedulesContainerProps = { classes: any } & ShiftSchedulesContainerStateProps & ShiftSchedulesContainerDispatchProps;\r\n\r\ntype ShiftSchedulesContainerClassKey = 'root';\r\n\r\nclass ShiftSchedulesContainer extends React.Component {\r\n componentDidMount(): void {\r\n this.props.getGroupsAction();\r\n }\r\n\r\n render(): React.ReactElement {\r\n return (\r\n
\r\n \r\n Harmonogramy směn\r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState): ShiftSchedulesContainerStateProps => {\r\n return {\r\n documents: selectDocuments(state),\r\n groups: state.shiftSchedules.groups,\r\n selectedGroupId: state.shiftSchedules.selectedGroupId\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): ShiftSchedulesContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n getGroupsAction: actions.getGroupsAsync.request,\r\n downloadDocumentAction: actions.downloadDocumentAsync.request,\r\n selectGroup: actions.selectGroup\r\n },\r\n dispatch\r\n );\r\n\r\nexport default withStylesFunction(connect(mapStateToProps, mapDispatchToProps)(ShiftSchedulesContainer));\r\n","import { PayrollModel } from '../../api/interfaces';\r\nimport { PayrollTicket } from './types';\r\n\r\nexport const payrollModelsToPayrollTicketMapper = (payrolls: PayrollModel[]): PayrollTicket[] => {\r\n return payrolls.map(payroll => {\r\n return {\r\n id: payroll.id,\r\n name: payroll.name,\r\n year: payroll.year,\r\n month: payroll.month,\r\n period: `${payroll.month.toLocaleString('cs-CZ', {minimumIntegerDigits: 2, useGrouping:false})}/${payroll.year}`\r\n } as PayrollTicket;\r\n });\r\n};\r\n","import { all, put, takeEvery, select, ForkEffect, AllEffect, PutEffect, SelectEffect } from 'redux-saga/effects';\r\nimport { ActionType } from 'typesafe-actions';\r\n\r\nimport { getPeriodsAsync, getPayrollsAsync, selectYear, downloadPayrollAsync, getPayrollPinCodeAsync } from './actions';\r\nimport apiClientInstance from '../../api/apiClientInstance';\r\nimport { PayrollModel } from '../../api/interfaces';\r\nimport { BaseDataResponse, BaseResponse } from '../../api/responses';\r\nimport { selectSelectedYear, selectPayrolTicketsByYear, selectPayrollById } from './selectors';\r\nimport { payrollModelsToPayrollTicketMapper } from './mappers';\r\nimport { PayrollTicket } from './types';\r\nimport { DownloadFileResponse } from '../downloadFile';\r\nimport { downloadFile } from '../downloadFile/actions';\r\nimport { addSuccessAlertWithTenantFilter } from '../alerts';\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([\r\n yield takeEvery(getPeriodsAsync.request, getPeriodsRequest),\r\n yield takeEvery(getPeriodsAsync.success, getPeriodSuccess),\r\n yield takeEvery(getPayrollsAsync.request, getPayrollsRequest),\r\n yield takeEvery(selectYear, selectedYearChanged),\r\n yield takeEvery(downloadPayrollAsync.request, downloadPayrollRequest),\r\n yield takeEvery(getPayrollPinCodeAsync.request, getPayrollPinCodeRequest)\r\n ]);\r\n}\r\n\r\ntype GetPeriodsRequestGeneratorType =\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getPeriodsRequest(\r\n action: ReturnType\r\n): Generator> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getPeriodsRequest');\r\n const response: BaseDataResponse = yield apiClientInstance.Payrolls.getPeriodsAsync();\r\n if (response.resultCode === 0) {\r\n yield put(getPeriodsAsync.success(response.data));\r\n } else {\r\n yield put(getPeriodsAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getPeriodsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype GetPeriodSuccessGeneratorType =\r\n | SelectEffect\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\ntype GetPeriodSuccessGeneratorReturnType = PutEffect> | void;\r\n\r\nfunction* getPeriodSuccess(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getPeriodSuccess');\r\n const years = action.payload;\r\n if (years.length === 0) {\r\n return;\r\n }\r\n\r\n const selectedYear = yield select(selectSelectedYear);\r\n const existPayrollsForSelectedYear = !!years.find(year => year === selectedYear);\r\n if (existPayrollsForSelectedYear) {\r\n // Rok exisutje nactu pro nej pasky - vyvolam akci\r\n yield put(getPayrollsAsync.request(selectedYear));\r\n return;\r\n }\r\n\r\n const currentYear = new Date().getFullYear();\r\n if (selectedYear === currentYear) {\r\n // Pro aktualni rok neni zadny zaznam ale pasky mohou byt pro rok predchozi, pri prechodu roku 2019 -> 2020\r\n // Aktualni je 2020 ale pasky mohou byt pro 2019\r\n\r\n const previousYear = currentYear - 1;\r\n const existPayrollsForPreviousYear = !!years.find(year => year === previousYear);\r\n if (existPayrollsForPreviousYear) {\r\n yield put(selectYear(previousYear));\r\n return;\r\n }\r\n }\r\n } catch (error) {\r\n yield put(getPeriodsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype GetPayrollsRequestGeneratorType =\r\n | Promise>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getPayrollsRequest(\r\n action: ReturnType\r\n): Generator> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getPayrollsRequest');\r\n\r\n const response: BaseDataResponse = yield apiClientInstance.Payrolls.getAsync(action.payload);\r\n if (response.resultCode === 0) {\r\n yield put(getPayrollsAsync.success({ payrolls: payrollModelsToPayrollTicketMapper(response.data), year: action.payload }));\r\n } else {\r\n yield put(getPayrollsAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getPayrollsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype SelectedYearChangedGeneratorType =\r\n | SelectEffect\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* selectedYearChanged(action: ReturnType): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('selectedYearChanged');\r\n\r\n const payrolls: PayrollTicket[] = yield select(selectPayrolTicketsByYear(action.payload));\r\n if (payrolls.length === 0) {\r\n // Nejsou zadne listky zkusi je nacist\r\n yield put(getPayrollsAsync.request(action.payload));\r\n }\r\n } catch (error) {\r\n yield put(getPayrollsAsync.failure(error));\r\n }\r\n}\r\n\r\ntype DownloadPayrollRequestGeneratorType =\r\n | SelectEffect\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* downloadPayrollRequest(\r\n action: ReturnType\r\n): Generator {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('downloadPayrollRequest');\r\n\r\n const payroll: PayrollTicket = yield select(selectPayrollById(action.payload));\r\n const blob: Blob = yield apiClientInstance.Payrolls.getPdfAsync(action.payload);\r\n if (blob !== undefined) {\r\n const downloadFileResponse: DownloadFileResponse = {\r\n data: blob,\r\n filename: payroll.name\r\n };\r\n yield put(downloadPayrollAsync.success());\r\n yield put(downloadFile(downloadFileResponse));\r\n } else {\r\n yield put(downloadPayrollAsync.failure(new Error('Stažení souboru se nezdařilo.')));\r\n }\r\n } catch (error) {\r\n yield put(downloadPayrollAsync.failure(error));\r\n }\r\n}\r\n\r\ntype GetPayrollPinCodeRequestGeneratorType =\r\n | Promise\r\n | PutEffect>\r\n | PutEffect>;\r\n\r\nfunction* getPayrollPinCodeRequest(\r\n action: ReturnType\r\n): Generator, void, BaseResponse> {\r\n // TODO: : Generator {\r\n try {\r\n console.warn('getPayrollPinCodeRequest');\r\n\r\n const response: BaseResponse = yield apiClientInstance.Payrolls.getPdfPinCodeAsync(action.payload);\r\n if (response.resultCode === 0) {\r\n yield put(getPayrollPinCodeAsync.success());\r\n yield addSuccessAlertWithTenantFilter('Heslo bylo úspěšně odesláno.', 'genericSuccess');\r\n } else {\r\n yield put(getPayrollPinCodeAsync.failure(new Error(response.resultReason)));\r\n }\r\n } catch (error) {\r\n yield put(getPayrollPinCodeAsync.failure(error));\r\n }\r\n}\r\n","import React, { memo } from 'react';\r\nimport { makeStyles, createStyles, Theme, Table, TableHead, TableRow, TableCell, TableBody, Box, Typography } from '@material-ui/core';\r\nimport { StyleRules, ClassNameMap } from '@material-ui/core/styles/withStyles';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport Document from '../../models/document';\r\nimport { Icon } from '../../icons';\r\n\r\nconst useStyles = makeStyles(\r\n (theme: Theme): StyleRules =>\r\n createStyles({\r\n root: {},\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n /* tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n }, */\r\n tableCellBody: {\r\n color: theme.palette.text.secondary\r\n /* padding: '0px 16px' */\r\n } /* \r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },*/,\r\n tableRowAnyItem: { padding: '16px' },\r\n actionIconRoot: {\r\n '&:not(:last-of-type)': {\r\n marginRight: '15px'\r\n }\r\n },\r\n actionIcon: {\r\n fontSize: '1.2rem'\r\n },\r\n publicFromColumn: {\r\n minWidth: '120px'\r\n }\r\n })\r\n);\r\n\r\ntype TableRowClassKey = 'root' | 'listRoot' | 'tableRowAnyItem' | 'tableCellBody' | 'table' | 'actionIconRoot' | 'actionIcon' | 'publicFromColumn';\r\n\r\ntype PayrollTicketsTableProps = DeepReadonly<{\r\n rows: Document[];\r\n\r\n downloadDocumentAction: (documentId: number) => void;\r\n}>;\r\n\r\nconst getTableRows = (\r\n rows: DeepReadonly,\r\n selected: number,\r\n classes: ClassNameMap,\r\n handleClick: (event: React.MouseEvent, id: number) => void,\r\n handleActionDownloadDocument: (documentId: number) => void\r\n): React.ReactElement[] | React.ReactElement => {\r\n if (rows.length === 0) {\r\n return (\r\n \r\n \r\n Aktuálně nejsou k dispozici žádné dokumenty ke stažení.\r\n \r\n \r\n );\r\n }\r\n\r\n return rows.map(row => (\r\n handleClick(event, row.id)}\r\n >\r\n \r\n {row.name}\r\n \r\n \r\n {row.publicFrom}\r\n \r\n \r\n \r\n handleActionDownloadDocument(row.id)\r\n }}\r\n />\r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nconst DocumentsTable: React.FunctionComponent = memo(props => {\r\n console.warn('DocumentsTable');\r\n const classes = useStyles();\r\n const defaultSelectedValue = props.rows[0] ? props.rows[0].id : -1;\r\n const [selected, setSelected] = React.useState(defaultSelectedValue);\r\n const handleClick = (event: React.MouseEvent, id: number): void => {\r\n setSelected(id);\r\n };\r\n\r\n const rows = getTableRows(props.rows, selected, classes, handleClick, props.downloadDocumentAction);\r\n\r\n return (\r\n \r\n \r\n \r\n Název\r\n Datum\r\n Akce\r\n \r\n \r\n {rows}\r\n
\r\n );\r\n});\r\n\r\nexport default DocumentsTable;\r\n","import React from 'react';\r\nimport { Typography, Paper, createStyles, Theme, withStyles } from '@material-ui/core';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { DeepReadonly } from 'utility-types';\r\n\r\nimport { ApplicationState } from '../../store/rootReducer';\r\nimport DocumentsTable from './documentsTable';\r\nimport * as actions from './actions';\r\n\r\nimport { selectDocuments } from './selectors';\r\nimport Document from '../../models/document';\r\n\r\nconst withStylesFunction = withStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n /* flex: \"1\" */\r\n },\r\n listRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none'\r\n },\r\n table: {},\r\n tableCellRoot: {\r\n borderBottomColor: theme.palette.listLine\r\n },\r\n tableCellBody: {\r\n color: theme.palette.text.secondary,\r\n padding: '0px 16px'\r\n },\r\n tableCellHead: {\r\n color: theme.palette.text.primary\r\n },\r\n tabsRoot: {\r\n paddingLeft: theme.spacing(2),\r\n borderBottom: `1px solid ${theme.palette.text.secondary}`\r\n },\r\n tabRoot: {\r\n minWidth: '90px'\r\n },\r\n tabIndicator: {\r\n height: '3px'\r\n },\r\n tabTextColorPrimary: {\r\n '&.Mui-disabled': {\r\n color: theme.palette.primary.main\r\n },\r\n '&.Mui-selected': {\r\n color: theme.palette.text.primary\r\n }\r\n },\r\n infoTextRoot: {\r\n marginTop: theme.spacing(2),\r\n borderRadius: '0px',\r\n boxShadow: 'none',\r\n padding: theme.spacing(2)\r\n },\r\n /* warningTextRoot: {\r\n marginTop: theme.spacing(2), \r\n }, */\r\n infoTextActionIconRoot: {\r\n margin: '0px 5px'\r\n },\r\n infoTextActionIcon: {\r\n fontSize: '1.2rem'\r\n }\r\n })\r\n);\r\n\r\ntype DocumentsContainerStateProps = DeepReadonly<{\r\n documents: Document[];\r\n}>;\r\n\r\ntype DocumentsContainerDispatchProps = {\r\n getDocumentsAction: typeof actions.getDocumentsAsync.request;\r\n downloadDocumentAction: typeof actions.downloadDocumentAsync.request;\r\n};\r\n\r\ntype DocumentsContainerProps = { classes: any } & DocumentsContainerStateProps & DocumentsContainerDispatchProps;\r\n\r\ntype DocumentsContainerClassKey = 'root';\r\n\r\nclass DocumentsContainer extends React.Component {\r\n componentDidMount(): void {\r\n this.props.getDocumentsAction();\r\n }\r\n\r\n render(): React.ReactElement {\r\n return (\r\n
\r\n \r\n Informace pro zaměstnance\r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState): DocumentsContainerStateProps => {\r\n return {\r\n documents: selectDocuments(state)\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): DocumentsContainerDispatchProps =>\r\n bindActionCreators(\r\n {\r\n getDocumentsAction: actions.getDocumentsAsync.request,\r\n downloadDocumentAction: actions.downloadDocumentAsync.request,\r\n },\r\n dispatch\r\n );\r\n\r\nexport default withStylesFunction(connect(mapStateToProps, mapDispatchToProps)(DocumentsContainer));\r\n","module.exports = __webpack_public_path__ + \"static/media/cezep_payrollTicket_pattern_50.6b9ff20b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/cezep_payrollTicket_pattern_EN_50.1f352e30.jpg\";","module.exports = __webpack_public_path__ + \"static/media/lm_payrollTicket_pattern_50.e48779fb.jpg\";","module.exports = __webpack_public_path__ + \"static/media/lm_payrollTicket_pattern_EN_50.e48779fb.jpg\";","module.exports = __webpack_public_path__ + \"static/media/cez_ep.1d3520d1.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAABQBAMAAAA951BkAAAAKlBMVEUAAAAAAAADBAQWYS0WYS0WYS0BAQEDBAQAAQEAAAADBAQAAAADBAQWYS2Bh7BPAAAADHRSTlPF/c3RgTIahwBGQoXRkJq8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE00lEQVRYhb2YPW/bOBiAqSXQQYu9GBH4B4ogP6BLth6QJdPhgCwF4gyGguCWG64eMjhtqr6yFnMxFOQPBEWGaDEkeOtwAQxtTbrlvxxJSfy2jNrFEfmgROp5Xz6kaCYI9PKxYuXfT6+sPDc3/wE4P6irN7zh9dR4DJBx/cA54/dq9y/foviwGvN6HeD17SbOIedER3X3Y37vqjqIq+pbxOondcPLBs6UY54+vyrdv1AGy/MNu2gCfN/A0fQ0gq6qasVgT1KPLcjg6Hp4d5biGM7ZaIUeW5DB0fVwQSzFVcwa3gg9cirdHEMPF8QRf1erh+pe6LEF6RxDTx32fMVGez89UPS0U7mGY+rhguL7KTPNigzw+qOLY+ppwtKh1ZwT2fDcwbH0NCuITdY9q9QB6p/Reo7+comwNJ0rnlCt5/nEIUjjaHreHrWCPlarKU+oDvDyySFI42h6TkXYKWU8PAk9xzcOQSpH0/O9jU4bvtK2sdBzKn6v4Wh6XsAKK268twWpHF0PWGFFgjJTJ0fXI3SIdnHdjtzNMfTYYWV+tiCFY+gBU5ByKYbu4ph6zLBKejeWIIVj6jEFKVe2IMmx9JiC1OxOTEGSY+kxBGkXliDJsfXoKWjJWWtUcmw9uiBNVmwKEhyHHj0HffLMNSo4Dj1a+sZI/uKXP2yOS4+ahLG4TUGC49Kjpm8OpO4YmRynHjULI4DJbTlOPUr61kQbm2vLceuRaVhbjgFuOW49Mn37M0Lvijr1SEFWAGNzRZ16RPqOjwi9L+rW06b/hxXA2DtQt55W0JGlxxCEuvVoRwzjMKclj7r1aEce44ihba5ogx7lCGYedrXs0QY96plH16NvrmiDHlWQedZV00cb9CiCzCOq9mqgTXqkIOtvAXVzRZv0SEHHZoP60jFOpx4pyAqgbq6M06lHCLL0aIIYp1tPK8gOAHHdEjWcbj321uxqQUIP/MmLo/dn3hA5WuTmilo9q69bFCkItXq2KtIFavVsVZq5OWac6fYYZa2gRs92Ra5dtIseRRDaRY+yeNEueqigdnNFu+hRBKGHnThV1Gyu6HA3TisIfditjG/esfK7+f+Wbcv/wrkYzX8JJ+0XP8FJM0geF3AXwd1FCZcZ3LGv+LGEOzSPy6SAW0hK9aFZ5uJcF0CCHuQFeAv6K4LcB6+YYC/Ll70ET0IIYILVh8g6DoI88/y4X+Rz+kA+oDWSnfl5lt/iSY9yhmz8SQRxBJDVHFaFEZUoOQmGYYFCqmMYDOi9MOn5XpQOao6XBZDndPAeJl4PSD9jnNjDkPQwdRiqnGs/wJNHn5tFKEW+B2mYLzEdVzAIAA0LSAcjspfPe5MB46RhDEl/DmSBdA7OhzM6NJptkA8faw7NDE/2cBDjmU+jR6QYLsMkZJykRzOkEjxmVB0XJvnE5+sgGHqX+5QzyOeIcvw8SPp9Ot5ZSIprysHczyxsOZnwTKcpC69xw6Fq032STZjnC3pziNP9hFqIESlI2eTDCIyTR147rqCk856EaZju1xxWO2PznhHq2U/xtQ/U6BIT7I1Q7pPbHiRL+k0XBQkw8et1uCwTtIgXccGXHEAZL5IFX4fR5bxMsrhkixMSVBBEF2oQXY5+40s3LtO95LE4y372PSVr35NfxfkPliqxag7Ma4gAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/IstokWeb-Regular.298ea385.ttf\";","export * from './types';\r\nexport { default as downloadFileSaga } from './sagas';\r\n","export default class BaseResponse {\r\n public resultCode: number;\r\n public resultReason: string;\r\n public httpStatusCode: number;\r\n\r\n constructor() {\r\n this.resultCode = 0;\r\n this.resultReason = '';\r\n this.httpStatusCode = 0;\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\nimport { BaseResponse } from '../responses';\r\n\r\nexport default class BaseJsonClient {\r\n protected readonly axiosInstance: AxiosInstance;\r\n\r\n protected readonly modelPath: string;\r\n\r\n constructor(axiosInstance: AxiosInstance, modelPath: string) {\r\n this.axiosInstance = axiosInstance;\r\n this.modelPath = modelPath;\r\n }\r\n\r\n protected async getHttpAsync(route: string, query: string): Promise {\r\n const config = {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-type': 'application/json'\r\n }\r\n };\r\n\r\n const axiosResponse = await this.axiosInstance.get(this.composeUrl(route, query), config);\r\n return axiosResponse.data as TResponse;\r\n }\r\n\r\n protected async putHttpAsync(route: string, data: TData): Promise {\r\n const config = {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-type': 'application/json'\r\n }\r\n };\r\n\r\n const axiosResponse = await this.axiosInstance.put(this.composeUrl(route), data, config);\r\n return axiosResponse.data as TResponse;\r\n }\r\n\r\n protected async postHttpAsync(route: string, data: TData): Promise {\r\n const config = {\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-type': 'application/json'\r\n }\r\n };\r\n\r\n const axiosResponse = await this.axiosInstance.post(this.composeUrl(route), data, config);\r\n return axiosResponse.data as TResponse;\r\n }\r\n\r\n public composeUrl(route: string, query = ''): string {\r\n let urlBuilder: string;\r\n\r\n urlBuilder = this.modelPath;\r\n if (route) {\r\n urlBuilder += '/' + route;\r\n }\r\n\r\n if (query) {\r\n urlBuilder += '?' + query;\r\n }\r\n\r\n return urlBuilder;\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseResponse } from '../responses';\r\nimport { IAuthenticatedRequestHandler, IErrorHandler } from '../abstractions';\r\nimport BaseJsonClient from './baseJsonClient';\r\n\r\nexport default class BaseAuthenticatedClient extends BaseJsonClient {\r\n protected readonly authenticatedRequestHandler: IAuthenticatedRequestHandler;\r\n protected readonly errorHandler: IErrorHandler;\r\n\r\n constructor(\r\n authenticatedRequestHandler: IAuthenticatedRequestHandler,\r\n errorHandler: IErrorHandler,\r\n axiosInstance: AxiosInstance,\r\n modelPath: string\r\n ) {\r\n super(axiosInstance, modelPath);\r\n\r\n this.authenticatedRequestHandler = authenticatedRequestHandler;\r\n this.errorHandler = errorHandler;\r\n }\r\n\r\n protected async getHttpAsync(route: string, query: string): Promise {\r\n try {\r\n return this.authenticatedRequestHandler.handleRequestAsync(async () => {\r\n return await super.getHttpAsync(route, query);\r\n });\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n\r\n protected async getHttpBinaryAsync(route: string, query: string): Promise {\r\n try {\r\n const config = {\r\n responseType: 'blob' as 'blob',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n };\r\n\r\n const axiosResponse = await this.axiosInstance.get(this.composeUrl(route, query), config);\r\n if (axiosResponse.status === 500) {\r\n return null;\r\n }\r\n\r\n console.warn(axiosResponse);\r\n\r\n return axiosResponse.data;\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n }\r\n\r\n protected async putHttpAsync(route: string, data: TData): Promise {\r\n try {\r\n return this.authenticatedRequestHandler.handleRequestAsync(async () => {\r\n return await super.putHttpAsync(route, data);\r\n });\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n\r\n protected async postHttpAsync(route: string, data: TData): Promise {\r\n try {\r\n return this.authenticatedRequestHandler.handleRequestAsync(async () => {\r\n return await super.postHttpAsync(route, data);\r\n });\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseClient } from '.';\r\nimport { BaseResponse } from '../responses';\r\nimport { IErrorHandler } from '../abstractions';\r\n\r\nexport default class AuthenticationClient extends BaseClient {\r\n constructor(errorHandler: IErrorHandler,axiosInstance: AxiosInstance) {\r\n super(errorHandler,axiosInstance, 'auth');\r\n }\r\n\r\n public async sendOtpAsync(identificationNumber: string): Promise {\r\n const data = { identificationNumber: identificationNumber };\r\n\r\n return await this.postHttpAsync('send-otp', data);\r\n }\r\n\r\n public async loginAsync(identificationNumber: string, otp: string): Promise {\r\n const data = { identificationNumber: identificationNumber, otp: otp };\r\n\r\n return await this.postHttpAsync('login-otp', data);\r\n }\r\n\r\n public async signOut(): Promise {\r\n const data = {};\r\n\r\n return await this.postHttpAsync('sign-out', data);\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseResponse } from '../responses';\r\nimport BaseJsonClient from './baseJsonClient';\r\nimport { IErrorHandler } from '../abstractions';\r\n\r\nexport default class BaseClient extends BaseJsonClient {\r\n protected readonly axiosInstance: AxiosInstance;\r\n protected readonly errorHandler: IErrorHandler;\r\n\r\n protected readonly modelPath: string;\r\n\r\n constructor(errorHandler: IErrorHandler, axiosInstance: AxiosInstance, modelPath: string) {\r\n super(axiosInstance, modelPath);\r\n\r\n this.errorHandler = errorHandler;\r\n this.axiosInstance = axiosInstance;\r\n this.modelPath = modelPath;\r\n }\r\n\r\n protected async getHttpAsync(route: string, query: string): Promise {\r\n try {\r\n const response = await this.errorHandler.handleRequestAsync(async () => {\r\n return await super.getHttpAsync(route, query);\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n\r\n protected async putHttpAsync(route: string, data: TData): Promise {\r\n try {\r\n const response = await this.errorHandler.handleRequestAsync(async () => {\r\n return await super.putHttpAsync(route, data);\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n\r\n protected async postHttpAsync(route: string, data: TData): Promise {\r\n try {\r\n const response = await this.errorHandler.handleRequestAsync(async () => {\r\n return await super.postHttpAsync(route, data);\r\n });\r\n\r\n return response;\r\n } catch (error) {\r\n const errorResposne = new BaseResponse();\r\n errorResposne.resultCode = -1;\r\n errorResposne.resultReason = error.message;\r\n\r\n return errorResposne as TResponse;\r\n }\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseAuthenticatedClient } from '.';\r\nimport { BaseDataResponse, BaseResponse } from '../responses';\r\nimport { PayrollModel } from '../interfaces';\r\nimport { IAuthenticatedRequestHandler, IErrorHandler } from '../abstractions';\r\n\r\nexport default class PayrollClient extends BaseAuthenticatedClient {\r\n constructor(authenticatedRequestHandler: IAuthenticatedRequestHandler, errorHandler: IErrorHandler, axiosInstance: AxiosInstance) {\r\n super(authenticatedRequestHandler, errorHandler, axiosInstance, 'payroll');\r\n }\r\n\r\n public async getAsync(year: number): Promise> {\r\n const query = `year=${year}`;\r\n\r\n return await this.getHttpAsync>('', query);\r\n }\r\n\r\n public async getPeriodsAsync(): Promise> {\r\n return await this.getHttpAsync>('periods', '');\r\n }\r\n\r\n public async getPdfAsync(payrollId: number): Promise {\r\n return await this.getHttpBinaryAsync(`${payrollId}/pdf`, '');\r\n }\r\n\r\n public async getPdfPinCodeAsync(payrollId: number): Promise {\r\n return await this.getHttpAsync(`${payrollId}/pdf/pinCode`, '');\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseAuthenticatedClient } from '.';\r\nimport { BaseDataResponse } from '../responses';\r\nimport { DocumentModel, DocumentType } from '../interfaces';\r\nimport { IAuthenticatedRequestHandler, IErrorHandler } from '../abstractions';\r\n\r\nexport default class DocumentClient extends BaseAuthenticatedClient {\r\n constructor(authenticatedRequestHandler: IAuthenticatedRequestHandler, errorHandler: IErrorHandler, axiosInstance: AxiosInstance) {\r\n super(authenticatedRequestHandler, errorHandler, axiosInstance, 'document');\r\n }\r\n\r\n public async getAsync(type: DocumentType): Promise> {\r\n return await this.getHttpAsync>('filter', `type=${type}`);\r\n }\r\n\r\n public async getByGroupAsync(groupId: number): Promise> {\r\n return await this.getHttpAsync>(`group/${groupId}`, '');\r\n }\r\n\r\n public async getPdfAsync(payrollId: number): Promise {\r\n return await this.getHttpBinaryAsync(`${payrollId}/pdf`, '');\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nimport { BaseAuthenticatedClient } from '.';\r\nimport { BaseDataResponse } from '../responses';\r\nimport { DocumentGroupModel, DocumentGroupType, DocumentType } from '../interfaces';\r\nimport { IAuthenticatedRequestHandler, IErrorHandler } from '../abstractions';\r\n\r\nexport default class DocumentGroupClient extends BaseAuthenticatedClient {\r\n constructor(authenticatedRequestHandler: IAuthenticatedRequestHandler, errorHandler: IErrorHandler, axiosInstance: AxiosInstance) {\r\n super(authenticatedRequestHandler, errorHandler, axiosInstance, 'documentGroup');\r\n }\r\n\r\n public async getAsync(type: DocumentGroupType): Promise> {\r\n return await this.getHttpAsync>('filter', `type=${type}`);\r\n }\r\n\r\n public async getPdfAsync(payrollId: number): Promise {\r\n return await this.getHttpBinaryAsync(`${payrollId}/pdf`, '');\r\n }\r\n}\r\n","import { BaseResponse } from '../responses';\r\nimport { IAuthenticatedRequestHandler } from '../abstractions';\r\n\r\nexport default class AuthenticatedRequestHandler implements IAuthenticatedRequestHandler {\r\n public async handleRequestAsync(request: () => Promise): Promise {\r\n // TODO: Udelat kontrolu zda jsou cookies a zda jsou platna, pokud ne asi redirect a integrace sagy\r\n \r\n /* if (string.IsNullOrEmpty(credentialsStorage.BearerToken))\r\n {\r\n var response = await authenticationClient.Authenticate(\r\n credentialsStorage.ClientId,\r\n credentialsStorage.ClientSecret);\r\n\r\n if (response.ResultCode != 0)\r\n {\r\n return response.ToBaseResponse() as TResponse;\r\n }\r\n\r\n // TODO - event mechanizmus by byl lepsi\r\n credentialsStorage.BearerToken = response.Data;\r\n } */\r\n\r\n return await request();\r\n }\r\n}\r\n","import { BaseResponse } from '../responses';\r\nimport { IErrorHandler } from '../abstractions';\r\n\r\nconst NETWORK_ERROR = 'network error';\r\nconst NO_INTERNET_MESSAGE = 'Server není dostupný. Zkontrolujte prosím připojení k internetu a akci opakujte.';\r\n\r\nexport default class ErrorHandler implements IErrorHandler {\r\n public async handleRequestAsync(request: () => Promise): Promise {\r\n try {\r\n const responses = await request();\r\n console.warn(responses);\r\n\r\n return responses;\r\n } catch (error) {\r\n const response = new BaseResponse() as TResponse;\r\n response.resultCode = -500;\r\n response.resultReason = 'Akce se nepodařila. Opakujte prosím akci později.';\r\n\r\n if (error.message && error.message.toLowerCase().includes(NETWORK_ERROR)) {\r\n response.resultReason = NO_INTERNET_MESSAGE;\r\n }\r\n\r\n return response;\r\n }\r\n }\r\n}\r\n","import { AxiosRequestConfig } from 'axios';\r\n\r\nimport { tenantProvider } from '../../features/tenant';\r\n\r\nexport default function tenantInterceptor(requestConfig: AxiosRequestConfig): AxiosRequestConfig {\r\n const tenant = tenantProvider.getTenant();\r\n\r\n requestConfig.headers = { ...requestConfig.headers, 'X-Tenant': tenant };\r\n\r\n return requestConfig;\r\n}\r\n","import axios, { AxiosInstance } from 'axios';\r\n\r\nimport { PayrollClient, AuthenticationClient, DocumentClient, DocumentGroupClient } from './clients';\r\nimport { AuthenticatedRequestHandler, ErrorHandler } from './handlers';\r\nimport { tenantInterceptor } from './interceptors';\r\n\r\nexport class ApiClient {\r\n private axiosInstance: AxiosInstance;\r\n\r\n constructor(baseUrl: string) {\r\n this.axiosInstance = axios.create({\r\n baseURL: baseUrl,\r\n timeout: 300000,\r\n withCredentials: true,\r\n headers: {\r\n 'Cache-Control': 'no-cache',\r\n Pragma: 'no-cache',\r\n Expires: 'Sat, 01 Jan 2000 00:00:00 GMT'\r\n //ClientName: clientName,\r\n //TimeZoneIana: this.getTimeZoneIana()\r\n },\r\n validateStatus: (status: number) => true\r\n });\r\n\r\n this.registerInterceptors();\r\n\r\n const authenticatedRequestHandler = new AuthenticatedRequestHandler();\r\n const errorHandler = new ErrorHandler();\r\n\r\n this.Payrolls = new PayrollClient(authenticatedRequestHandler, errorHandler, this.axiosInstance);\r\n this.Documents = new DocumentClient(authenticatedRequestHandler, errorHandler, this.axiosInstance);\r\n this.DocumentGroups = new DocumentGroupClient(authenticatedRequestHandler, errorHandler, this.axiosInstance);\r\n this.Authentication = new AuthenticationClient(errorHandler, this.axiosInstance);\r\n }\r\n\r\n public Authentication: AuthenticationClient;\r\n\r\n public Payrolls: PayrollClient;\r\n\r\n public Documents: DocumentClient;\r\n\r\n public DocumentGroups: DocumentGroupClient;\r\n\r\n private registerInterceptors(): void {\r\n this.axiosInstance.interceptors.request.use(tenantInterceptor, error => {\r\n return Promise.reject(error);\r\n });\r\n /* this.axiosInstance.interceptors.response.use(\r\n response => stringToDateInterceptor.execute(response),\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n );\r\n */\r\n }\r\n}\r\n","import { ApiClient } from './apiClient';\r\nimport apiConfig from '../configuration/api';\r\n\r\nconst apiClientInstance = new ApiClient(apiConfig.baseUrl);\r\n\r\nexport default apiClientInstance;\r\n","// export const baseUrl = \"https://dev.api.zamestnanec.online/api/v1\"\r\n\r\n//let baseUrl = 'https://localhost:44397/api/v1';\r\n//let baseUrl = 'https://api.dev.zamestnanec.online/api/v1';\r\nlet baseUrl = 'http://localhost:5000/api/v1';\r\nif (process.env.REACT_APP_BASE_API_URL) {\r\n baseUrl = process.env.REACT_APP_BASE_API_URL;\r\n}\r\n\r\nexport default { baseUrl };\r\n","export * from './library';\r\nexport { Icon } from '../components/icon';\r\n","import { ActionType } from 'typesafe-actions';\r\nimport uuidV4 from 'uuid/v4';\r\n\r\nimport * as actions from './actions';\r\n\r\nexport type AlertType = 'info' | 'success' | 'warning' | 'error';\r\n\r\nexport class AlertMessage {\r\n type: AlertType;\r\n message: string;\r\n timeout?: number;\r\n \r\n constructor(init: AlertMessage) {\r\n this.type = 'info';\r\n this.message = '';\r\n\r\n Object.assign(this, init);\r\n }\r\n}\r\n\r\nexport class AlertModel extends AlertMessage {\r\n id: string;\r\n component?: React.ComponentType;\r\n componentProps?: any;\r\n\r\n constructor(init: AlertMessage, component?: React.ComponentType, componentProps?: any) {\r\n super(init);\r\n\r\n this.id = uuidV4();\r\n this.component = component;\r\n this.componentProps = componentProps;\r\n }\r\n}\r\n\r\nexport type AlertsState = {\r\n alerts: AlertModel[];\r\n};\r\n\r\nexport type AlertsAction = ActionType;\r\n","import { createAction } from 'typesafe-actions';\r\nimport { put } from 'redux-saga/effects';\r\n\r\nimport { AlertModel, AlertMessage } from './types';\r\nimport { NotificationTypes } from '../notifications/types';\r\nimport { isNotificationAllowed } from '../notifications';\r\n\r\nexport const addAlert = createAction('alert/ADD_ALERT')();\r\n\r\nexport const removeAlert = createAction('alert/REMOVE_ERROR')();\r\n\r\nexport const clearAlerts = createAction('alert/CLEAR_ALERTS')();\r\n\r\nconst addErrorAlert = (message: string): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'error' }));\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nconst addSuccessAlert = (message: string): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'success' }));\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nconst addInfoAlerWithCustomComponent = (message: string, component: React.ComponentType, componentProps: any): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'info', timeout: 30000 }), component, componentProps);\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nconst addErrorAlerWithCustomComponent = (message: string, component: React.ComponentType, componentProps: any): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'error' }), component, componentProps);\r\n\r\n return addAlert(alert);\r\n};\r\n","import { AlertModel, AlertMessage } from './types';\r\nimport { addAlert } from './actions';\r\n\r\nexport const addErrorAlert = (message: string): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'error' }));\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nexport const addSuccessAlert = (message: string): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'success' }));\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nexport const addInfoAlerWithCustomComponent = (\r\n message: string,\r\n component: React.ComponentType,\r\n componentProps: any\r\n): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'info', timeout: 30000 }), component, componentProps);\r\n\r\n return addAlert(alert);\r\n};\r\n\r\nconst addErrorAlerWithCustomComponent = (message: string, component: React.ComponentType, componentProps: any): ReturnType => {\r\n const alert = new AlertModel(new AlertMessage({ message, type: 'error' }), component, componentProps);\r\n\r\n return addAlert(alert);\r\n};\r\n","import { put } from \"redux-saga/effects\";\r\nimport { isNotificationAllowed , NotificationTypes} from \"../notifications\";\r\nimport { addErrorAlert, addInfoAlerWithCustomComponent, addSuccessAlert } from \"./actions.internal\";\r\n\r\nexport function* addErrorAlertWithTenantFilter(message: string, messageType: NotificationTypes) {\r\n const isAllowed = isNotificationAllowed(messageType);\r\n if (!isAllowed) {\r\n return;\r\n }\r\n\r\n yield put(addErrorAlert(message));\r\n}\r\n\r\nexport function* addInfoAlerWithCustomComponentWithTenantFilter(\r\n message: string,\r\n component: React.ComponentType,\r\n componentProps: any,\r\n messageType: NotificationTypes\r\n) {\r\n const isAllowed = isNotificationAllowed(messageType);\r\n if (!isAllowed) {\r\n return;\r\n }\r\n\r\n yield put(addInfoAlerWithCustomComponent(message, component, componentProps));\r\n}\r\n\r\nexport function* addSuccessAlertWithTenantFilter(\r\n message: string, \r\n messageType: NotificationTypes\r\n) {\r\n const isAllowed = isNotificationAllowed(messageType);\r\n if (!isAllowed) {\r\n return;\r\n }\r\n\r\n yield put(addSuccessAlert(message));\r\n}\r\n\r\n","export const alertAutoCloseConfig = {\r\n timeout: 4000,\r\n\r\n autoCloseInfo: true,\r\n autoCloseSuccess: true,\r\n autoCloseWarning: true,\r\n autoCloseError: false,\r\n};\r\n","import React from 'react';\r\nimport { Collapse } from '@material-ui/core';\r\nimport MuiAlert from '@material-ui/lab/Alert';\r\n\r\nimport { AlertModel } from './types';\r\nimport { alertAutoCloseConfig } from '../../configuration/alerts';\r\n\r\nconst initialState = { isAlertVisible: true };\r\n\r\n/* type AlertsContainerClassKey = 'root' | 'closeButton';\r\n */\r\ntype AlertState = Readonly;\r\n\r\ntype AlertProps = {\r\n alert: AlertModel;\r\n autoCloseConfig: typeof alertAutoCloseConfig;\r\n canClose: boolean;\r\n /* classes: ClassNameMap;\r\n */\r\n onClose(id: string): void;\r\n};\r\n\r\nclass Alert extends React.Component {\r\n timer: NodeJS.Timeout | undefined;\r\n\r\n static defaultProps = {\r\n autoCloseConfig: alertAutoCloseConfig,\r\n canClose: true\r\n };\r\n\r\n readonly state: AlertState = initialState;\r\n\r\n constructor(props: AlertProps) {\r\n super(props);\r\n\r\n this.onClose = this.onClose.bind(this);\r\n this.onHide = this.onHide.bind(this);\r\n }\r\n\r\n componentDidMount(): void {\r\n const isAlertTimeout = this.props.alert.timeout && this.props.alert.timeout > 0;\r\n\r\n if (\r\n (this.props.alert.type === 'error' && this.props.autoCloseConfig.autoCloseError) ||\r\n (this.props.alert.type === 'info' && this.props.autoCloseConfig.autoCloseInfo) ||\r\n (this.props.alert.type === 'warning' && this.props.autoCloseConfig.autoCloseWarning) ||\r\n (this.props.alert.type === 'success' && this.props.autoCloseConfig.autoCloseSuccess)\r\n ) {\r\n this.timer = setTimeout(this.onHide, isAlertTimeout ? (this.props.alert.timeout as number) : this.props.autoCloseConfig.timeout);\r\n }\r\n }\r\n\r\n componentWillUnmount(): void {\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n }\r\n\r\n onHide(): void {\r\n this.setState({ isAlertVisible: false });\r\n }\r\n\r\n onClose(): void {\r\n this.props.onClose(this.props.alert.id);\r\n }\r\n\r\n render(): React.ReactElement {\r\n const alert = this.props.alert;\r\n\r\n return (\r\n \r\n \r\n {this.props.alert.component ? : this.props.alert.message}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n/* export default withStylesFunction(Alert);\r\n */\r\n\r\nexport default Alert;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators, Dispatch } from 'redux';\r\nimport { withStyles, Theme } from '@material-ui/core/styles';\r\nimport { ClassNameMap } from '@material-ui/core/styles/withStyles';\r\n\r\nimport * as actions from './actions';\r\nimport { default as Alert } from './alert';\r\nimport { AlertModel } from './types';\r\nimport { alertAutoCloseConfig } from '../../configuration/alerts';\r\nimport { ApplicationState } from '../../store/rootReducer';\r\n\r\nconst withStylesFunction = withStyles(({ palette, spacing, paddings }: Theme) => ({\r\n root: {\r\n marginBottom: spacing(2),\r\n '& > * + *': {\r\n marginTop: spacing(1)\r\n }\r\n }\r\n}));\r\n\r\ntype AlertsContainerClassKey = 'root';\r\n\r\ntype AlertsContainerProps = {\r\n autoCloseConfig: typeof alertAutoCloseConfig;\r\n classes: ClassNameMap;\r\n} & AlertsContainerStateProps &\r\n AlertsContainerDispatchProps;\r\n\r\ntype AlertsContainerStateProps = {\r\n alerts: AlertModel[];\r\n};\r\n\r\ntype AlertsContainerDispatchProps = {\r\n removeAlert(id: string): void;\r\n clearAlerts(): void;\r\n};\r\n\r\nclass AlertsContainer extends React.Component {\r\n static defaultProps = {\r\n autoCloseConfig: alertAutoCloseConfig\r\n };\r\n\r\n componentWillUnmount(): void {\r\n this.clearAlerts();\r\n }\r\n\r\n removeAlert = (alertId: string): void => {\r\n this.props.removeAlert(alertId);\r\n };\r\n\r\n clearAlerts = (): void => {\r\n this.props.clearAlerts();\r\n };\r\n\r\n render(): React.ReactElement {\r\n const alerts = this.props.alerts.map(alert => (\r\n \r\n ));\r\n\r\n return
{alerts}
;\r\n }\r\n}\r\n\r\nconst mapStateToProps = ({ alerts }: ApplicationState): AlertsContainerStateProps => {\r\n return {\r\n alerts: alerts.alerts\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch): AlertsContainerDispatchProps => {\r\n return {\r\n removeAlert: bindActionCreators(actions.removeAlert, dispatch),\r\n clearAlerts: bindActionCreators(actions.clearAlerts, dispatch)\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withStylesFunction(AlertsContainer));\r\n","import { Reducer } from \"redux\";\r\nimport { getType } from \"typesafe-actions\";\r\n\r\nimport * as actions from \"./actions\";\r\nimport { AlertsState, AlertsAction } from \"./types\";\r\n\r\nexport const initialState: AlertsState = {\r\n alerts: []\r\n};\r\n\r\n\r\nconst reducer: Reducer = (state: AlertsState = initialState, action: AlertsAction): AlertsState => {\r\n switch (action.type) {\r\n case getType(actions.addAlert): {\r\n return {\r\n ...state,\r\n alerts: [...state.alerts, action.payload]\r\n };\r\n }\r\n\r\n case getType(actions.removeAlert): {\r\n const i = state.alerts\r\n .map(a => {\r\n return a.id;\r\n })\r\n .indexOf(action.payload);\r\n return {\r\n ...state,\r\n alerts: [...state.alerts.slice(0, i), ...state.alerts.slice(i + 1)]\r\n };\r\n }\r\n\r\n case getType(actions.clearAlerts): {\r\n return {\r\n ...state,\r\n alerts: []\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default reducer;\r\n","export * from './types';\r\nexport * from './generators';\r\n\r\nexport { clearAlerts } from './actions';\r\nexport { default as AlertsContainer } from './alertsContainer';\r\nexport { default as alertsReducer, initialState as alertsInitialState } from './reducer';\r\n","import { createAsyncAction, createAction } from 'typesafe-actions';\r\n\r\nimport { User } from './types';\r\n\r\nexport const loadAuthenticatedUserFormStorageAsync = createAsyncAction(\r\n 'authentication/LOAD_AUTHENTICATED_USER_FROM_STORAGE_REQUEST',\r\n 'authentication/LOAD_AUTHENTICATED_USER_FROM_STORAGE_SUCCESS',\r\n 'authentication/LOAD_AUTHENTICATED_USER_FROM_STORAGE_FAILURE'\r\n)();\r\n\r\nexport const tryLoadAuthenticatedUserFormCredentials = createAction('authentication/TRY_LOAD_AUTHENTICATED_USER_FROM_CREDENTIALS')();\r\n\r\nexport const setAuthenticatedUserFormCredentials = createAction('authentication/SET_AUTHENTICATED_USER_FROM_CREDENTIALS')();\r\n\r\n","import { createAction, createAsyncAction } from 'typesafe-actions';\r\n\r\nimport { DocumentModel } from '../../api/interfaces';\r\n\r\nexport const getDocumentsAsync = createAsyncAction(\r\n 'documents/GET_DOCUMENTS_REQUEST',\r\n 'documents/GET_DOCUMENTS_SUCCESS',\r\n 'documents/GET_DOCUMENTS_FAILURE'\r\n)();\r\n\r\nexport const downloadDocumentAsync = createAsyncAction(\r\n 'documents/DOWNLOAD_DOCUMENT_REQUEST',\r\n 'documents/DOWNLOAD_DOCUMENT_SUCCESS',\r\n 'documents/DOWNLOAD_DOCUMENT_FAILURE'\r\n)();\r\n","// https://github.com/szul/metron/blob/master/src/metron.extenders.ts\r\n\r\nArray.prototype.isEmpty = function(): boolean {\r\n if (this.length === 0) {\r\n return true;\r\n }\r\n \r\n return false;\r\n }; \r\n \r\n export default Array;\r\n ","import { combineReducers, Reducer } from 'redux';\r\nimport { connectRouter, RouterState, LocationChangeAction } from 'connected-react-router';\r\nimport { History } from 'history';\r\n\r\nimport { AuthenticationState, AuthenticationAction, authenticationReducer, authenticationInitialState } from '../features/authentication';\r\nimport { SignInState, SignInAction, signInReducer, signInInitialState } from '../features/signIn';\r\nimport { PayrollTicketsState, PayrollTicketsAction, payrollTicketsReducer, payrollInitialState } from '../features/payrollTickets';\r\nimport { ThemeState, themeReducer, themeInitialState } from '../features/themes';\r\nimport {\r\n FullPageLoadingIndicatorState,\r\n FullPageLoadingIndicatorAction,\r\n fullPageLoadingIndicatorReducer,\r\n fullPageLoadingIndicatorInitialState\r\n} from '../components/fullPageLoadingIndicator';\r\nimport { SignOutAction } from '../features/signOut';\r\nimport { ErrorsState, ErrorsAction, errorsInitialState, errorsReducer } from '../features/errors';\r\nimport { AlertsState, AlertsAction, alertsInitialState, alertsReducer } from '../features/alerts';\r\nimport { DocumentsState, DocumentsAction, documentsInitialState, documentsReducer } from '../features/documents';\r\nimport { ShiftSchedulesState, ShiftSchedulesAction, shiftSchedulesInitialState, shiftSchedulesReducer } from '../features/shiftSchedules';\r\n\r\nexport type ApplicationState = {\r\n authentication: AuthenticationState;\r\n signIn: SignInState;\r\n payrollTickets: PayrollTicketsState;\r\n theme: ThemeState;\r\n fullPageLoadingIndicator: FullPageLoadingIndicatorState;\r\n router: RouterState;\r\n errors: ErrorsState;\r\n alerts: AlertsState;\r\n documents: DocumentsState;\r\n shiftSchedules: ShiftSchedulesState;\r\n};\r\n\r\n/* export type ApplicationAction = AuthenticationAction &\r\n SignInAction &\r\n PayrollTicketsAction &\r\n SignOutAction &\r\n FullPageLoadingIndicatorAction &\r\n LocationChangeAction &\r\n ErrorsAction &\r\n AlertsAction &\r\n DocumentsAction &\r\n ShiftSchedulesAction; */\r\n\r\n/* const rootReducer = {\r\n authentication: authenticationReducer,\r\n signIn: signInReducer,\r\n payrollTickets: payrollTicketsReducer,\r\n theme: themeReducer,\r\n fullPageLoadingIndicator: fullPageLoadingIndicatorReducer\r\n} as ReducersMapObject;\r\n\r\nexport default rootReducer; */\r\n\r\nconst initialState: ApplicationState = {\r\n authentication: authenticationInitialState,\r\n signIn: signInInitialState,\r\n payrollTickets: payrollInitialState,\r\n theme: themeInitialState,\r\n fullPageLoadingIndicator: fullPageLoadingIndicatorInitialState,\r\n router: {} as RouterState,\r\n errors: errorsInitialState,\r\n alerts: alertsInitialState,\r\n documents: documentsInitialState,\r\n shiftSchedules: shiftSchedulesInitialState\r\n};\r\n\r\nconst appReducer = (history: History): Reducer =>\r\n combineReducers({\r\n authentication: authenticationReducer,\r\n signIn: signInReducer,\r\n payrollTickets: payrollTicketsReducer,\r\n theme: themeReducer,\r\n fullPageLoadingIndicator: fullPageLoadingIndicatorReducer,\r\n router: connectRouter(history),\r\n errors: errorsReducer,\r\n alerts: alertsReducer,\r\n documents: documentsReducer,\r\n shiftSchedules: shiftSchedulesReducer\r\n });\r\n\r\n/* const rootReducer = createReducer(initialState, {\r\n ...rootSignOutReducer.handlers,\r\n signIn: signInReducer,\r\n authentication: authenticationReducer,\r\n payrollTickets: payrollTicketsReducer,\r\n theme: themeReducer,\r\n fullPageLoadingIndicator: fullPageLoadingIndicatorReducer\r\n}); */\r\n\r\n/* const a = combineReducers({\r\n authentication: authenticationReducer,\r\n signIn: signInReducer,\r\n payrollTickets: payrollTicketsReducer,\r\n theme: themeReducer,\r\n fullPageLoadingIndicator: fullPageLoadingIndicatorReducer\r\n});\r\n */\r\n\r\n// TODO: no any\r\nconst rootReducer = (history: History) => (state: any, action: any) => {\r\n // when a logout action is dispatched it will reset redux state\r\n if (action.type === 'signOut/SIGN_OUT_SUCCESS') {\r\n // we keep a reference of the keys we want to maintain\r\n // other keys will be passed as undefined and this will call\r\n // reducers with an initial state\r\n\r\n state = { ...initialState, router: state.router, theme: state.theme };\r\n }\r\n\r\n return appReducer(history)(state, action);\r\n};\r\n\r\nexport default rootReducer;\r\n\r\n/* \r\nconst pageReducer = createReducer, SignInAction>(initialState.page)\r\n .handleAction(signInRequestOptAsync.success, (state, action) => SignInPageEnum.PinCode)\r\n .handleAction(signInRequestOptAsync.failure, (state, action) => SignInPageEnum.PersonalId);\r\n\r\nconst personalIdReducer = createReducer, SignInAction>(initialState.personalId)\r\n .handleAction(signInRequestOptAsync.request, (state, action) => initialState.personalId)\r\n .handleAction(signInRequestOptAsync.success, (state, action) => action.payload)\r\n .handleAction(signInRequestOptAsync.failure, (state, action) => initialState.personalId);\r\n\r\nconst errorMessageReducer = createReducer, SignInAction>(initialState.errorMessage)\r\n .handleAction(\r\n [signInValidateOptAsync.request, signInValidateOptAsync.success, signInRequestOptAsync.request, signInRequestOptAsync.success],\r\n (state, action) => initialState.errorMessage\r\n )\r\n .handleAction([signInValidateOptAsync.failure, signInRequestOptAsync.failure], (state, action) => action.payload.message);\r\n\r\nconst requestInProgressReducer = createReducer, SignInAction>(initialState.requestInProgress)\r\n .handleAction([signInValidateOptAsync.request, signInRequestOptAsync.request], (state, action) => true)\r\n .handleAction(\r\n [signInValidateOptAsync.success, signInRequestOptAsync.success, signInValidateOptAsync.failure, signInRequestOptAsync.failure],\r\n (state, action) => initialState.requestInProgress\r\n ); */\r\n\r\n/* export default combineReducers({\r\n page: pageReducer,\r\n personalId: personalIdReducer,\r\n errorMessage: errorMessageReducer,\r\n requestInProgress: requestInProgressReducer\r\n}); */\r\n","import { takeEvery, all, put, ForkEffect, AllEffect, PutEffect } from 'redux-saga/effects';\r\nimport { Action } from 'react-redux/node_modules/redux';\r\nimport { PayloadAction , ActionType} from 'typesafe-actions';\r\n\r\nimport { hideFullPageLoadingIndicator, showFullPageLoadingIndicator } from '../components/fullPageLoadingIndicator';\r\nimport { genericError } from '../features/errors';\r\n\r\nfunction* handleAsyncActionRequest(): Generator>> {\r\n yield put(showFullPageLoadingIndicator());\r\n}\r\n\r\nfunction* handleAsyncActionFailure(action: PayloadAction): Generator<\r\n PutEffect> | PutEffect>\r\n> {\r\n yield put(hideFullPageLoadingIndicator());\r\n yield put(genericError(action.payload.message))\r\n}\r\n\r\nfunction* handleAsyncActionSuccess(): Generator>> {\r\n yield put(hideFullPageLoadingIndicator());\r\n}\r\n\r\nfunction* watchSuccess(): Generator> {\r\n yield takeEvery((action: Action): ForkEffect => {\r\n return action.type && action.type.toUpperCase().endsWith('SUCCESS');\r\n }, handleAsyncActionSuccess);\r\n}\r\n\r\nfunction* watchFailure(): Generator> {\r\n yield takeEvery((action: Action) => {\r\n return action.type && action.type.toUpperCase().endsWith('FAILURE');\r\n }, handleAsyncActionFailure);\r\n}\r\n\r\nfunction* watchRequest(): Generator> {\r\n yield takeEvery((action: Action): ForkEffect => {\r\n return action.type && action.type.toUpperCase().endsWith('REQUEST');\r\n }, handleAsyncActionRequest);\r\n}\r\n\r\n// use them in parallel\r\nexport default function* rootSaga(): Generator>>> {\r\n yield all([watchFailure(), watchRequest(), watchSuccess()]);\r\n}\r\n","import { all, ForkEffect, AllEffect } from 'redux-saga/effects';\r\n\r\nimport asyncActionsSaga from './asyncActionsSaga';\r\nimport { signInSaga } from '../features/signIn';\r\nimport { signOutSaga } from '../features/signOut';\r\nimport { payrollTicketsSaga } from '../features/payrollTickets';\r\nimport { authenticationSaga } from '../features/authentication';\r\nimport { downloadFileSaga } from '../features/downloadFile';\r\nimport { themeSaga } from '../features/themes';\r\nimport { errorsSaga } from '../features/errors';\r\nimport { appSaga } from '../features/app';\r\nimport { documentsSaga } from '../features/documents';\r\nimport { shiftSchedulesSaga } from '../features/shiftSchedules';\r\n\r\nexport default function* rootSaga(): Generator | AllEffect> {\r\n yield all([\r\n errorsSaga(),\r\n asyncActionsSaga(),\r\n authenticationSaga(),\r\n signInSaga(),\r\n signOutSaga(),\r\n payrollTicketsSaga(),\r\n downloadFileSaga(),\r\n themeSaga(),\r\n appSaga(),\r\n documentsSaga(),\r\n shiftSchedulesSaga()\r\n ]);\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { createBrowserHistory } from 'history';\r\nimport { ConnectedRouter, RouterRootState } from 'connected-react-router';\r\n\r\nimport './utils/array';\r\nimport './icons/library';\r\n\r\nimport configureStore from './store/configureStore';\r\nimport { ApplicationState } from './store/rootReducer';\r\nimport ThemedAppContainer from './features/themes/themedAppContainer';\r\nimport './index.scss';\r\nimport { tenantProvider } from './features/tenant';\r\n\r\n// Create browser history to use in the Redux store\r\n// const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\n// const history = createBrowserHistory({ basename: baseUrl });\r\nconst history = createBrowserHistory();\r\nconst store = configureStore(history, {} as ApplicationState & RouterRootState);\r\n\r\nconst rootElement = document.getElementById('root');\r\nconst link = document.querySelector(\"link[rel~='icon']\") as HTMLAnchorElement;\r\nif (link) {\r\n const tenant = tenantProvider.getTenant();\r\n switch (tenant) {\r\n case 'cezep':\r\n {\r\n link.href = '/favicon.cezep.ico';\r\n }\r\n break;\r\n case 'lm':\r\n {\r\n link.href = '/favicon.lm.ico';\r\n }\r\n break;\r\n }\r\n}\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n","import { applyMiddleware,/* combineReducers, */ compose, createStore } from 'redux';\r\nimport { /* connectRouter, */ routerMiddleware as createRouterMiddleware, RouterRootState/* , LocationChangeAction */ } from 'connected-react-router';\r\nimport createSagaMiddleware from 'redux-saga';\r\nimport { History } from 'history';\r\n\r\nimport rootReducer, { ApplicationState/* , ApplicationAction */ } from './rootReducer';\r\nimport rootSaga from '../saga/rootSaga';\r\n\r\n// eslint-disable-next-line @typescript-eslint/interface-name-prefix\r\ninterface IExtendWindow extends Window {\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: any;\r\n}\r\n\r\ntype RootApplicationState = ApplicationState & RouterRootState;\r\n\r\nexport default function configureStore(history: History, initialState: RootApplicationState) {\r\n // create the saga middleware\r\n const sagaMiddleware = createSagaMiddleware();\r\n const routerMiddleware = createRouterMiddleware(history);\r\n const middleware = [sagaMiddleware, routerMiddleware];\r\n\r\n // In development, use the browser's Redux dev tools extension if installed\r\n const isDevelopment = process.env.NODE_ENV === 'development';\r\n\r\n const composeEnhancers =\r\n isDevelopment &&\r\n typeof window !== 'undefined' &&\r\n typeof window === 'object' &&\r\n ((window as unknown) as IExtendWindow).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n ? ((window as unknown) as IExtendWindow).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\r\n // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...\r\n })\r\n : compose;\r\n\r\n /* const rootReducer =combineReducers({ \r\n ...reducers, \r\n router: connectRouter(history)\r\n });\r\n\r\n const store = createStore(\r\n rootReducer,\r\n initialState,\r\n composeEnhancers(\r\n applyMiddleware(...middleware)\r\n // other store enhancers if any\r\n )\r\n ); */\r\n \r\n const store = createStore(\r\n rootReducer(history),\r\n initialState,\r\n composeEnhancers(\r\n applyMiddleware(...middleware)\r\n // other store enhancers if any\r\n )\r\n );\r\n console.log(store.getState())\r\n\r\n sagaMiddleware.run(rootSaga);\r\n\r\n return store;\r\n}\r\n","export { default as SignOutContainer } from './signOutContainer';\r\nexport * from './actions';\r\nexport * from './types';\r\nexport { default as signOutSaga } from './sagas';","export { default as FullPageLoadingIndicatorContainer } from './fullPageLoadingIndicatorContainer';\r\nexport { hideFullPageLoadingIndicator, showFullPageLoadingIndicator } from './actions';\r\nexport { default as fullPageLoadingIndicatorReducer, initialState as fullPageLoadingIndicatorInitialState } from './reducers';\r\nexport * from './types';\r\n"],"sourceRoot":""}