{"version":3,"sources":["helpers/index.js","actions/snackbarActions.js","assets/images/spinner.svg","actions/types.js","components/inputs/InputField.jsx","components/common/Spinner.jsx","assets/jss/components/common/spinnerStyles.jsx","components/inputs/SelectField.jsx","reducers/authReducer.js","reducers/errorReducer.js","reducers/langReducer.js","reducers/snackbarReducer.js","reducers/index.js","settings/store.js","settings/theme.js","components/common/PrivateRoute.jsx","components/common/NotFound.jsx","components/snackbar/Notifier.jsx","actions/authActions.js","assets/jss/base.jsx","components/menus/AppBarMenu.jsx","assets/jss/components/menus/appBarMenuStyles.jsx","components/menus/LangMenu.jsx","actions/langActions.js","components/navbars/TopNavBar.jsx","assets/jss/components/navbars/topNavBarStyles.jsx","components/layouts/Header.jsx","components/navbars/SideBar.jsx","assets/jss/components/navbars/sidebarStyles.jsx","components/dashboard/Dashboard.jsx","components/auth/Login.jsx","components/inputs/DateField.jsx","components/inputs/SelectFieldMultiple.jsx","assets/jss/components/inputs/autoCompleteStyles.jsx","components/inputs/AutoComplete/AutoCompleteSingle.jsx","components/inputs/AutoComplete/AutoCompleteMultiple.jsx","helpers/tableFilter.js","assets/jss/components/filterableTable/filter/filterBlockStyles.jsx","components/filterableTable/filter/FilterBlock.jsx","helpers/permissions.js","components/pagination/PaginationActions.jsx","assets/jss/components/pagination/paginationActionsStyles.jsx","components/pagination/Pagination.jsx","assets/jss/components/pagination/paginationStyles.jsx","assets/jss/components/filterableTable/table/passportStyles.jsx","components/filterableTable/table/Passport.jsx","components/dialogs/FormDialog.jsx","components/inputs/FileField.jsx","components/inputs/CheckboxField.jsx","components/forms/UniversalForm.jsx","assets/jss/components/filterableTable/table/tableBlockStyles.jsx","components/filterableTable/table/TableBlock.jsx","components/filterableTable/FilterTable.jsx","components/pages/Profile.jsx","validation/ahd/ahdDataCollectionSchema.js","components/title/Title.jsx","assets/jss/components/title/titleStyles.jsx","components/pages/AHDDataCollection.jsx","components/tabs/TabPanel.jsx","components/tabs/HorizontalTabs.jsx","components/modules/references/ReferencesLogsFilters.jsx","components/common/TablePassport.jsx","components/modules/references/bypass/BypassAddStatusForm.jsx","components/modules/references/ReferencesLogsTable.jsx","components/modules/references/ReferencesLogs.jsx","components/modules/references/Logs.jsx","components/modules/references/bypass/Bypass.jsx","components/modules/push/roles-filter/PushRolesFilter.jsx","components/modules/push/main-filter/PushMainFilter.jsx","components/modules/push/form/PushForm.jsx","components/modules/push/PushNotificationByFilter.jsx","components/modules/push/PushNotificationByTopic.jsx","components/modules/push/PushNotification.jsx","components/App.jsx","assets/jss/components/app.jsx","settings/i18n.js","registerServiceWorker.js","index.js","assets/jss/components/inputs/inputStyles.jsx","hooks/http.jsx"],"names":["setAuthTokenToHeader","token","axios","defaults","headers","common","isEmpty","data","undefined","trim","length","Object","keys","capitalizeFirstLetter","string","charAt","toUpperCase","slice","httpGet","url","a","params","config","get","result","createNotifier","closeNotifier","translator","errorText","path","response","Errors","ErrorCode","message","options","variant","key","Date","getTime","Math","random","action","onClick","httpPost","body","post","isSuccess","httpPut","customMessageCode","put","Field","castResponseToErrorsObject","httpDelete","delete","generateYupSchemaShape","formFields","comlpexProps","fields","reduce","acc","field","code","includes","pieces","split","root","yupHelper","yup","of","shape","object","typeInWebCode","nullable","typeError","isMultiple","isHidden","email","minValue","min","minLength","maxValue","max","maxLength","isRequired","required","t","formName","obj","err","notification","dispatch","type","CREATE_NOTIFIER","payload","CLOSE_NOTIFIER","dismissAll","removeNotifier","REMOVE_NOTIFIER","module","exports","GET_ERRORS","CLEAR_ERRORS","CHANGE_LANG","SET_CURRENT_USER","useStyles","makeStyles","inputFieldStyles","InputField","name","label","initialValue","handleChange","error","mask","multiline","rows","classes","content","value","onChange","e","target","replace","inputProps","className","input","InputLabelProps","shrink","formGroup","color","useStyle","theme","position","width","height","zIndex","image","top","left","transform","display","Spinner","src","svg","alt","selectFieldStyles","connect","state","lang","locale","customHandle","dependency","participations","allowedValues","inputRef","useRef","isMounted","useState","localDependency","setLocalDependency","useEffect","current","isEqual","useHttpGet","fetchedData","labelWidth","setLabelWidth","offsetWidth","values","filter","x","id","formControl","ref","htmlFor","map","item","component","style","textAlign","initialState","isAuthorized","notifications","combineReducers","auth","snackbars","dismissed","errors","middlewares","thunk","enhancers","createStore","reducers","compose","applyMiddleware","createMuiTheme","palette","primary","light","main","dark","contrastText","secondary","background","default","paper","typography","useNextVariants","fontFamily","borderRadius","overrides","MuiInputLabel","Component","rest","render","props","to","window","location","href","wrapper","title","fontSize","marginBottom","link","NotFound","useTranslation","Typography","align","Notifier","displayed","storeDisplayed","push","newSnacks","this","currentSnacks","closeSnackbar","notExists","i","newSnack","forEach","enqueueSnackbar","onClose","event","reason","React","withSnackbar","setCurrentUser","decoded","logoutUser","localStorage","removeItem","clearErrors","hexToRgb","test","Error","first","second","third","parseInt","transition","primaryColors","textDecoration","menu","padding","spacing","menuItem","margin","justifyContent","backgroundColor","AppBarMenu","anchorEl","handleClose","items","getContentAnchorEl","open","Boolean","keepMounted","anchorOrigin","vertical","horizontal","transformOrigin","Link","RouterLink","MenuItem","handleClick","changeLang","useSuspense","i18n","setAnchorEl","changeLanguage","IconButton","aria-controls","aria-haspopup","currentTarget","appBar","drawer","transitions","create","easing","sharp","duration","leavingScreen","breakpoints","up","appBarShift","marginLeft","enteringScreen","hide","menuHamburgerButton","marginRight","flexGrow","titleLink","menuButton","profileAnchorEl","setProfileAnchorEl","drawerOpen","handleSideBarOpen","AppBar","clsx","aria-label","Header","sideBarOpen","flexShrink","whiteSpace","drawerClose","overflowX","tooltip","alignItems","mixins","toolbar","listItem","marginTop","listItemActive","listItemIconActive","withRouter","history","handleSideBarClose","isActive","curPathArray","pathname","qs","parse","search","substring","viewId","filterId","pathArray","handle","pathViewId","pathFilterId","menuItems","text","icon","userGroup","Drawer","Divider","List","Tooltip","placement","ListItem","button","ListItemIcon","ListItemText","Dashboard","Login","Password","RoleId","onInputChange","bind","onFormSubmit","back","prevProps","prevState","URL","newErrors","Array","isArray","accum","setState","preventDefault","userData","loginUser","onSubmit","form","SelectField","Button","setItem","jwt_decode","withStyles","boxShadow","withTranslation","DateField","autoOk","clearable","helperText","format","inputVariant","getTimezoneOffset","dateInput","utils","DateFnsUtils","ruLocale","FormControl","InputLabel","Select","multiple","OutlinedInput","renderValue","selected","indexOf","Checkbox","checked","container","minWidth","inputWrapper","inputRoot","flexWrap","inputElement","right","chip","autoCompleteStyles","placeholder","inputVal","setInputVal","selectedItemVal","setSelectedItemVal","suggestions","setSuggestions","isLoading","val","suggestion","handleEscKeyDown","stopPropagation","newValue","inputValue","selectedItem","getInputProps","getItemProps","getLabelProps","getMenuProps","highlightedIndex","isOpen","onKeyDown","onBlur","onFocus","TextField","InputProps","Paper","arSuggesions","toLowerCase","inputLength","count","suggesion","keep","renderSuggesions","index","fontWeight","setOpen","setOptions","loading","active","nameRu","Autocomplete","s","onOpen","getOptionLabel","option","o","renderInput","fullWidth","endAdornment","Fragment","CircularProgress","size","getInitialValuesOfFilters","filters","createFilters","filterValues","setErrors","enabled","dependOn","handleSetErrors","customHandler","join","AutoCompleteSingle","flexFlow","formActions","maxWidth","btn","controls","paddingTop","arrowIcon","arrowIconUp","filterBlockStyles","FilterBlock","registersData","handleSearchClick","handleExportClick","disabled","exportPermission","canExport","autoComplete","PaginationActions","page","rowsPerPage","onChangePage","floor","pagination","down","Pagination","pageLimit","handlePageChange","handlePageLimitChange","TablePagination","rowsPerPageOptions","labelRowsPerPage","labelDisplayedRows","from","backIconButtonProps","nextIconButtonProps","onChangeRowsPerPage","ActionsComponent","bottom","overflow","property","propertyTitle","propertyBody","passportStyles","Passport","selectedId","hasOwnProperty","properties","p","idx","FormDialog","Dialog","scroll","aria-labelledby","DialogTitle","DialogContent","FileField","accept","click","file","CheckboxField","FormControlLabel","control","expand","expandDetails","border","borderColor","deleteButton","UniversalForm","formFieldGroups","handleSubmit","validationSchema","console","log","f","initialValues","expanded","setExpanded","innerFields","setInnerFields","actions","resetForm","setFieldError","setSubmitting","touched","isSubmitting","handleBlur","setFieldValue","setValues","simpleFields","groupFields","hidden","isComplex","group","files","groupsFieldsGrouped","sort","complexContent","groupKey","panel","find","g","groupName","gContent","ExpansionPanel","isExpanded","ExpansionPanelSummary","expandIcon","ExpansionPanelDetails","sub","FormGroup","newFields","splice","formValues","setFormValues","newFormValues","assign","addComplexItem","minHeight","row","cursor","addButton","tableBlockStyles","getFieldValue","TableBlock","tableData","hasPassport","onEditEnd","column","makeTableData","passportOpen","setPassportOpen","setSelectedId","formOpen","setFormOpen","validaionSchema","setValidaionSchema","formContent","setFormContent","schema","handleEditFormOpen","generateFormContent","handleAddFileFormOpen","handleAddFileFormSumbit","formData","FormData","append","CertificateNumber","CertificateDate","CertificateFile","handleDelete","handleCreateFormOpen","handleFormSumbit","formFieldValues","isEmptyArray","editPermission","user","canEdit","createPermission","canCreate","deletePermission","canDelete","Table","table","TableHead","TableRow","hRow","TableCell","TableBody","bRow","onDoubleClick","linkFunc","newContent","renderBodyCell","Fab","fillHelper","forwardFilter","clearValues","v","defaultState","view","registerSettings","forwardFilterValues","others","FilterTable","getViewSetting","getForwardFilterValues","fillFilters","getTableData","fetchData","onFilterInputChange","onSearchButtonClick","onExportButtonClick","match","oldHandle","oldViewId","oldFilterId","collectionName","isDefault","export","clear","exportUrl","Profile","Grid","xs","Yup","excelFile","paddingBottom","Title","handleFormSubmit","sm","md","lg","xl","ahdDataCollectionSchema","TabPanel","children","prefix","role","Box","HorizontalTabs","setValue","Tabs","indicatorColor","textColor","scrollButtons","tabs","centered","tab","Tab","tabpanel","ReferencesLogsFilters","filterSettings","handleSumbit","setFilters","clearFilters","TablePassport","countInGroup","flex","sendBtn","BypassAddStatusForm","defaultValues","sending","useForm","status","comment","when","is","then","reset","watch","triggerValidation","on","fieldName","off","as","ReferencesLogsTable","handlePaginationAction","passportState","setPassportState","dialog","setDialog","selectedIds","setSelectedIds","formDialogOpen","setDialogFormOpen","isSending","setIsSending","onSelectAllClick","indeterminate","renderBody","origin","handleDialogOpen","columnType","byUserGroup","application","newDialog","fileUrl","Stepper","orientation","stages","stage","Step","StepLabel","StepContent","employee","dateOfCreation","toLocaleDateString","hour","minute","handlePassportOpen","elementId","passport","applicationIds","catch","ex","finally","filterRef","setFilterSettings","setData","filtersLoading","setFiltersLoading","dataLoading","setDataLoading","getData","useCallback","references","fetch","initialFilterValues","newFilters","Logs","Bypass","PushRolesFilter","clearFilter","settings","allowedRoles","allowedCategories","showExtraFilters","setShowExtraFilters","isMain","inputsWrapper","titleKk","titleRu","titleEn","bodyKk","bodyRu","bodyEn","PushForm","setLoading","setSettings","roleId","category","rolesFilter","setRolesFilter","mainFilterSettings","setMainFilterSettings","mainFilter","setMainFilter","mainFilterLoading","setMainFilterLoading","receivers","setReceivers","setSending","settingsResponse","handleRolesFormSubmit","handleMainFilterSubmit","clean","oldFilter","handlePushFormSubmit","PushMainFilter","topic","setTopic","PushNotification","PushNotificationByFilter","PushNotificationByTopic","Schedule","lazy","setSideBarOpen","exact","AHDDataCollection","fallback","resources","kk","ru","en","use","LanguageDetector","initReactI18next","init","fallbackLng","ns","defaultNS","fallbackNS","nonExplicitWhitelist","lng","debug","process","interpolation","escapeValue","hostname","navigator","serviceWorker","ready","registration","unregister","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","jwtToken","store","currentTime","now","exp","ReactDOM","basename","ThemeProvider","maxSnack","CssBaseline","dependencies","notifActions","setFetchedData"],"mappings":"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","file":"static/js/main.e2358034.chunk.js","sourcesContent":["import React from 'react';\r\nimport axios from 'axios';\r\nimport * as yup from 'yup';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nexport const setAuthTokenToHeader = (token) => {\r\n if (token) {\r\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;\r\n } else {\r\n delete axios.defaults.headers.common['Authorization'];\r\n }\r\n};\r\n\r\nexport const isEmpty = (data) =>\r\n data === null ||\r\n data === undefined ||\r\n (typeof data === 'string' && data.trim().length === 0) ||\r\n (typeof data === 'object' && Object.keys(data).length === 0);\r\n\r\nexport const capitalizeFirstLetter = (string) =>\r\n string.charAt(0).toUpperCase() + string.slice(1);\r\n\r\nexport const getCurrentLang = () =>\r\n capitalizeFirstLetter(window.localStorage.i18nextLng);\r\n\r\nexport const httpGet = async (url, params = {}, config = {}) => {\r\n try {\r\n const result = await axios.get(url, { params });\r\n\r\n return result.data;\r\n } catch (ex) {\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n translator = function (path) {\r\n return 'Произошла ошибка.';\r\n },\r\n } = config;\r\n\r\n var errorText = translator('ERRORS.DEFAULT');\r\n if (!isEmpty(ex.response.data.Errors)) {\r\n errorText = translator(`ERRORS.${ex.response.data.Errors[0].ErrorCode}`);\r\n }\r\n\r\n createNotifier({\r\n message: errorText,\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return null;\r\n }\r\n};\r\n\r\nexport const httpPost = async (url, body = {}, config = {}, headers = {}) => {\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n translator = function (path) {\r\n return 'Произошла ошибка.';\r\n },\r\n } = config;\r\n\r\n try {\r\n const result = await axios.post(url, body, headers);\r\n\r\n if (result.data.isSuccess)\r\n createNotifier({\r\n message: 'Успешная операция',\r\n options: {\r\n variant: 'success',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return result.data;\r\n } catch (ex) {\r\n var errorText = translator('ERRORS.DEFAULT');\r\n if (!isEmpty(ex.response.data.message)) {\r\n errorText = ex.response.data.message;\r\n }\r\n \r\n createNotifier({\r\n message: errorText,\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return null;\r\n }\r\n};\r\n\r\nexport const httpPut = async (url, body = {}, config = {}) => {\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n translator = function (path) {\r\n return 'Произошла ошибка.';\r\n },\r\n customMessageCode = null,\r\n } = config;\r\n\r\n try {\r\n const result = await axios.put(url, body);\r\n\r\n createNotifier({\r\n message: 'Успешная операция',\r\n options: {\r\n variant: 'success',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return result.data;\r\n } catch (ex) {\r\n var errorText =\r\n customMessageCode !== null\r\n ? translator(customMessageCode)\r\n : translator('ERRORS.DEFAULT');\r\n\r\n if (\r\n !isEmpty(ex.response.data.Errors) &&\r\n ex.response.data.Errors[0].Field !== null\r\n ) {\r\n const errors = castResponseToErrorsObject(\r\n translator,\r\n ex.response.data.Errors,\r\n 'UNIVERSAL_FORM'\r\n );\r\n\r\n throw errors;\r\n }\r\n\r\n createNotifier({\r\n message: errorText,\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return null;\r\n }\r\n};\r\n\r\nexport const httpDelete = async (url, config = {}) => {\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n translator = function (path) {\r\n return 'Произошла ошибка.';\r\n },\r\n } = config;\r\n\r\n try {\r\n const result = await axios.delete(url);\r\n\r\n createNotifier({\r\n message: 'Успешное удаление',\r\n options: {\r\n variant: 'success',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return result.data;\r\n } catch (ex) {\r\n var errorText = translator('ERRORS.DEFAULT');\r\n if (!isEmpty(ex.response.data.Errors)) {\r\n errorText = translator(`ERRORS.${ex.response.data.Errors[0].ErrorCode}`);\r\n }\r\n\r\n createNotifier({\r\n message: errorText,\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n closeNotifier(key)}>\r\n \r\n \r\n ),\r\n },\r\n });\r\n\r\n return null;\r\n }\r\n};\r\n\r\nexport const generateYupSchemaShape = (formFields) => {\r\n let comlpexProps = {};\r\n let fields = formFields.reduce((acc, field) => {\r\n if (field.code.includes('.')) {\r\n const pieces = field.code.split('.');\r\n const root = pieces[0];\r\n const code = pieces[1];\r\n\r\n if (root in comlpexProps) {\r\n comlpexProps[root] = {\r\n ...comlpexProps[root],\r\n [code]: yupHelper(field),\r\n };\r\n\r\n return acc;\r\n }\r\n\r\n comlpexProps[root] = {\r\n [code]: yupHelper(field),\r\n };\r\n\r\n return acc;\r\n }\r\n\r\n return { ...acc, [field.code]: yupHelper(field) };\r\n }, {});\r\n\r\n for (const key in comlpexProps) {\r\n fields[key] = yup.array().of(yup.object().shape(comlpexProps[key]));\r\n }\r\n\r\n return yup.object().shape(fields);\r\n};\r\n\r\nexport const yupHelper = (field) => {\r\n let object;\r\n switch (field.typeInWebCode) {\r\n case 'number':\r\n object = yup\r\n .number()\r\n .nullable()\r\n .typeError('ERRORS.SCHEMA.INVALID_NUMBER');\r\n break;\r\n case 'date':\r\n case 'datetime':\r\n object = yup.date().nullable().typeError('ERRORS.SCHEMA.INVALID_DATE');\r\n break;\r\n default:\r\n if (field.isMultiple) {\r\n object = yup.array().typeError('ERRORS.SCHEMA.INVALID_ARRAY');\r\n break;\r\n }\r\n\r\n object = yup.string().typeError('ERRORS.SCHEMA.INVALID_STRING');\r\n }\r\n\r\n if (field.isHidden) return object;\r\n\r\n if (field.typeInWebCode === 'email')\r\n object = object.email('ERRORS.SCHEMA.INVALID_EMAIL');\r\n\r\n if (field.typeInWebCode === 'url')\r\n object = object.url('ERRORS.SCHEMA.INVALID_URL');\r\n\r\n if (field.minValue) {\r\n object = object.min(field.minValue, 'ERRORS.SCHEMA.INVALID_MIN_VALUE');\r\n } else if (field.minLength) {\r\n object = object.min(field.minLength, 'ERRORS.SCHEMA.INVALID_MIN_LENGTH');\r\n }\r\n\r\n if (field.maxValue) {\r\n object = object.max(field.maxValue, 'ERRORS.SCHEMA.INVALID_MAX_VALUE');\r\n } else if (field.maxLength) {\r\n object = object.max(field.maxLength, 'ERRORS.SCHEMA.INVALID_MAX_LENGTH');\r\n }\r\n\r\n if (field.isRequired) {\r\n object = object.required('ERRORS.SCHEMA.REQUIRED');\r\n }\r\n\r\n return object;\r\n};\r\n\r\nexport const convertToWebFormat = (type) => {\r\n switch (type) {\r\n case 'textfield':\r\n case 'mobilenumber':\r\n case 'phonenumber':\r\n return 'text';\r\n default:\r\n return type;\r\n }\r\n};\r\n\r\nexport const castResponseToErrorsObject = (t, response, formName) =>\r\n response.reduce(\r\n (obj, err) => ({\r\n ...obj,\r\n [err.Field]: t(\r\n `ERRORS.${formName}.${err.Field.toUpperCase()}.${err.ErrorCode}`\r\n ),\r\n }),\r\n {}\r\n );\r\n","import { CREATE_NOTIFIER, CLOSE_NOTIFIER, REMOVE_NOTIFIER } from './types';\r\n\r\nexport const createNotifier = notification => dispatch => {\r\n const key = notification.options && notification.options.key;\r\n\r\n dispatch({\r\n type: CREATE_NOTIFIER,\r\n payload: {\r\n ...notification,\r\n key: key || new Date().getTime() + Math.random()\r\n }\r\n });\r\n};\r\n\r\nexport const closeNotifier = key => dispatch => {\r\n dispatch({\r\n type: CLOSE_NOTIFIER,\r\n payload: {\r\n key,\r\n dismissAll: !key\r\n }\r\n });\r\n};\r\n\r\nexport const removeNotifier = key => dispatch => {\r\n dispatch({\r\n type: REMOVE_NOTIFIER,\r\n payload: key\r\n });\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/spinner.6bc14dda.svg\";","// Errors\r\nexport const GET_ERRORS = 'GET_ERRORS';\r\nexport const CLEAR_ERRORS = 'CLEAR_ERRORS';\r\n\r\n// LANG\r\nexport const CHANGE_LANG = 'CHANGE_LANG';\r\n\r\n// Users\r\nexport const SET_CURRENT_USER = 'SET_CURRENT_USER';\r\n\r\n// SnackBars\r\nexport const CREATE_NOTIFIER = 'CREATE_NOTIFIER';\r\nexport const CLOSE_NOTIFIER = 'CLOSE_NOTIFIER';\r\nexport const REMOVE_NOTIFIER = 'REMOVE_NOTIFIER';\r\n\r\n// Employers\r\nexport const GET_EMPLOYERS = 'GET_EMPLOYERS';\r\nexport const CREATE_EMPLOYER = 'CREATE_EMPLOYER';\r\nexport const EDIT_EMPLOYER = 'EDIT_EMPLOYER';\r\nexport const DELETE_EMPLOYER = 'DELETE_EMPLOYER';\r\n// Employers filters\r\nexport const SET_EMPLOYERS_PAGE = 'SET_PAGE';\r\nexport const SET_EMPLOYERS_PAGE_LIMIT = 'SET_PAGE_LIMIT';\r\n","import React from 'react';\r\nimport MaskedInput from 'react-input-mask';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Styles\r\nimport inputFieldStyles from '../../assets/jss/components/inputs/inputStyles';\r\nconst useStyles = makeStyles(inputFieldStyles);\r\n\r\nconst InputField = ({\r\n name,\r\n label = '',\r\n initialValue,\r\n handleChange,\r\n type = 'text',\r\n error = null,\r\n mask = false,\r\n multiline = false,\r\n rows = 1,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const content = mask ? (\r\n {\r\n e.target.value = e.target.value.replace(/\\D+/g, '');\r\n handleChange(e);\r\n }}\r\n >\r\n {(inputProps) => (\r\n \r\n )}\r\n \r\n ) : (\r\n \r\n );\r\n\r\n return (\r\n
\r\n {content}\r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default InputField;\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport svg from '../../assets/images/spinner.svg';\r\n\r\n// Styles\r\nimport spinnerStyles from '../../assets/jss/components/common/spinnerStyles';\r\nconst useStyle = makeStyles(spinnerStyles);\r\n\r\nconst Spinner = () => {\r\n const classes = useStyle();\r\n\r\n return (\r\n
\r\n \"Loading\r\n
\r\n );\r\n};\r\n\r\nexport default Spinner;\r\n","export default theme => ({\r\n root: {\r\n position: 'relative',\r\n width: '100%',\r\n height: '500px',\r\n zIndex: 100\r\n },\r\n image: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n display: 'block'\r\n }\r\n});\r\n","import React, { useState, useEffect, useRef, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isEqual } from 'lodash';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { createNotifier, closeNotifier } from '../../actions/snackbarActions';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Custom hooks\r\nimport { useHttpGet } from '../../hooks/http';\r\nimport { isEmpty } from '../../helpers';\r\n\r\n// Styles\r\nimport selectFieldStyles from '../../assets/jss/components/inputs/inputStyles';\r\nconst useStyle = makeStyles(selectFieldStyles);\r\n\r\nconst SelectField = ({\r\n name,\r\n label = '',\r\n initialValue = '',\r\n handleChange,\r\n customHandle = null,\r\n dependency = null,\r\n participations = null,\r\n error = null,\r\n allowedValues = null,\r\n createNotifier,\r\n closeNotifier,\r\n lang,\r\n}) => {\r\n const classes = useStyle();\r\n const inputRef = useRef(null);\r\n const isMounted = useRef(false);\r\n\r\n const [localDependency, setLocalDependency] = useState(dependency);\r\n useEffect(() => {\r\n isMounted.current = true;\r\n if (!isEqual(dependency, localDependency) && isMounted.current) {\r\n setLocalDependency(dependency);\r\n handleChange({ target: { name: name, value: '' } });\r\n }\r\n\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, [dependency, localDependency, handleChange, name]);\r\n\r\n let params = localDependency !== null ? { ...localDependency } : {};\r\n if (!isEmpty(participations)) {\r\n params = { ...params, participations };\r\n }\r\n\r\n const [, fetchedData] = useHttpGet(\r\n `/api/directories/${customHandle != null ? customHandle : name}`,\r\n [localDependency],\r\n params,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n }\r\n );\r\n\r\n const [labelWidth, setLabelWidth] = useState(0);\r\n\r\n useEffect(() => {\r\n isMounted.current = true;\r\n\r\n if (isMounted.current) setLabelWidth(inputRef.current.offsetWidth);\r\n\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, []);\r\n\r\n let values = fetchedData;\r\n if (allowedValues !== null && fetchedData)\r\n values = values.filter((x) => allowedValues.includes(x.id));\r\n\r\n return (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n }\r\n >\r\n \r\n ---\r\n \r\n {values &&\r\n values.map((item) => (\r\n \r\n {item.name['name' + lang]}\r\n \r\n ))}\r\n \r\n \r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n SelectField\r\n);\r\n","import { SET_CURRENT_USER } from '../actions/types';\r\nimport { isEmpty } from '../helpers';\r\n\r\nconst initialState = {\r\n isAuthorized: false,\r\n data: {}\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case SET_CURRENT_USER:\r\n return {\r\n ...state,\r\n isAuthorized: !isEmpty(action.payload),\r\n data: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { GET_ERRORS, CLEAR_ERRORS } from '../actions/types';\r\n\r\nconst initialState = {};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case GET_ERRORS:\r\n return action.payload;\r\n case CLEAR_ERRORS:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { CHANGE_LANG } from '../actions/types';\r\n\r\nconst initialState = {\r\n lang: 'Ru'\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case CHANGE_LANG:\r\n return {\r\n lang: action.payload\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import {\r\n CREATE_NOTIFIER,\r\n CLOSE_NOTIFIER,\r\n REMOVE_NOTIFIER\r\n} from '../actions/types';\r\n\r\nconst initialState = {\r\n notifications: []\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case CREATE_NOTIFIER:\r\n return {\r\n ...state,\r\n notifications: [...state.notifications, action.payload]\r\n };\r\n case CLOSE_NOTIFIER:\r\n return {\r\n ...state,\r\n notifications: state.notifications.map(notification =>\r\n action.dismissAll || action.payload.key === notification.key\r\n ? { ...notification, dismissed: true }\r\n : { ...notification }\r\n )\r\n };\r\n case REMOVE_NOTIFIER:\r\n return {\r\n ...state,\r\n notifications: state.notifications.filter(\r\n notification => notification.key !== action.payload\r\n )\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { combineReducers } from 'redux';\r\nimport authReducer from './authReducer';\r\nimport errorReducer from './errorReducer';\r\nimport langReducer from './langReducer';\r\nimport snackbarReducer from './snackbarReducer';\r\n\r\nexport default combineReducers({\r\n auth: authReducer,\r\n snackbars: snackbarReducer,\r\n errors: errorReducer,\r\n locale: langReducer\r\n});\r\n","import { createStore, applyMiddleware, compose } from \"redux\";\r\nimport thunk from \"redux-thunk\";\r\nimport reducers from \"../reducers\";\r\n\r\nconst initialState = {};\r\nconst middlewares = [thunk];\r\nconst enhancers = [];\r\n\r\nconst isDevelopment = process.env.NODE_ENV === \"development\";\r\n\r\nif (\r\n isDevelopment &&\r\n window !== undefined &&\r\n window.__REDUX_DEVTOOLS_EXTENSION__ &&\r\n window.__REDUX_DEVTOOLS_EXTENSION__()\r\n) {\r\n enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__());\r\n}\r\n\r\nexport default createStore(\r\n reducers,\r\n initialState,\r\n compose(applyMiddleware(...middlewares), ...enhancers)\r\n);\r\n","import { createMuiTheme } from '@material-ui/core';\r\n\r\nexport default createMuiTheme({\r\n palette: {\r\n type: 'dark',\r\n primary: {\r\n light: '#6b8698',\r\n main: '#3f596a',\r\n dark: '#14303f',\r\n contrastText: '#ffffff',\r\n },\r\n secondary: {\r\n light: '#ff5c68',\r\n main: '#ed143d',\r\n dark: '#b20017',\r\n contrastText: '#ffffff',\r\n },\r\n background: {\r\n default: '#222935',\r\n paper: '#2f3441',\r\n },\r\n },\r\n typography: {\r\n useNextVariants: true,\r\n fontFamily: 'Comfortaa',\r\n },\r\n shape: {\r\n borderRadius: 8,\r\n },\r\n overrides: {\r\n MuiInputLabel: {\r\n root: {\r\n color: '#ffffff',\r\n '&$focused': {\r\n color: '#ffffff',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Route, Redirect } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst PrivateRoute = ({ component: Component, auth, ...rest }) => (\r\n \r\n auth.isAuthorized ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n);\r\n\r\nPrivateRoute.propTypes = {\r\n auth: PropTypes.object.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n auth: state.auth,\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(PrivateRoute);\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Styles\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n display: 'block',\r\n textAlign: 'center'\r\n },\r\n title: {\r\n fontSize: '24px',\r\n marginBottom: 20\r\n },\r\n link: {\r\n display: 'inline-block'\r\n }\r\n}));\r\n\r\nconst NotFound = () => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n \r\n {t('NOT_FOUND.TITLE')}\r\n \r\n \r\n \r\n {t('NOT_FOUND.GO_TO_MAIN')}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default NotFound;\r\n","import React from 'react';\r\nimport { withSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport { removeNotifier } from '../../actions/snackbarActions';\r\n\r\nclass Notifier extends React.Component {\r\n displayed = [];\r\n\r\n storeDisplayed = (key) => {\r\n this.displayed.push(key);\r\n };\r\n\r\n shouldComponentUpdate({ notifications: newSnacks = [] }) {\r\n if (!newSnacks.length) {\r\n this.displayed = [];\r\n return false;\r\n }\r\n\r\n const {\r\n notifications: currentSnacks,\r\n closeSnackbar,\r\n removeNotifier,\r\n } = this.props;\r\n\r\n let notExists = false;\r\n for (let i = 0; i < newSnacks.length; i++) {\r\n const newSnack = newSnacks[i];\r\n\r\n if (newSnack.dismissed) {\r\n closeSnackbar(newSnack.key);\r\n removeNotifier(newSnack.key);\r\n }\r\n\r\n if (notExists) continue;\r\n\r\n notExists =\r\n notExists ||\r\n !currentSnacks.filter(({ key }) => newSnack.key === key).length;\r\n }\r\n\r\n return notExists;\r\n }\r\n\r\n componentDidUpdate() {\r\n const { notifications = [] } = this.props;\r\n\r\n notifications.forEach(({ key, message, options = {} }) => {\r\n if (this.displayed.includes(key)) return;\r\n\r\n this.props.enqueueSnackbar(message, {\r\n ...options,\r\n onClose: (event, reason, key) => {\r\n if (options.onClose) {\r\n options.onClose(event, reason, key);\r\n }\r\n\r\n removeNotifier(key);\r\n },\r\n });\r\n\r\n this.storeDisplayed(key);\r\n });\r\n }\r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n notifications: state.snackbars.notifications,\r\n});\r\n\r\nexport default withSnackbar(\r\n connect(mapStateToProps, { removeNotifier })(Notifier)\r\n);\r\n","import { SET_CURRENT_USER, GET_ERRORS, CLEAR_ERRORS } from './types';\r\nimport { createNotifier } from './snackbarActions';\r\nimport axios from 'axios';\r\nimport jwt_decode from 'jwt-decode';\r\nimport { setAuthTokenToHeader } from '../helpers';\r\n\r\nexport const registerUser = (userData, history) => async (dispatch) => {\r\n try {\r\n await axios.post(`/api/authentication/register`, userData);\r\n\r\n history.push('/confirmCode');\r\n } catch (ex) {\r\n if (ex.response.data.errors) {\r\n dispatch({\r\n type: GET_ERRORS,\r\n payload: ex.response.data.errors,\r\n });\r\n } else {\r\n createNotifier({\r\n message: 'Произошла ошибка',\r\n options: {\r\n variant: 'error',\r\n key: new Date().getTime() + Math.random(),\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const confirmCode = (codeData, history, url = '/personalInfo') => async (\r\n dispatch\r\n) => {\r\n try {\r\n await axios.post(`/api/authentication/confirmCode`, codeData);\r\n\r\n history.push(url);\r\n } catch (ex) {\r\n if (ex.response.data.errors) {\r\n dispatch({\r\n type: GET_ERRORS,\r\n payload: ex.response.data.errors,\r\n });\r\n } else {\r\n createNotifier({\r\n message: 'Произошла ошибка',\r\n options: {\r\n variant: 'error',\r\n key: new Date().getTime() + Math.random(),\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const setPersonalInfo = (userData, history) => async (dispatch) => {\r\n try {\r\n await axios.post(`/api/authentication/personalInfo`, userData);\r\n\r\n history.push('/setPassword');\r\n } catch (ex) {\r\n if (ex.response.data.errors) {\r\n dispatch({\r\n type: GET_ERRORS,\r\n payload: ex.response.data.errors,\r\n });\r\n } else {\r\n createNotifier({\r\n message: 'Произошла ошибка',\r\n options: {\r\n variant: 'error',\r\n key: new Date().getTime() + Math.random(),\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const setPassword = (userData, history) => async (dispatch) => {\r\n try {\r\n await axios.post(`/api/authentication/setPassword`, userData);\r\n\r\n history.push('/login');\r\n } catch (ex) {\r\n if (ex.response.data.errors) {\r\n dispatch({\r\n type: GET_ERRORS,\r\n payload: ex.response.data.errors,\r\n });\r\n } else {\r\n createNotifier({\r\n message: 'Произошла ошибка',\r\n options: {\r\n variant: 'error',\r\n key: new Date().getTime() + Math.random(),\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const loginUser = (userData) => async (dispatch) => {\r\n dispatch(clearErrors());\r\n\r\n try {\r\n const result = await axios.post(`/api/authentication/login`, userData);\r\n\r\n const { token } = result.data;\r\n // Set token to localeStorage\r\n localStorage.setItem('jwtToken', token);\r\n // Set token to Auth header\r\n setAuthTokenToHeader(token);\r\n // Decode user data from token\r\n const decoded = jwt_decode(token);\r\n // Set current user\r\n dispatch(setCurrentUser(decoded));\r\n } catch (ex) {\r\n if (ex.response.data.errors) {\r\n dispatch({\r\n type: GET_ERRORS,\r\n payload: ex.response.data.errors,\r\n });\r\n } else {\r\n createNotifier({\r\n message: 'Произошла ошибка',\r\n options: {\r\n variant: 'error',\r\n key: new Date().getTime() + Math.random(),\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const setCurrentUser = (decoded) => ({\r\n type: SET_CURRENT_USER,\r\n payload: decoded,\r\n});\r\n\r\nexport const logoutUser = () => (dispatch) => {\r\n // Remove token from localeStorage\r\n localStorage.removeItem('jwtToken');\r\n // Remove Auth token from header\r\n setAuthTokenToHeader(false);\r\n // Clear current user\r\n dispatch(setCurrentUser({}));\r\n};\r\n\r\nexport const clearErrors = () => ({\r\n type: CLEAR_ERRORS,\r\n});\r\n","/**\r\n * Helper function hexToRgb\r\n *\r\n * examples:\r\n * input: #9c27b0 => output = 156, 39, 176\r\n * input: 9c27b0 => output = 156, 39, 176\r\n * input: #999 => output = 153, 153, 153\r\n * input: 999 => output = 153, 153, 153\r\n */\r\n\r\nexport const hexToRgb = input => {\r\n input = input + '';\r\n input = input.replace('#', '');\r\n let hexRegex = /[0-9A-Fa-f]/g;\r\n if (!hexRegex.test(input) || (input.length !== 3 && input.length !== 6)) {\r\n throw new Error('input is not a valid hex color.');\r\n }\r\n\r\n if (input.length === 3) {\r\n let first = input[0];\r\n let second = input[1];\r\n let third = input[2];\r\n input = first + first + second + second + third + third;\r\n }\r\n\r\n input = input.toUpperCase(input);\r\n let first = input[0] + input[1];\r\n let second = input[2] + input[3];\r\n let third = input[4] + input[5];\r\n\r\n return `${parseInt(first, 16)}, ${parseInt(second, 16)}, ${parseInt(\r\n third,\r\n 16\r\n )}`;\r\n};\r\n\r\n/**\r\n * Variables - Styles that are used on more than one component\r\n */\r\n\r\nexport const transition = {\r\n transition: 'all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1)'\r\n};\r\n\r\nexport const defaultFont = {\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: 300,\r\n lineHeight: '1.5rem'\r\n};\r\n\r\nexport const drawerWidth = 260;\r\n\r\nexport const primaryColors = ['#3f596a'];\r\nexport const blackColor = '#000';\r\nexport const whiteColor = '#fff';\r\n\r\nexport const boxShadow = {\r\n boxShadow:\r\n '0 10px 30px -12px rgba(' +\r\n hexToRgb(blackColor) +\r\n ', 0.42), 0 4px 25px 0px rgba(' +\r\n hexToRgb(blackColor) +\r\n ', 0.12), 0 8px 10px -5px rgba(' +\r\n hexToRgb(blackColor) +\r\n ', 0.2)'\r\n};\r\n\r\nexport const link = {\r\n link: {\r\n color: whiteColor,\r\n '&:hover': {\r\n textDecoration: 'none'\r\n }\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Link from '@material-ui/core/Link';\r\n\r\n// Styles\r\nimport appBarMenuStyles from '../../assets/jss/components/menus/appBarMenuStyles';\r\nconst useStyle = makeStyles(appBarMenuStyles);\r\n\r\nconst AppBarMenu = ({ id, anchorEl, handleClose, items }) => {\r\n const classes = useStyle();\r\n\r\n return (\r\n \r\n {items.map(item => {\r\n if (item.to)\r\n return (\r\n \r\n \r\n {item.name}\r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n {item.name}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default AppBarMenu;\r\n","import { transition, primaryColors, whiteColor, link } from '../../base';\r\n\r\nexport default theme => ({\r\n menu: {\r\n padding: theme.spacing(2)\r\n },\r\n menuItem: {\r\n margin: 3,\r\n justifyContent: 'center',\r\n ...transition,\r\n '&:hover': {\r\n backgroundColor: primaryColors[0],\r\n color: whiteColor\r\n }\r\n },\r\n ...link\r\n});\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { changeLang } from '../../actions/langActions';\r\nimport { capitalizeFirstLetter } from '../../helpers';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\n// Icons\r\nimport LanguageIcon from '@material-ui/icons/Language';\r\n\r\nconst LangMenu = (props) => {\r\n const [, i18n] = useTranslation('common', { useSuspense: false });\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n const handleOpen = (e) => {\r\n setAnchorEl(e.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleChange = (lang) => {\r\n i18n.changeLanguage(lang);\r\n props.changeLang(capitalizeFirstLetter(lang));\r\n handleClose();\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n handleChange('kk')} value=\"kk\">\r\n KK\r\n \r\n handleChange('ru')} value=\"ru\">\r\n RU\r\n \r\n handleChange('en')} value=\"en\">\r\n EN\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default connect(null, { changeLang })(LangMenu);\r\n","import { CHANGE_LANG } from './types';\r\n\r\nexport const changeLang = lang => dispatch => {\r\n dispatch({\r\n type: CHANGE_LANG,\r\n payload: lang\r\n });\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { logoutUser } from '../../actions/authActions';\r\nimport clsx from 'clsx';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport ToolBar from '@material-ui/core/Toolbar';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport AccountCircleIcon from '@material-ui/icons/AccountCircle';\r\n\r\n// Custom components\r\nimport AppBarMenu from '../menus/AppBarMenu';\r\nimport LangMenu from '../menus/LangMenu';\r\n\r\n// Styles\r\nimport topNavBarStyles from '../../assets/jss/components/navbars/topNavBarStyles';\r\nconst useStyle = makeStyles(topNavBarStyles);\r\n\r\nconst TopNavBar = (props) => {\r\n const classes = useStyle();\r\n const [profileAnchorEl, setProfileAnchorEl] = useState(null);\r\n const { auth, drawerOpen, handleSideBarOpen } = props;\r\n\r\n const handleProfileMenuOpen = (e) => {\r\n setProfileAnchorEl(e.currentTarget);\r\n };\r\n\r\n const handleProfileMenuClose = () => {\r\n setProfileAnchorEl(null);\r\n };\r\n\r\n const handleLogoutClick = () => {\r\n props.logoutUser();\r\n setProfileAnchorEl(null);\r\n };\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {auth.isAuthorized && (\r\n \r\n \r\n \r\n )}\r\n \r\n SmartUniversity\r\n {/* \r\n SmartUniversity\r\n */}\r\n \r\n \r\n {auth.isAuthorized && (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n auth: state.auth,\r\n});\r\n\r\nexport default connect(mapStateToProps, {\r\n logoutUser,\r\n})(TopNavBar);\r\n","import { drawerWidth, whiteColor } from '../../base';\r\n\r\nexport default theme => ({\r\n appBar: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create(['width', 'margin'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen\r\n }),\r\n height: 56,\r\n [theme.breakpoints.up('sm')]: {\r\n height: 64\r\n }\r\n },\r\n appBarShift: {\r\n marginLeft: drawerWidth,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create(['width', 'margin'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen\r\n })\r\n },\r\n hide: {\r\n display: 'none'\r\n },\r\n menuHamburgerButton: {\r\n marginRight: theme.spacing(2)\r\n },\r\n title: {\r\n flexGrow: 1,\r\n fontSize: 18,\r\n [theme.breakpoints.up('sm')]: {\r\n fontSize: 24\r\n }\r\n },\r\n titleLink: {\r\n color: whiteColor,\r\n '&:hover': {\r\n textDecoration: 'none'\r\n }\r\n },\r\n menuButton: {\r\n [theme.breakpoints.up('sm')]: {\r\n margin: '0 5px'\r\n }\r\n }\r\n});\r\n","import React from 'react';\r\nimport TopNavBar from '../navbars/TopNavBar';\r\n\r\nconst Header = ({ sideBarOpen, handleSideBarOpen }) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React, { useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport clsx from 'clsx';\r\nimport qs from 'qs';\r\nimport { Link as RouterLink, withRouter } from 'react-router-dom';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Link from '@material-ui/core/Link';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\n// Icons\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport Group from '@material-ui/icons/Group';\r\nimport SupervisedUserCircle from '@material-ui/icons/SupervisedUserCircle';\r\nimport AccountBalanceIcon from '@material-ui/icons/AccountBalance';\r\nimport BackupIcon from '@material-ui/icons/Backup';\r\nimport LibraryBooksIcon from '@material-ui/icons/LibraryBooks';\r\nimport AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport NotificationsIcon from '@material-ui/icons/Notifications';\r\nimport TransferWithinAStationIcon from '@material-ui/icons/TransferWithinAStation';\r\nimport CastForEducationIcon from '@material-ui/icons/CastForEducation';\r\n\r\n// Styles\r\nimport sideBarStyles from '../../assets/jss/components/navbars/sidebarStyles';\r\nconst useStyle = makeStyles(sideBarStyles);\r\n\r\nconst SideBar = ({ history, open, auth, handleSideBarClose }) => {\r\n const classes = useStyle();\r\n\r\n const isActive = (path) => {\r\n const curPathArray = window.location.pathname.split('/');\r\n const { viewId = null, filterId = null } = qs.parse(\r\n window.location.search.substring(1)\r\n );\r\n\r\n const pathArray = path.split('/');\r\n const handle = pathArray[pathArray.length - 1].split('?')[0];\r\n const {\r\n viewId: pathViewId = null,\r\n filterId: pathFilterId = null,\r\n } = qs.parse(pathArray[pathArray.length - 1].split('?')[1]);\r\n\r\n return (\r\n curPathArray[curPathArray.length - 1] === handle &&\r\n viewId === pathViewId &&\r\n filterId === pathFilterId\r\n );\r\n };\r\n\r\n useEffect(() => {}, [history.location.pathname]);\r\n\r\n const { t } = useTranslation();\r\n\r\n const menuItems = [\r\n {\r\n text: t('SIDE_BAR.EMPLOYEES'),\r\n to: '/tables/Employees',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.STUDENTS'),\r\n to: '/tables/Students',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.PARENTS'),\r\n to: '/tables/Parents',\r\n icon: ,\r\n }, \r\n {\r\n text: t('SIDE_BAR.SELECTION_COMMITTEE'),\r\n to: '/tables/Enrollment',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.AHD'),\r\n to: '/ahd',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.REFERENCES'),\r\n to: '/references',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.PUSH_NOTIFICATION'),\r\n to: '/push-notification',\r\n icon: ,\r\n },\r\n {\r\n text: t('SIDE_BAR.BYPASS'),\r\n to: '/bypass',\r\n icon: ,\r\n }\r\n ];\r\n\r\n if (auth.data.userGroup === 'admin')\r\n menuItems.push({\r\n text: t('SIDE_BAR.SCHEDULE'),\r\n to: '/schedule',\r\n icon: ,\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 {menuItems.map((item) => (\r\n \r\n \r\n \r\n \r\n {item.icon}\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 withRouter(SideBar);\r\n","import { drawerWidth, primaryColors, whiteColor, link } from '../../base';\r\n\r\nexport default theme => ({\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n whiteSpace: 'nowrap'\r\n },\r\n drawerOpen: {\r\n width: drawerWidth,\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen\r\n })\r\n },\r\n drawerClose: {\r\n transition: theme.transitions.create('width', {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen\r\n }),\r\n overflowX: 'hidden',\r\n width: 0,\r\n [theme.breakpoints.up('sm')]: {\r\n width: theme.spacing(7) + 1\r\n }\r\n },\r\n tooltip: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '0 8px',\r\n ...theme.mixins.toolbar\r\n },\r\n listItem: {\r\n margin: '10px 0',\r\n '&:first-child': {\r\n marginTop: 0\r\n },\r\n '&:hover': {\r\n background: primaryColors[0],\r\n color: whiteColor\r\n },\r\n '&:hover > div': {\r\n color: whiteColor\r\n }\r\n },\r\n listItemActive: {\r\n background: primaryColors[0],\r\n color: whiteColor\r\n },\r\n listItemIconActive: {\r\n color: whiteColor\r\n },\r\n ...link\r\n});\r\n","import React, { Component } from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nclass Dashboard extends Component {\r\n render() {\r\n return (\r\n
\r\n Dashboard\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Dashboard;\r\n","import React, { Component } from 'react';\r\nimport qs from 'qs';\r\nimport { connect } from 'react-redux';\r\nimport { loginUser } from '../../actions/authActions';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Link from '@material-ui/core/Link';\r\n\r\n// Custom Components\r\nimport InputField from '../inputs/InputField';\r\nimport SelectField from '../inputs/SelectField';\r\n\r\n// Styles\r\nconst styles = theme => ({\r\n form: {\r\n width: 400,\r\n textAlign: 'center',\r\n padding: '30px 15px',\r\n margin: '15px auto',\r\n borderRadius: 5,\r\n boxShadow: '0 5px 15px rgba(0, 0, 0, .5)'\r\n },\r\n title: {\r\n marginBottom: 25\r\n },\r\n button: {\r\n margin: '15px 0 15px'\r\n },\r\n link: {\r\n marginTop: 10\r\n }\r\n});\r\n\r\nclass Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n Login: '',\r\n Password: '',\r\n RoleId: '',\r\n errors: {}\r\n };\r\n\r\n this.onInputChange = this.onInputChange.bind(this);\r\n this.onFormSubmit = this.onFormSubmit.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { back = null } = qs.parse(this.props.location.search.substring(1));\r\n\r\n if (this.props.auth.isAuthorized)\r\n window.location.href = back != null ? back : '/';\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n const { history, t, auth, errors } = this.props;\r\n const { back = null } = qs.parse(this.props.location.search.substring(1));\r\n\r\n if (auth.isAuthorized)\r\n history.push(back != null ? new URL(back).pathname : '/');\r\n\r\n if (errors !== prevProps.errors) {\r\n let newErrors = errors;\r\n\r\n if (\r\n Array.isArray(this.props.errors) &&\r\n this.props.errors[0].field !== null\r\n ) {\r\n newErrors = errors.reduce(\r\n (accum, error) => ({\r\n ...accum,\r\n [error.field]: t(`LOGIN.${error.field.toUpperCase()}_${error.code}`)\r\n }),\r\n {}\r\n );\r\n }\r\n\r\n this.setState({ errors: newErrors });\r\n }\r\n }\r\n\r\n onInputChange(e) {\r\n this.setState({ [e.target.name]: e.target.value });\r\n }\r\n\r\n onFormSubmit(e) {\r\n e.preventDefault();\r\n const userData = {\r\n Login: this.state.Login,\r\n Password: this.state.Password,\r\n RoleId: this.state.RoleId\r\n };\r\n\r\n this.props.loginUser(userData);\r\n }\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const { Login, Password, RoleId, errors } = this.state;\r\n\r\n return (\r\n
\r\n
\r\n \r\n Smart University\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n {t('LOGIN.FORGOT_PASSWORD')}\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n auth: state.auth,\r\n errors: state.errors\r\n});\r\n\r\nexport default connect(mapStateToProps, { loginUser })(\r\n withStyles(styles)(withTranslation()(Login))\r\n);\r\n","import 'date-fns';\r\nimport React, { Fragment } from 'react';\r\nimport ruLocale from 'date-fns/locale/ru';\r\nimport DateFnsUtils from '@date-io/date-fns';\r\nimport {\r\n KeyboardDatePicker,\r\n KeyboardTimePicker,\r\n MuiPickersUtilsProvider,\r\n} from '@material-ui/pickers';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Styles\r\nimport inputFieldStyles from '../../assets/jss/components/inputs/inputStyles';\r\nconst useStyle = makeStyles(inputFieldStyles);\r\n\r\nconst DateField = ({\r\n name,\r\n label = '',\r\n initialValue = null,\r\n handleChange,\r\n type = 'date',\r\n error = null,\r\n}) => {\r\n const classes = useStyle();\r\n\r\n const content =\r\n type === 'date' ? (\r\n \r\n handleChange({\r\n target: {\r\n name,\r\n value:\r\n value !== null\r\n ? new Date(\r\n value.getTime() - value.getTimezoneOffset() * 60000\r\n )\r\n : value,\r\n },\r\n })\r\n }\r\n className={classes.dateInput}\r\n />\r\n ) : (\r\n \r\n handleChange({\r\n target: {\r\n name,\r\n value: new Date(\r\n value.getTime() - value.getTimezoneOffset() * 60000\r\n ),\r\n },\r\n })\r\n }\r\n className={classes.dateInput}\r\n />\r\n );\r\n\r\n return (\r\n \r\n \r\n {content}\r\n \r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default DateField;\r\n","import React, { useState, useEffect, useRef, Fragment } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isEqual } from 'lodash';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { createNotifier, closeNotifier } from '../../actions/snackbarActions';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Custom hooks\r\nimport { useHttpGet } from '../../hooks/http';\r\n\r\n// Styles\r\nimport selectFieldStyles from '../../assets/jss/components/inputs/inputStyles';\r\nimport { isEmpty } from '../../helpers';\r\nconst useStyles = makeStyles(selectFieldStyles);\r\n\r\nconst SelectFieldMultiple = ({\r\n name,\r\n label = '',\r\n initialValue = [],\r\n handleChange,\r\n customHandle = null,\r\n dependency = null,\r\n participations = null,\r\n error = null,\r\n allowedValues = null,\r\n createNotifier,\r\n closeNotifier,\r\n lang,\r\n}) => {\r\n const classes = useStyles();\r\n const inputRef = useRef(null);\r\n const isMounted = useRef(false);\r\n\r\n const [localDependency, setLocalDependency] = useState(dependency);\r\n useEffect(() => {\r\n isMounted.current = true;\r\n if (!isEqual(dependency, localDependency) && isMounted.current) {\r\n setLocalDependency(dependency);\r\n handleChange({ target: { name: name, value: [] } });\r\n }\r\n\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, [dependency, localDependency, handleChange, name]);\r\n\r\n let params = localDependency !== null ? { ...localDependency } : {};\r\n if (!isEmpty(participations)) {\r\n params = { ...params, participations };\r\n }\r\n\r\n const [, fetchedData] = useHttpGet(\r\n `/api/directories/${customHandle !== null ? customHandle : name}`,\r\n [localDependency],\r\n params,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n }\r\n );\r\n\r\n let values = fetchedData;\r\n if (allowedValues !== null && fetchedData)\r\n values = values.filter((x) => allowedValues.includes(x.id));\r\n\r\n const [labelWidth, setLabelWidth] = useState(0);\r\n\r\n useEffect(() => {\r\n setLabelWidth(inputRef.current.offsetWidth);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n }\r\n renderValue={(selected) => {\r\n let text = '';\r\n\r\n values &&\r\n values.forEach((item) => {\r\n if (selected.indexOf(item.id) > -1) {\r\n text += item.name['name' + lang] + ', ';\r\n }\r\n });\r\n return text.substring(0, text.length - 2);\r\n }}\r\n >\r\n {values &&\r\n values.map((item) => (\r\n \r\n -1} />\r\n \r\n \r\n ))}\r\n \r\n \r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n SelectFieldMultiple\r\n);\r\n","export default theme => ({\r\n container: {\r\n width: '100%',\r\n position: 'relative',\r\n flexGrow: 1,\r\n display: 'inline-flex',\r\n padding: 15,\r\n minWidth: 300\r\n },\r\n inputWrapper: {\r\n minWidth: 280,\r\n margin: '15px auto'\r\n },\r\n inputRoot: {\r\n flexWrap: 'wrap'\r\n },\r\n inputElement: {\r\n width: '100%',\r\n position: 'relative',\r\n flexGrow: 1\r\n },\r\n paper: {\r\n position: 'absolute',\r\n zIndex: 1,\r\n marginTop: theme.spacing(1),\r\n top: '100%',\r\n left: 0,\r\n right: 0\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5, 0.25)\r\n }\r\n});\r\n","import React, { useState, useEffect } from 'react';\r\nimport Downshift from 'downshift';\r\nimport { isEqual } from 'lodash';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n createNotifier,\r\n closeNotifier,\r\n} from '../../../actions/snackbarActions';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\n// Custom hooks\r\nimport { useHttpGet } from '../../../hooks/http';\r\nimport { isEmpty } from '../../../helpers';\r\n\r\n// Styles\r\nimport autoCompleteStyles from '../../../assets/jss/components/inputs/autoCompleteStyles';\r\nconst useStyles = makeStyles(autoCompleteStyles);\r\n\r\nconst renderSuggesions = (value, arSuggesions = []) => {\r\n const inputValue = value.trim().toLowerCase();\r\n const inputLength = inputValue.length;\r\n let count = 0;\r\n\r\n return inputLength === 0\r\n ? []\r\n : arSuggesions.filter((suggesion) => {\r\n const keep =\r\n count < 5 &&\r\n suggesion.label.trim().slice(0, inputLength).toLowerCase() ===\r\n inputValue;\r\n\r\n if (keep) count++;\r\n\r\n return keep;\r\n });\r\n};\r\n\r\nconst AutoComplete = ({\r\n name,\r\n label,\r\n initialValue,\r\n placeholder,\r\n customHandle = null,\r\n dependency = null,\r\n participations = null,\r\n error = null,\r\n handleChange,\r\n createNotifier,\r\n closeNotifier,\r\n lang,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const [inputVal, setInputVal] = useState('');\r\n const [selectedItemVal, setSelectedItemVal] = useState(initialValue);\r\n const [suggestions, setSuggestions] = useState([]);\r\n\r\n const [localDependency, setLocalDependency] = useState(dependency);\r\n useEffect(() => {\r\n if (!isEqual(dependency, localDependency)) {\r\n setLocalDependency(dependency);\r\n handleChange({ target: { name: name, value: '' } });\r\n }\r\n }, [dependency, localDependency, handleChange, name]);\r\n\r\n let params = localDependency !== null ? { ...localDependency } : {};\r\n if (!isEmpty(participations)) {\r\n params = { ...params, participations };\r\n }\r\n\r\n const [isLoading, fetchedData] = useHttpGet(\r\n `/api/directories/${customHandle !== null ? customHandle : name}`,\r\n [localDependency],\r\n params,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n fetchedData &&\r\n setSuggestions(\r\n fetchedData.map((item) => ({\r\n value: `${item.id}`,\r\n label: item.name['name' + lang],\r\n }))\r\n );\r\n }, [fetchedData, lang]);\r\n\r\n // To clear and update\r\n useEffect(() => {\r\n setSelectedItemVal(initialValue);\r\n }, [initialValue]);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n const val = suggestions.filter(\r\n (suggestion) => suggestion.value === selectedItemVal\r\n );\r\n\r\n val[0] ? setInputVal(val[0].label) : setInputVal('');\r\n }\r\n }, [selectedItemVal, isLoading, suggestions]);\r\n\r\n // Actions\r\n const handleEscKeyDown = (event) => {\r\n if (\r\n selectedItemVal &&\r\n selectedItemVal.length &&\r\n inputVal.length &&\r\n event.key === 'Escape'\r\n ) {\r\n event.stopPropagation();\r\n setInputVal('');\r\n setSelectedItemVal('');\r\n handleChange({\r\n target: {\r\n name,\r\n value: '',\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleInputValueChange = (event) => {\r\n setInputVal(event.target.value);\r\n };\r\n\r\n const onDownshiftChange = (newValue) => {\r\n setInputVal(newValue !== null ? newValue.label : '');\r\n setSelectedItemVal(newValue !== null ? newValue.value : null);\r\n handleChange({\r\n target: {\r\n name,\r\n value: newValue !== null ? newValue.value : null,\r\n },\r\n });\r\n };\r\n\r\n return (\r\n \r\n {({\r\n getInputProps,\r\n getItemProps,\r\n getLabelProps,\r\n getMenuProps,\r\n highlightedIndex,\r\n isOpen,\r\n inputValue,\r\n selectedItem,\r\n }) => {\r\n const { onBlur, onChange, onFocus, ref, ...inputProps } = getInputProps(\r\n {\r\n onKeyDown: handleEscKeyDown,\r\n placeholder,\r\n }\r\n );\r\n\r\n if (inputProps.value === null) {\r\n inputProps.value = '';\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {\r\n handleInputValueChange(e);\r\n onChange(e);\r\n },\r\n }}\r\n {...inputProps}\r\n />\r\n\r\n
\r\n {isOpen ? (\r\n \r\n {renderSuggesions(inputValue, suggestions).map(\r\n (suggesion, index) => (\r\n -1\r\n ? 500\r\n : 400,\r\n }}\r\n {...getItemProps({\r\n key: index,\r\n index,\r\n item: suggesion,\r\n })}\r\n >\r\n {suggesion.label}\r\n \r\n )\r\n )}\r\n \r\n ) : null}\r\n
\r\n
\r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n
\r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n AutoComplete\r\n);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isEqual } from 'lodash';\r\nimport {\r\n createNotifier,\r\n closeNotifier,\r\n} from '../../../actions/snackbarActions';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Helpers\r\nimport { httpGet, isEmpty } from '../../../helpers';\r\n\r\n// Styles\r\nimport autoCompleteStyles from '../../../assets/jss/components/inputs/autoCompleteStyles';\r\nconst useStyles = makeStyles(autoCompleteStyles);\r\n\r\nconst AutoCompleteMultiple = ({\r\n name,\r\n label,\r\n initialValue = [],\r\n placeholder,\r\n error = null,\r\n handleChange,\r\n customHandle = null,\r\n dependency = null,\r\n participations = null,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [options, setOptions] = React.useState([]);\r\n const loading = open && options.length === 0;\r\n\r\n const [localDependency, setLocalDependency] = useState(dependency);\r\n useEffect(() => {\r\n if (!isEqual(dependency, localDependency)) {\r\n setLocalDependency(dependency);\r\n handleChange({ target: { name: name, value: [] } });\r\n }\r\n }, [dependency, localDependency, handleChange, name]);\r\n\r\n useEffect(() => {\r\n let active = true;\r\n\r\n let params = localDependency !== null ? { ...localDependency } : {};\r\n if (!isEmpty(participations)) {\r\n params = { ...params, participations };\r\n }\r\n\r\n (async () => {\r\n const result = await httpGet(\r\n `/api/directories/${customHandle !== null ? customHandle : name}`,\r\n params,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n }\r\n );\r\n\r\n if (active) {\r\n setOptions(\r\n result.map((item) => ({\r\n value: item.id,\r\n label: item.name.nameRu,\r\n }))\r\n );\r\n }\r\n })();\r\n\r\n return () => {\r\n active = false;\r\n };\r\n }, [localDependency, customHandle, name, participations]);\r\n\r\n return (\r\n
\r\n \r\n handleChange({\r\n target: {\r\n name: name,\r\n value: selected.map((s) => s.value),\r\n },\r\n })\r\n }\r\n onOpen={() => setOpen(true)}\r\n onClose={() => setOpen(false)}\r\n getOptionLabel={(option) => option.label}\r\n options={options}\r\n loading={loading}\r\n value={options.filter((o) => initialValue.includes(o.value))}\r\n renderInput={(params) => (\r\n \r\n {loading ? (\r\n \r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default connect(null, {\r\n createNotifier,\r\n closeNotifier,\r\n})(AutoCompleteMultiple);\r\n","import React from 'react';\r\nimport { isEmpty } from 'lodash';\r\n\r\n// Custom components\r\nimport InputField from '../components/inputs/InputField';\r\nimport DateField from '../components/inputs/DateField';\r\nimport SelectField from '../components/inputs/SelectField';\r\nimport SelectFieldMultiple from '../components/inputs/SelectFieldMultiple';\r\nimport AutoCompleteSingle from '../components/inputs/AutoComplete/AutoCompleteSingle';\r\nimport AutoCompleteMultiple from '../components/inputs/AutoComplete/AutoCompleteMultiple';\r\n\r\nexport const getInitialValuesOfFilters = (filters) =>\r\n filters.reduce((acc, filter) => {\r\n if (filter.type === 'date' || filter.type === 'datetime') {\r\n acc[filter.code] =\r\n filter.initialValue !== null ? new Date(filter.initialValue) : null;\r\n } else {\r\n if (filter.multiple) {\r\n acc[filter.code] =\r\n filter.initialValue !== null ? filter.initialValue : [];\r\n } else {\r\n acc[filter.code] =\r\n filter.initialValue !== null ? filter.initialValue : '';\r\n }\r\n }\r\n\r\n return acc;\r\n }, {});\r\n\r\nexport const getInitialValueOfFilter = (filter) => {\r\n if (filter.type === 'date' || filter.type === 'datetime') {\r\n return filter.initialValue !== null ? new Date(filter.initialValue) : null;\r\n } else {\r\n if (filter.multiple) {\r\n return filter.initialValue !== null ? filter.initialValue : [];\r\n } else {\r\n return filter.initialValue !== null ? filter.initialValue : '';\r\n }\r\n }\r\n};\r\n\r\nexport const createFilters = (\r\n lang,\r\n data = [],\r\n filterValues,\r\n handleChange,\r\n setErrors = () => {},\r\n errors = null\r\n) => {\r\n if (data !== null && data !== false) {\r\n return data.map((filter) => {\r\n if (filter.enabled) {\r\n if (!isEmpty(filter.dependOn) && isEmpty(filterValues[filter.dependOn]))\r\n return null;\r\n\r\n switch (filter.type) {\r\n case 'string':\r\n case 'number':\r\n case 'email':\r\n case 'password':\r\n return (\r\n \r\n );\r\n case 'date':\r\n case 'datetime':\r\n return (\r\n \r\n );\r\n case 'combobox':\r\n if (filter.multiple) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n case 'autocomplete':\r\n if (filter.multiple) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n default:\r\n return null;\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n};\r\n","export default (theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n },\r\n form: {\r\n display: 'flex',\r\n flexFlow: 'row wrap',\r\n justifyContent: 'space-evenly',\r\n alignItems: 'center',\r\n transition: 'all .4s ease',\r\n },\r\n formActions: {\r\n maxWidth: 420,\r\n },\r\n btn: {\r\n margin: '0 8px',\r\n },\r\n controls: {\r\n paddingTop: theme.spacing(3),\r\n flexGrow: 1,\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n arrowIcon: {\r\n transform: 'rotate(0)',\r\n transition: 'transform .8s ease',\r\n },\r\n arrowIconUp: {\r\n transform: 'rotate(-180deg)',\r\n },\r\n});\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\n\r\n// Custom components\r\nimport { createFilters } from '../../../helpers/tableFilter';\r\n\r\nimport { canExport } from '../../../helpers/permissions';\r\n\r\n// Styles\r\nimport filterBlockStyles from '../../../assets/jss/components/filterableTable/filter/filterBlockStyles';\r\nconst useStyle = makeStyles(filterBlockStyles);\r\n\r\nconst FilterBlock = props => {\r\n const classes = useStyle();\r\n const {\r\n viewId,\r\n lang,\r\n registersData,\r\n filterValues,\r\n handleChange,\r\n handleSearchClick,\r\n handleExportClick,\r\n handle\r\n } = props;\r\n\r\n const { t } = useTranslation();\r\n const [errors, setErrors] = useState({});\r\n\r\n const disabled = Object.keys(errors).filter(e => e === true);\r\n const handleSubmit = e => {\r\n e.preventDefault();\r\n\r\n handleSearchClick(false);\r\n };\r\n\r\n const exportPermission = canExport(handle) || viewId === \"60e6b91b90ef8a227c94df27\";\r\n \r\n return (\r\n \r\n
\r\n {createFilters(\r\n lang,\r\n registersData,\r\n filterValues,\r\n handleChange,\r\n setErrors,\r\n errors\r\n )}\r\n
\r\n 0}\r\n >\r\n {t('BUTTON.APPLY')}\r\n \r\n handleSearchClick(true)}\r\n >\r\n {t('BUTTON.CLEAR')}\r\n \r\n\r\n {exportPermission && (\r\n handleExportClick()}\r\n >\r\n {t('BUTTON.EXPORT')}\r\n )\r\n }\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FilterBlock;\r\n","export const canEdit = (user, handle) => {\r\n switch (user.userGroup) {\r\n case \"admin\":\r\n return true;\r\n case \"human_recourses\":\r\n return [\"Student\", \"Employee\", \"Parent\"].includes(handle);\r\n case \"selection_committee\":\r\n return [\"Enrollment\"].includes(handle);\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nexport const canCreate = (user, handle) => {\r\n switch (user.userGroup) {\r\n case \"admin\":\r\n return true;\r\n case \"human_recourses\":\r\n return [\"Student\", \"Employee\", \"Parent\"].includes(handle);\r\n case \"selection_committee\":\r\n return [\"Enrollment\"].includes(handle);\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nexport const canDelete = (user, handle) => {\r\n switch (user.userGroup) {\r\n default:\r\n return [\"Enrollment\"].includes(handle);\r\n }\r\n}\r\n\r\nexport const canExport = (handle) => {\r\n return [\"Enrollment\", \"Orders\"].includes(handle);\r\n}\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\r\nimport LastPageIcon from '@material-ui/icons/LastPage';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\n\r\n// Styles\r\nimport paginationActionsStyles from '../../assets/jss/components/pagination/paginationActionsStyles';\r\nconst useStyle = makeStyles(paginationActionsStyles);\r\n\r\nconst PaginationActions = props => {\r\n const classes = useStyle();\r\n const { page, rowsPerPage, count, onChangePage } = props;\r\n\r\n const handleClickFirstPage = event => {\r\n onChangePage(event, 0);\r\n };\r\n\r\n const handleClickPrevPage = event => {\r\n onChangePage(event, page - 1);\r\n };\r\n\r\n const handleClickNextPage = event => {\r\n onChangePage(event, page + 1);\r\n };\r\n\r\n const handleClickLastPage = event => {\r\n onChangePage(event, Math.floor(count / rowsPerPage));\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\n );\r\n};\r\n\r\nexport default PaginationActions;\r\n","export default theme => ({\r\n root: {\r\n flexShrink: 0,\r\n marginLeft: theme.spacing(1) * 2.5\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport TablePagination from '@material-ui/core/TablePagination';\r\n\r\n// Custom components\r\nimport PaginationActions from './PaginationActions';\r\n\r\n// Styles\r\nimport paginationStyles from '../../assets/jss/components/pagination/paginationStyles';\r\nconst useStyle = makeStyles(paginationStyles);\r\n\r\nconst Pagination = props => {\r\n const classes = useStyle();\r\n\r\n const {\r\n page,\r\n pageLimit,\r\n count,\r\n handlePageChange,\r\n handlePageLimitChange\r\n } = props;\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n {\r\n return `${from}-${to} ${t('PAGINATION.FROM')} ${count}`;\r\n }}\r\n backIconButtonProps={{\r\n 'aria-label': 'Previous Page'\r\n }}\r\n nextIconButtonProps={{\r\n 'aria-label': 'Next Page'\r\n }}\r\n onChangePage={(e, value) =>\r\n handlePageChange({ target: { name: 'page', value: value + 1 } })\r\n }\r\n onChangeRowsPerPage={e =>\r\n handlePageLimitChange({\r\n target: { name: 'pageLimit', value: e.target.value }\r\n })\r\n }\r\n ActionsComponent={PaginationActions}\r\n />\r\n );\r\n};\r\n\r\nexport default Pagination;\r\n","export default theme => ({\r\n pagination: {\r\n '& > div': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexFlow: 'row wrap',\r\n justifyContent: 'flex-end',\r\n [theme.breakpoints.down('xs')]: {\r\n height: 150,\r\n justifyContent: 'space-between'\r\n }\r\n }\r\n }\r\n});\r\n","export default (theme) => ({\r\n root: {\r\n width: 400,\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n boxShadow: '0 0 5px rgba(255,255,255,.3)',\r\n marginRight: -500,\r\n transition: 'margin .5s ease',\r\n },\r\n open: {\r\n marginRight: 0,\r\n },\r\n appBar: {\r\n height: 62,\r\n borderRadius: `${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0 0`,\r\n },\r\n title: {\r\n flexGrow: 1,\r\n fontSize: 18,\r\n },\r\n body: {\r\n display: 'block',\r\n padding: '15px 20px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 62px)',\r\n },\r\n property: {\r\n marginTop: 7,\r\n marginBottom: 7,\r\n },\r\n propertyTitle: {\r\n fontSize: 18,\r\n },\r\n propertyBody: {\r\n fontSize: 14,\r\n color: '#c7c7c7',\r\n },\r\n});\r\n","import React from 'react';\r\nimport clsx from 'clsx';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport ToolBar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Custom components\r\nimport Spinner from '../../common/Spinner';\r\n\r\n// Icons\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { useHttpGet } from '../../../hooks/http';\r\n\r\n// Styles\r\nimport passportStyles from '../../../assets/jss/components/filterableTable/table/passportStyles';\r\nimport { isEmpty } from '../../../helpers';\r\nconst useStyles = makeStyles(passportStyles);\r\n\r\nconst Passport = (props) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const { open, handle, viewId, selectedId, lang, handleClose } = props;\r\n\r\n const [\r\n isLoading,\r\n fetchedData,\r\n ] = useHttpGet(\r\n `/api/${handle}/passport/${selectedId}`,\r\n [handle, selectedId],\r\n { viewId }\r\n );\r\n\r\n return (\r\n !isEmpty(fetchedData) && (\r\n \r\n \r\n \r\n \r\n {t('PASSPORT.TITLE')}\r\n \r\n handleClose(false)}>\r\n \r\n \r\n \r\n \r\n {isLoading ? (\r\n \r\n ) : (\r\n
\r\n {fetchedData &&\r\n fetchedData.hasOwnProperty('properties') &&\r\n fetchedData.properties.map((p, idx) => (\r\n
\r\n \r\n {p.name['name' + lang]}\r\n \r\n \r\n {p.value['name' + lang] && p.value['name' + lang].length > 0\r\n ? p.value['name' + lang]\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 Passport;\r\n","import React from 'react';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nconst FormDialog = ({\r\n open,\r\n title,\r\n content,\r\n handleClose\r\n}) => {\r\n return (\r\n \r\n {title}\r\n \r\n {content}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default FormDialog;","import React, { useRef } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\n// Icons\r\nimport AttachFile from '@material-ui/icons/AttachFile';\r\n\r\n// Styles\r\nimport selectFieldStyles from '../../assets/jss/components/inputs/inputStyles';\r\nconst useStyles = makeStyles(selectFieldStyles);\r\n\r\nconst FileField = ({\r\n name,\r\n label = '',\r\n handleChange,\r\n error = null,\r\n accept = ''\r\n}) => {\r\n const classes = useStyles();\r\n const inputRef = useRef(null);\r\n\r\n const handleButtonClick = e => {\r\n inputRef.current.click();\r\n };\r\n\r\n return (\r\n
\r\n \r\n {error && (\r\n \r\n {error}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default FileField;\r\n","import React from 'react';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\n\r\nconst CheckboxField = ({ name, label = '', initialValue, handleChange }) => {\r\n return (\r\n \r\n }\r\n label={label}\r\n />\r\n );\r\n};\r\n\r\nexport default CheckboxField;\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Formik, Form } from 'formik';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\r\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\r\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport { isEmpty } from '../../helpers';\r\n\r\n// Icons\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n\r\n// Custom components\r\nimport InputField from '../inputs/InputField';\r\nimport DateField from '../inputs/DateField';\r\nimport SelectField from '../inputs/SelectField';\r\nimport FileField from '../inputs/FileField';\r\nimport CheckboxField from '../inputs/CheckboxField';\r\nimport SelectFieldMultiple from '../inputs/SelectFieldMultiple';\r\nimport AutoCompleteSingle from '../inputs/AutoComplete/AutoCompleteSingle';\r\nimport AutoCompleteMultiple from '../inputs/AutoComplete/AutoCompleteMultiple';\r\n\r\n// Styles\r\nimport { transition } from '../../assets/jss/base';\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n },\r\n expand: {\r\n margin: '10px 0',\r\n },\r\n expandDetails: {\r\n flexFlow: 'column',\r\n },\r\n formGroup: {\r\n position: 'relative',\r\n padding: theme.spacing(2),\r\n border: `1px solid ${theme.palette.background.default}`,\r\n borderRadius: theme.shape.borderRadius,\r\n paddingTop: 60,\r\n marginBottom: 10,\r\n justifyContent: 'center',\r\n ...transition,\r\n '&:hover': {\r\n borderColor: '#fff',\r\n },\r\n },\r\n deleteButton: {\r\n position: 'absolute',\r\n right: 5,\r\n top: 5,\r\n zIndex: 99,\r\n },\r\n}));\r\n\r\nconst UniversalForm = ({\r\n fields,\r\n formFieldGroups,\r\n handleSubmit,\r\n validationSchema,\r\n}) => {\r\n console.log(fields, formFieldGroups);\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const [initialValues] = useState(\r\n fields.reduce((o, f) => {\r\n if (f.name.includes('.')) {\r\n const pieces = f.name.split('.');\r\n const root = pieces[0];\r\n const index = pieces[1];\r\n const code = pieces[2];\r\n if (root in o) {\r\n if (isEmpty(o[root][index])) {\r\n o[root].push({ [code]: f.value });\r\n\r\n return o;\r\n }\r\n\r\n o[root][index][code] = f.value;\r\n return o;\r\n }\r\n\r\n return {\r\n ...o,\r\n [root]: [\r\n {\r\n [code]: f.value,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n return { ...o, [f.name]: f.value };\r\n }, {})\r\n );\r\n\r\n const [expanded, setExpanded] = useState(null);\r\n const handleExpand = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const [innerFields, setInnerFields] = useState(fields);\r\n const addComplexItem = (code, index, formValues, setFormValues) => {\r\n let newFormValues = Object.assign({}, formValues);\r\n // Update fields\r\n let newFields = innerFields.filter((f) =>\r\n f.name.includes(`${code}.${index}`)\r\n );\r\n\r\n let initialValues = Object.assign({}, newFormValues[code][index]);\r\n newFields = newFields.map((f) => {\r\n let field = Object.assign({}, f);\r\n field.name = field.name.replace(`${index}`, `${index + 1}`);\r\n\r\n const pieces = field.name.split('.');\r\n if (['date', 'datetime'].includes(field.type)) {\r\n field.value = null;\r\n initialValues[pieces[pieces.length - 1]] = null;\r\n } else {\r\n field.value = '';\r\n initialValues[pieces[pieces.length - 1]] = '';\r\n }\r\n\r\n return field;\r\n });\r\n\r\n setInnerFields([...innerFields, ...newFields]);\r\n\r\n // Update form values\r\n newFormValues[code].push(initialValues);\r\n setFormValues(newFormValues);\r\n };\r\n\r\n return (\r\n {\r\n try {\r\n const result = await handleSubmit(values);\r\n\r\n result && actions.resetForm();\r\n } catch (err) {\r\n for (let key in err) {\r\n actions.setFieldError(key, err[key]);\r\n }\r\n } finally {\r\n actions.setSubmitting(false);\r\n }\r\n }}\r\n >\r\n {({\r\n values,\r\n touched,\r\n errors,\r\n isSubmitting,\r\n handleChange,\r\n handleBlur,\r\n setFieldValue,\r\n setValues,\r\n }) => {\r\n const simpleFields = [];\r\n const groupFields = [];\r\n\r\n innerFields.forEach((field) => {\r\n if (!field.hidden) {\r\n if (!isEmpty(field.dependOn) && isEmpty(values[field.dependOn]))\r\n return null;\r\n\r\n let isComplex = field.name.includes('.');\r\n let container = simpleFields;\r\n let value = values[field.name];\r\n let error = errors[field.name];\r\n let root = '';\r\n let index = 0;\r\n\r\n if (isComplex) {\r\n container = groupFields;\r\n\r\n const pieces = field.name.split('.');\r\n root = pieces[0];\r\n index = pieces[1];\r\n const code = pieces[2];\r\n\r\n value = values[root][index][code];\r\n error =\r\n errors[root] &&\r\n errors[root][index] &&\r\n errors[root][index][code];\r\n }\r\n\r\n switch (field.type) {\r\n case 'text':\r\n case 'number':\r\n case 'email':\r\n case 'password':\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n case 'date':\r\n case 'datetime':\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n case 'combobox':\r\n if (field.isMultiple) {\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n }\r\n\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n case 'autocomplete':\r\n if (field.isMultiple) {\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n }\r\n\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n ),\r\n });\r\n break;\r\n case 'file':\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n setFieldValue(field.name, e.currentTarget.files[0])\r\n }\r\n accept={field.accept ? field.accept : ''}\r\n dependency={\r\n !isEmpty(field.dependOn)\r\n ? { [field.dependOn]: values[field.dependOn] }\r\n : null\r\n }\r\n />\r\n ),\r\n });\r\n break;\r\n case 'checkbox':\r\n container.push({\r\n group: root,\r\n index,\r\n component: (\r\n \r\n setFieldValue(field.name, e.currentTarget.checked)\r\n }\r\n />\r\n ),\r\n });\r\n break;\r\n default:\r\n return null;\r\n }\r\n } else return null;\r\n });\r\n\r\n const groupsFieldsGrouped = groupFields\r\n .sort((f) => f.group)\r\n .reduce((acc, f) => {\r\n if (f.group in acc) {\r\n if (isEmpty(acc[f.group][f.index]))\r\n acc[f.group][f.index] = [f.component];\r\n else acc[f.group][f.index].push(f.component);\r\n\r\n return acc;\r\n }\r\n\r\n return { ...acc, [f.group]: [[f.component]] };\r\n }, {});\r\n\r\n let complexContent = [];\r\n for (const groupKey in groupsFieldsGrouped) {\r\n const group = formFieldGroups.find((g) => g.code === groupKey);\r\n let groupName = group ? group.name['nameRu'] : groupKey;\r\n\r\n const gContent = (\r\n \r\n }\r\n aria-controls={`${groupKey}-content\"`}\r\n id={`${groupKey}-header\"`}\r\n >\r\n {groupName}\r\n \r\n \r\n {groupsFieldsGrouped[groupKey].map((sub, idx) => (\r\n \r\n {\r\n // clear innerfields\r\n if (values[groupKey].length !== 1) {\r\n const newFields = innerFields.filter(\r\n (f) => !f.name.includes(`${groupKey}.${idx}`)\r\n );\r\n setInnerFields(newFields);\r\n\r\n const newValue = values[groupKey];\r\n newValue.splice(idx, 1);\r\n\r\n setValues({\r\n ...values,\r\n [groupKey]: newValue,\r\n });\r\n } else {\r\n const newValue = values[groupKey][0];\r\n for (const key in newValue) {\r\n newValue[key] =\r\n newValue[key] instanceof Date ? null : '';\r\n }\r\n\r\n setValues({\r\n ...values,\r\n [groupKey]: [newValue],\r\n });\r\n }\r\n }}\r\n >\r\n \r\n \r\n {sub}\r\n \r\n ))}\r\n \r\n addComplexItem(\r\n groupKey,\r\n groupsFieldsGrouped[groupKey].length - 1,\r\n values,\r\n setValues\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n\r\n complexContent.push(gContent);\r\n }\r\n return (\r\n
\r\n {simpleFields.map((f) => f.component)}\r\n {complexContent}\r\n
\r\n \r\n {t('COMMON.SAVE')}\r\n \r\n
\r\n
\r\n );\r\n }}\r\n \r\n );\r\n};\r\n\r\nexport default UniversalForm;\r\n","export default (theme) => ({\r\n root: {\r\n margin: '15px 0',\r\n minHeight: 500,\r\n position: 'relative',\r\n width: '100%',\r\n overflow: 'hidden',\r\n },\r\n row: {\r\n cursor: 'pointer',\r\n },\r\n addButton: {\r\n position: 'fixed',\r\n right: 25,\r\n bottom: 25,\r\n zIndex: 10,\r\n }\r\n});\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Fab from '@material-ui/core/Fab';\r\nimport Link from '@material-ui/core/Link';\r\n\r\nimport {\r\n isEmpty,\r\n httpGet,\r\n httpPut,\r\n httpPost,\r\n generateYupSchemaShape,\r\n httpDelete,\r\n} from '../../../helpers';\r\nimport { canEdit, canCreate, canDelete } from '../../../helpers/permissions';\r\n\r\n// Custom components\r\nimport Pagination from '../../pagination/Pagination';\r\nimport Passport from './Passport';\r\nimport FormDialog from '../../dialogs/FormDialog';\r\nimport UniversalForm from '../../forms/UniversalForm';\r\n\r\n// Icons\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport DeleteIcon from '@material-ui/icons/Delete';\r\nimport ExportIcon from '@material-ui/icons/ImportExport';\r\n\r\n// Styles\r\nimport tableBlockStyles from '../../../assets/jss/components/filterableTable/table/tableBlockStyles';\r\nconst useStyles = makeStyles(tableBlockStyles);\r\n\r\nconst makeTableData = (tableData, fields, lang) => {\r\n return tableData.data.map((row) => {\r\n const result = {\r\n id: row.id,\r\n };\r\n\r\n fields.forEach((column) => {\r\n result[column.code] = row[column.code + lang]\r\n ? row[column.code + lang]\r\n : row[column.code]\r\n ? row[column.code]\r\n : '';\r\n });\r\n\r\n return result;\r\n });\r\n};\r\n\r\nconst renderBodyCell = (bRow, hRow, lang) => {\r\n let content = bRow[hRow.code] !== null ? bRow[hRow.code] : '';\r\n\r\n if (content.hasOwnProperty('name' + lang)) {\r\n content = content['name' + lang];\r\n } \r\n else if (hRow.code === 'document' || hRow.code === 'certificatesCertificateURL' || hRow.code === 'orderLink') {\r\n const linkFunc = (file, index = -1) => { \r\n return (\r\n
\r\n \r\n Документ { index !== -1 ? index + 1 : \"\"}\r\n \r\n
\r\n );\r\n };\r\n if(Array.isArray(content)){\r\n content = content.map(linkFunc);\r\n }\r\n else \r\n return linkFunc(content);\r\n \r\n } \r\n else if (Array.isArray(content)) {\r\n if (content.length > 0 && content[0].hasOwnProperty('name' + lang)) {\r\n var newContent = '';\r\n for (let i = 0; i < content.length; i++) {\r\n newContent += content[i]['name' + lang] + ', ';\r\n }\r\n\r\n content = newContent.substring(0, newContent.length - 2);\r\n } else content = content.join(', ');\r\n }\r\n\r\n return content;\r\n};\r\n\r\nconst getFieldValue = (field, value) => {\r\n if (field.typeInWebCode === 'date' || field.typeInWebCode === 'datetime') {\r\n return !isEmpty(value) ? new Date(value) : null;\r\n }\r\n\r\n if (field.isMultiple) {\r\n return !isEmpty(value) ? value : [];\r\n } else {\r\n return !isEmpty(value) ? value : '';\r\n }\r\n};\r\n\r\nconst TableBlock = ({\r\n lang,\r\n auth,\r\n handle,\r\n viewId,\r\n tableData,\r\n fields,\r\n hasPassport,\r\n filterValues,\r\n formFields,\r\n formFieldGroups,\r\n handlePageChange,\r\n handlePageLimitChange,\r\n onEditEnd,\r\n createNotifier,\r\n closeNotifier,\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const data = makeTableData(tableData, fields, lang) || [];\r\n\r\n const [passportOpen, setPassportOpen] = useState(false);\r\n const [selectedId, setSelectedId] = useState(null);\r\n const [formOpen, setFormOpen] = useState(false);\r\n const [validaionSchema, setValidaionSchema] = useState({});\r\n const [formContent, setFormContent] = useState('');\r\n\r\n useEffect(() => {\r\n if (formFields.length !== 0) {\r\n const schema = generateYupSchemaShape(formFields);\r\n\r\n setValidaionSchema(schema);\r\n }\r\n }, [formFields]);\r\n\r\n const hanldeRowDoubleClick = (id) => {\r\n if (!isEmpty(id)) {\r\n setSelectedId(id);\r\n setPassportOpen(true);\r\n }\r\n };\r\n\r\n const handleEditFormOpen = async (id) => {\r\n var result = await httpGet(\r\n `/api/${handle}/formData/${id}`,\r\n {},\r\n { createNotifier, closeNotifier, translator: t }\r\n );\r\n\r\n setFormContent(generateFormContent(result, id));\r\n setFormOpen(true);\r\n };\r\n\r\n const handleAddFileFormOpen = async (id) => {\r\n const fields = [\r\n {\r\n customHandle: null,\r\n dependOn: null,\r\n hidden: false,\r\n isMultiple: false,\r\n label: \"Номер сертификата\",\r\n mask: null,\r\n name: \"CertificateNumber\",\r\n participations: null,\r\n type: \"text\"\r\n },\r\n {\r\n customHandle: null,\r\n dependOn: null,\r\n hidden: false,\r\n isMultiple: false,\r\n label: \"Срок выдачи\",\r\n mask: null,\r\n name: \"CertificateDate\",\r\n participations: null,\r\n type: \"text\"\r\n },\r\n {\r\n customHandle: null,\r\n dependOn: null,\r\n hidden: false,\r\n isMultiple: false,\r\n label: \"Сертификат\",\r\n mask: null,\r\n name: \"CertificateFile\",\r\n participations: null,\r\n type: \"file\"\r\n }];\r\n setFormContent(\r\n handleAddFileFormSumbit(values, id)}\r\n />\r\n );\r\n setFormOpen(true);\r\n };\r\n\r\n const handleAddFileFormSumbit = async (values, id) => {\r\n try {\r\n let result;\r\n const formData = new FormData();\r\n formData.append('CertificatesCertificateNumber', values.CertificateNumber);\r\n formData.append('CertificatesCertificateDate', values.CertificateDate);\r\n formData.append('CertificateFile', values.CertificateFile);\r\n\r\n result = await httpPut(`/api/${handle}/AddFile/${id}`, formData, {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n }, { headers: { 'Content-Type': 'multipart/form-data' } });\r\n \r\n if (result) {\r\n onEditEnd();\r\n setFormOpen(false);\r\n }\r\n } catch (ex) {\r\n throw ex;\r\n }\r\n };\r\n\r\n const handleDelete = async (id) => {\r\n var result = await httpDelete(\r\n `/api/${handle}/Delete/${id}`,\r\n {},\r\n { createNotifier, closeNotifier, translator: t }\r\n );\r\n console.log(result);\r\n onEditEnd();\r\n };\r\n\r\n \r\n const handleCreateFormOpen = async (id) => {\r\n setFormContent(generateFormContent());\r\n setFormOpen(true);\r\n };\r\n\r\n const handleFormSumbit = async (values, id) => {\r\n try {\r\n let result;\r\n if (isEmpty(id)) {\r\n result = await httpPost(`/api/${handle}`, values, {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n });\r\n } else {\r\n result = await httpPut(`/api/${handle}/${id}`, values, {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n });\r\n }\r\n\r\n if (result) {\r\n onEditEnd();\r\n setFormOpen(false);\r\n }\r\n } catch (ex) {\r\n throw ex;\r\n }\r\n };\r\n\r\n const generateFormContent = (formFieldValues, id) => {\r\n if (isEmpty(formFieldValues)) {\r\n formFieldValues = [];\r\n formFields.forEach((f) => {\r\n if (f.code.includes('.')) {\r\n const pieces = f.code.split('.');\r\n const root = pieces[0];\r\n const code = pieces[1];\r\n\r\n formFieldValues[root] = [{}];\r\n formFieldValues[root][0][code] = null;\r\n } else {\r\n formFieldValues[f.code] = null;\r\n }\r\n });\r\n }\r\n\r\n const fields = formFields.reduce((acc, field) => {\r\n if (field.code.includes('.')) {\r\n const items = [];\r\n const pieces = field.code.split('.');\r\n const root = pieces[0];\r\n const code = pieces[1];\r\n\r\n if (isEmpty(formFieldValues[root])) return acc;\r\n const isEmptyArray = formFieldValues[root].length === 0;\r\n const count = !isEmptyArray ? formFieldValues[root].length : 1;\r\n for (let i = 0; i < count; i++) {\r\n items.push({\r\n name: `${root}.${i}.${code}`,\r\n type: field.typeInWebCode,\r\n isMultiple: field.isMultiple,\r\n hidden: field.isHidden,\r\n label: field.name['name' + lang],\r\n value: getFieldValue(\r\n field,\r\n !isEmptyArray ? formFieldValues[root][i][code] : null\r\n ),\r\n mask: field.mask,\r\n dependOn: field.dependOn,\r\n customHandle: field.customHandle,\r\n participations: field.participations,\r\n });\r\n }\r\n\r\n return [...acc, ...items];\r\n }\r\n\r\n return [\r\n ...acc,\r\n {\r\n name: field.code,\r\n type: field.typeInWebCode,\r\n isMultiple: field.isMultiple,\r\n hidden: field.isHidden,\r\n label: field.name['name' + lang],\r\n value: getFieldValue(field, formFieldValues[field.code]),\r\n mask: field.mask,\r\n dependOn: field.dependOn,\r\n customHandle: field.customHandle,\r\n participations: field.participations,\r\n },\r\n ];\r\n }, []);\r\n\r\n return (\r\n handleFormSumbit(values, id)}\r\n />\r\n );\r\n };\r\n\r\n const editPermission = canEdit(auth.data, handle);\r\n const createPermission = canCreate(auth.data, handle);\r\n const deletePermission = canDelete(auth.data, handle);\r\n\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n {fields &&\r\n fields.map((hRow, idx) => (\r\n \r\n {hRow.name['name' + lang]}\r\n \r\n ))}\r\n {editPermission && (\r\n {t('COMMON.ACTIONS')}\r\n )}\r\n \r\n \r\n \r\n {data.map((bRow, index) => (\r\n hanldeRowDoubleClick(bRow['id'])}\r\n >\r\n {fields &&\r\n fields.map((hRow) => {\r\n return (\r\n \r\n {renderBodyCell(bRow, hRow, lang)}\r\n {editPermission && hRow.code === 'certificatesCertificateURL' ? (\r\n handleAddFileFormOpen(bRow['id'])}>\r\n \r\n \r\n ) : null}\r\n \r\n );\r\n })}\r\n {editPermission && (\r\n \r\n handleEditFormOpen(bRow['id'])}>\r\n \r\n \r\n {deletePermission && (\r\n handleDelete(bRow['id'])}>\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n {createPermission && (\r\n \r\n \r\n )\r\n }\r\n\r\n {hasPassport && selectedId !== null && (\r\n \r\n )}\r\n setFormOpen(false)}\r\n />\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default TableBlock;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createNotifier, closeNotifier } from '../../actions/snackbarActions';\r\nimport qs from 'qs';\r\nimport { httpGet, httpPost, isEmpty } from '../../helpers';\r\n\r\n// Custom components\r\nimport Spinner from '../common/Spinner';\r\nimport FilterBlock from './filter/FilterBlock';\r\nimport TableBlock from './table/TableBlock';\r\n\r\nconst fillHelper = (filter, forwardFilter, clearValues) => {\r\n let value;\r\n if (filter.type === 'date' || filter.type === 'datetime') {\r\n if (clearValues) value = null;\r\n else\r\n value =\r\n forwardFilter && !isEmpty(forwardFilter[filter.code])\r\n ? new Date(forwardFilter[filter.code])\r\n : filter.initialValue\r\n ? new Date(filter.initialValue)\r\n : null;\r\n } else {\r\n if (clearValues) {\r\n if (filter.multiple) value = [];\r\n else value = '';\r\n } else {\r\n if (filter.multiple) {\r\n value =\r\n forwardFilter && !isEmpty(forwardFilter[filter.code])\r\n ? filter.initialValue.split(',').map(v => v.trim())\r\n : filter.initialValue\r\n ? filter.initialValue.split(',').map(v => v.trim())\r\n : [];\r\n } else\r\n value =\r\n forwardFilter && !isEmpty(forwardFilter[filter.code])\r\n ? forwardFilter[filter.code]\r\n : filter.initialValue\r\n ? filter.initialValue\r\n : '';\r\n }\r\n }\r\n\r\n return value;\r\n};\r\n\r\nconst defaultState = {\r\n handle: null,\r\n viewId: '',\r\n filterId: '',\r\n view: {\r\n registerSettings: [],\r\n fields: [],\r\n formFields: [],\r\n formFieldGroups: []\r\n },\r\n forwardFilterValues: {},\r\n filters: {\r\n defaults: {},\r\n others: {\r\n page: 1,\r\n pageLimit: 10\r\n }\r\n },\r\n tableData: {\r\n data: [],\r\n count: 0\r\n },\r\n isLoading: false\r\n};\r\n\r\nclass FilterTable extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = defaultState;\r\n\r\n this.getViewSetting = this.getViewSetting.bind(this);\r\n this.getForwardFilterValues = this.getForwardFilterValues.bind(this);\r\n this.fillFilters = this.fillFilters.bind(this);\r\n this.getTableData = this.getTableData.bind(this);\r\n this.fetchData = this.fetchData.bind(this);\r\n this.onFilterInputChange = this.onFilterInputChange.bind(this);\r\n this.onSearchButtonClick = this.onSearchButtonClick.bind(this);\r\n this.onExportButtonClick = this.onExportButtonClick.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n await this.fetchData();\r\n }\r\n\r\n async componentDidUpdate(prevProps, prevState) {\r\n const { handle } = this.props.match.params;\r\n const { viewId = null, filterId = null } = qs.parse(\r\n this.props.location.search.substring(1)\r\n );\r\n\r\n const { handle: oldHandle } = prevProps.match.params;\r\n const { viewId: oldViewId = null, filterId: oldFilterId = null } = qs.parse(\r\n prevProps.location.search.substring(1)\r\n );\r\n\r\n if (\r\n prevState.filters.others.page !== this.state.filters.others.page ||\r\n prevState.filters.others.pageLimit !== this.state.filters.others.pageLimit\r\n ) {\r\n await this.getTableData();\r\n }\r\n\r\n if (\r\n (oldHandle !== null && oldHandle !== handle) ||\r\n oldViewId !== viewId ||\r\n oldFilterId !== filterId\r\n ) {\r\n this.setState({\r\n ...defaultState,\r\n handle,\r\n viewId,\r\n filterId\r\n });\r\n }\r\n\r\n if (\r\n (prevState.handle !== null && prevState.handle !== this.state.handle) ||\r\n (prevState.viewId !== '' && prevState.viewId !== this.state.viewId) ||\r\n (prevState.filterId !== '' && prevState.filterId !== this.state.filterId)\r\n ) {\r\n await this.fetchData();\r\n }\r\n }\r\n\r\n async getViewSetting(handle, viewId = null) {\r\n const { createNotifier, closeNotifier } = this.props;\r\n const url = `/api/registers/getViewSettings`;\r\n const params = {\r\n collectionName: handle,\r\n viewId\r\n };\r\n\r\n return await httpGet(url, params, { createNotifier, closeNotifier });\r\n }\r\n\r\n async getForwardFilterValues(filterId) {\r\n const { createNotifier, closeNotifier } = this.props;\r\n const url = `/api/registers/getfilter`;\r\n const params = {\r\n id: filterId\r\n };\r\n\r\n return await httpGet(url, params, {\r\n createNotifier,\r\n closeNotifier\r\n });\r\n }\r\n\r\n fillFilters(clearValues = false) {\r\n const {\r\n view: { registerSettings: filters },\r\n forwardFilterValues\r\n } = this.state;\r\n\r\n const defaults = {};\r\n const others = {\r\n page: 1,\r\n pageLimit: 10\r\n };\r\n\r\n filters.forEach(f => {\r\n if (f.isDefault)\r\n defaults[f.code] = fillHelper(f, forwardFilterValues, false);\r\n else others[f.code] = fillHelper(f, forwardFilterValues, clearValues);\r\n });\r\n\r\n this.setState(\r\n {\r\n filters: {\r\n defaults: defaults,\r\n others\r\n }\r\n },\r\n async () => await this.getTableData()\r\n );\r\n }\r\n\r\n async getTableData() {\r\n this.setState({\r\n isLoading: true\r\n });\r\n\r\n const { createNotifier, closeNotifier } = this.props;\r\n const {\r\n handle,\r\n viewId,\r\n filters: { defaults, others }\r\n } = this.state;\r\n\r\n const filters = {\r\n ...defaults,\r\n ...others\r\n };\r\n\r\n const url = `/api/${handle}/get/${viewId}`;\r\n const tableData = await httpPost(url, filters, {\r\n createNotifier,\r\n closeNotifier\r\n });\r\n\r\n if (tableData) {\r\n this.setState({\r\n tableData,\r\n isLoading: false\r\n });\r\n } else {\r\n this.setState({\r\n isLoading: false\r\n });\r\n }\r\n }\r\n\r\n async fetchData() {\r\n const { handle } = this.props.match.params;\r\n const { viewId = null, filterId = null } = qs.parse(\r\n this.props.location.search.substring(1)\r\n );\r\n this.setState({ handle, viewId, filterId });\r\n\r\n const view = await this.getViewSetting(handle, viewId);\r\n let forwardFilterValues = null;\r\n if (filterId !== null) {\r\n forwardFilterValues = await this.getForwardFilterValues(filterId);\r\n }\r\n\r\n if (!isEmpty(view)) {\r\n this.setState({\r\n view: {\r\n registerSettings: view.filters,\r\n fields: view.fields,\r\n formFields: view.formFields,\r\n formFieldGroups: view.formFieldGroups,\r\n hasPassport: view.hasPassport,\r\n export: true\r\n },\r\n forwardFilterValues\r\n });\r\n\r\n this.fillFilters();\r\n }\r\n }\r\n\r\n onFilterInputChange(e) {\r\n const { name, value } = e.target;\r\n\r\n this.setState(state => ({\r\n filters: {\r\n defaults: state.filters.defaults,\r\n others: {\r\n ...state.filters.others,\r\n [name]: value\r\n }\r\n }\r\n }));\r\n }\r\n\r\n async onSearchButtonClick(clear) {\r\n if (clear) this.fillFilters(true);\r\n else await this.getTableData();\r\n }\r\n\r\n async onExportButtonClick() { \r\n const {\r\n handle,\r\n filters: { defaults, others }\r\n } = this.state;\r\n\r\n \r\n if(handle != \"Orders\") {\r\n window.open(`/api/${handle}/export`);\r\n return;\r\n }\r\n\r\n this.setState({\r\n isLoading: true\r\n });\r\n\r\n const { createNotifier, closeNotifier } = this.props;\r\n \r\n const filters = {\r\n ...defaults,\r\n ...others\r\n };\r\n\r\n const url = `/api/${handle}/Statement`;\r\n const exportUrl = await httpPost(url, filters, {\r\n createNotifier,\r\n closeNotifier\r\n });\r\n\r\n this.setState({\r\n isLoading: false\r\n });\r\n\r\n if (exportUrl) {\r\n window.open(exportUrl);\r\n } \r\n }\r\n\r\n render() {\r\n const {\r\n viewId,\r\n filters,\r\n view: {\r\n registerSettings,\r\n fields,\r\n formFields,\r\n formFieldGroups,\r\n hasPassport\r\n },\r\n tableData,\r\n isLoading,\r\n handle\r\n } = this.state;\r\n\r\n return (\r\n
\r\n {Object.keys(filters.others).length > 2 && (\r\n s.isDefault !== true)}\r\n handleChange={this.onFilterInputChange}\r\n filterValues={filters.others}\r\n handleSearchClick={this.onSearchButtonClick}\r\n handleExportClick={this.onExportButtonClick}\r\n handle={handle}\r\n />\r\n )}\r\n {isLoading ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n lang: state.locale.lang,\r\n auth: state.auth\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n FilterTable\r\n);\r\n","import React from 'react';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst Profile = () => {\r\n return (\r\n \r\n \r\n Profile\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Profile;\r\n","import * as Yup from 'yup';\r\n\r\nexport default Yup.object().shape({\r\n excelFile: Yup.mixed()\r\n .test('fileFormat', 'Excel files only', value => {\r\n return (\r\n value &&\r\n [\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\r\n ].includes(value.type)\r\n );\r\n })\r\n .required('File is required')\r\n});\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\n\r\n// Styles\r\nimport titleStyles from '../../assets/jss/components/title/titleStyles';\r\nconst useStyle = makeStyles(titleStyles);\r\n\r\nconst Title = props => {\r\n const classes = useStyle();\r\n const { text } = props;\r\n\r\n return (\r\n
\r\n \r\n {text}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Title;\r\n","export default (theme) => ({\r\n root: {\r\n paddingBottom: theme.spacing(2),\r\n },\r\n text: {\r\n paddingBottom: theme.spacing(2),\r\n fontSize: 22,\r\n },\r\n});\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { createNotifier, closeNotifier } from '../../actions/snackbarActions';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\n// Validation\r\nimport ahdDataCollectionSchema from '../../validation/ahd/ahdDataCollectionSchema';\r\n\r\nimport { httpPost } from '../../helpers';\r\n\r\n// Custom components\r\nimport Title from '../title/Title';\r\nimport UniversalForm from '../forms/UniversalForm';\r\n\r\nconst AHDDataCollection = props => {\r\n const { t } = useTranslation();\r\n const { createNotifier, closeNotifier } = props;\r\n\r\n const fields = [\r\n {\r\n name: 'excelFile',\r\n type: 'file',\r\n hidden: false,\r\n label: t('AHD.LABELS.FILE'),\r\n value: '',\r\n accept:\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'\r\n }\r\n ];\r\n\r\n const handleFormSubmit = async values => {\r\n const formData = new FormData();\r\n for (const key in values) {\r\n formData.append(key, values[key]);\r\n }\r\n\r\n await httpPost(`/api/dataCollection/import`, formData, {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t\r\n });\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n </Grid>\r\n <Grid item xs={12} container>\r\n <Grid item xs={12} sm={6} md={4} lg={3} xl={2}>\r\n <UniversalForm\r\n fields={fields}\r\n handleSubmit={handleFormSubmit}\r\n validationSchema={ahdDataCollectionSchema}\r\n />\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default connect(\r\n null,\r\n { createNotifier, closeNotifier }\r\n)(AHDDataCollection);\r\n","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nconst TabPanel = ({ children, prefix, value, index, ...others }) => {\r\n return (\r\n <Typography\r\n component=\"div\"\r\n style={{ width: '100%' }}\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`${prefix}-tabpanel-${index}`}\r\n aria-labelledby={`${prefix}-tab-${index}`}\r\n {...others}\r\n >\r\n <Box p={3}>{children}</Box>\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default TabPanel;\r\n","import React, { useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\n\r\n// Custom components\r\nimport TabPanel from './TabPanel';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n}));\r\n\r\nconst HorizontalTabs = (props) => {\r\n const classes = useStyles();\r\n const [value, setValue] = useState(0);\r\n\r\n const handleChange = (e, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const { data } = props;\r\n\r\n return (\r\n <Paper position=\"static\" className={classes.root}>\r\n <Tabs\r\n indicatorColor=\"primary\"\r\n textColor=\"primary\"\r\n scrollButtons=\"auto\"\r\n value={value}\r\n onChange={handleChange}\r\n aria-label=\"Horizontal tabs\"\r\n className={classes.tabs}\r\n centered\r\n >\r\n {data.map(({ tab }, idx) => (\r\n <Tab\r\n key={idx}\r\n label={tab.label}\r\n id={`horizontal-tab-${idx}`}\r\n aria-controls={`horizontal-tabpanel-${idx}`}\r\n />\r\n ))}\r\n </Tabs>\r\n {data.map(({ tabpanel }, idx) => (\r\n <TabPanel key={idx} prefix=\"horizontal\" value={value} index={idx}>\r\n {tabpanel}\r\n </TabPanel>\r\n ))}\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default HorizontalTabs;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { createFilters } from '../../../helpers/tableFilter';\r\n\r\nimport filterBlockStyles from './../../../assets/jss/components/filterableTable/filter/filterBlockStyles';\r\nconst useStyles = makeStyles(filterBlockStyles);\r\n\r\nconst ReferencesLogsFilters = ({\r\n type,\r\n lang,\r\n filters,\r\n filterSettings,\r\n handleSumbit,\r\n setFilters,\r\n clearFilters,\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const handleChange = (e) => {\r\n setFilters({ ...filters, [e.target.name]: e.target.value });\r\n };\r\n\r\n return (\r\n <Paper className={classes.root}>\r\n <form onSubmit={handleSumbit} className={classes.form}>\r\n {createFilters(lang, filterSettings, filters, handleChange)}\r\n\r\n <div className={classes.formActions}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n >\r\n {t('BUTTON.APPLY')}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n onClick={async () => await clearFilters()}\r\n >\r\n {t('BUTTON.CLEAR')}\r\n </Button>\r\n </div>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default ReferencesLogsFilters;\r\n","import React, { Fragment } from 'react';\r\nimport clsx from 'clsx';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport ToolBar from '@material-ui/core/Toolbar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Divider from '@material-ui/core/Divider';\r\n\r\n// Custom components\r\nimport Spinner from './Spinner';\r\n\r\n// Icons\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\n// Styles\r\nimport passportStyles from '../../assets/jss/components/filterableTable/table/passportStyles';\r\nimport { isEmpty } from '../../helpers';\r\nconst useStyles = makeStyles(passportStyles);\r\n\r\nconst TablePassport = ({ data, isLoading, open, lang, handleClose }) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n !isEmpty(data) && (\r\n <Paper className={clsx(classes.root, { [classes.open]: open })}>\r\n <AppBar className={classes.appBar} position=\"relative\">\r\n <ToolBar>\r\n <Typography variant=\"h4\" className={classes.title}>\r\n {t('PASSPORT.TITLE')}\r\n </Typography>\r\n <IconButton onClick={() => handleClose(false)}>\r\n <CloseIcon />\r\n </IconButton>\r\n </ToolBar>\r\n </AppBar>\r\n {isLoading ? (\r\n <Spinner />\r\n ) : (\r\n <div className={classes.body}>\r\n {data &&\r\n data.hasOwnProperty('properties') &&\r\n data.properties.map((p, idx) => (\r\n <Fragment key={idx}>\r\n {data.countInGroup > 0\r\n ? data.countInGroup &&\r\n idx % data.countInGroup === 0 && <Divider />\r\n : null}\r\n <div key={idx} className={classes.property}>\r\n <Typography variant=\"h6\" className={classes.propertyTitle}>\r\n {p.name['name' + lang]}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n className={classes.propertyBody}\r\n >\r\n {p.value['name' + lang] &&\r\n p.value['name' + lang].length > 0\r\n ? p.value['name' + lang]\r\n : '-'}\r\n </Typography>\r\n </div>\r\n </Fragment>\r\n ))}\r\n </div>\r\n )}\r\n </Paper>\r\n )\r\n );\r\n};\r\n\r\nexport default TablePassport;\r\n","import React, { useEffect } from 'react';\r\nimport * as yup from 'yup';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport InputField from '../../../inputs/InputField';\r\nimport SelectField from '../../../inputs/SelectField';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n item: {\r\n flex: 1,\r\n padding: `0 ${theme.spacing(2)}px`,\r\n },\r\n sendBtn: {\r\n margin: `${theme.spacing(2)}px auto`,\r\n display: 'block',\r\n },\r\n}));\r\n\r\nconst BypassAddStatusForm = ({ defaultValues, handleFormSubmit, sending }) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const {\r\n handleSubmit,\r\n setValue,\r\n errors,\r\n control,\r\n reset,\r\n watch,\r\n triggerValidation,\r\n } = useForm({\r\n defaultValues: defaultValues,\r\n validationSchema: yup.object().shape({\r\n status: yup.string().required(t('YUP.STRING.REQUIRED')),\r\n comment: yup\r\n .string()\r\n .max(200, t('YUP.STRING.MAX').replace('{0}', 200))\r\n .when('status', {\r\n is: '5ed0cd1acd3ff31204d7b3dd',\r\n then: yup.string().required(t('YUP.STRING.REQUIRED')),\r\n }),\r\n }),\r\n });\r\n\r\n useEffect(() => {\r\n i18n.on('languageChanged', async () => {\r\n for (let fieldName in errors) {\r\n await triggerValidation(fieldName);\r\n }\r\n });\r\n return () => {\r\n i18n.off('languageChanged', () => {});\r\n };\r\n }, [errors, i18n, triggerValidation]);\r\n\r\n const onSubmit = async (values) => {\r\n const success = await handleFormSubmit(values);\r\n if (success) reset(defaultValues);\r\n };\r\n\r\n const values = watch();\r\n\r\n return (\r\n <form onSubmit={handleSubmit(onSubmit)} autoComplete=\"off\">\r\n <div className={classes.item}>\r\n <Controller\r\n as={SelectField}\r\n control={control}\r\n name=\"status\"\r\n customHandle=\"applicationStatus\"\r\n participations=\"bypass\"\r\n label={t('COMMON.STATUS')}\r\n error={errors?.status?.message}\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.status}\r\n />\r\n </div>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"comment\"\r\n label={t('COMMON.COMMENT')}\r\n rows={7}\r\n multiline\r\n error={errors?.comment?.message}\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.comment}\r\n />\r\n </div>\r\n <div>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.sendBtn}\r\n disabled={sending}\r\n >\r\n {t('COMMON.SEND')}\r\n </Button>\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default BypassAddStatusForm;\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Link from '@material-ui/core/Link';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\nimport FormatListNumberedIcon from '@material-ui/icons/FormatListNumbered';\r\nimport Stepper from '@material-ui/core/Stepper';\r\nimport Step from '@material-ui/core/Step';\r\nimport StepLabel from '@material-ui/core/StepLabel';\r\nimport StepContent from '@material-ui/core/StepContent';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Fab from '@material-ui/core/Fab';\r\n\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nimport Pagination from '../../pagination/Pagination';\r\nimport FormDialog from '../../dialogs/FormDialog';\r\nimport TablePassport from './../../common/TablePassport';\r\nimport BypassAddStatusForm from './bypass/BypassAddStatusForm';\r\n\r\nimport tableBlockStyles from '../../../assets/jss/components/filterableTable/table/tableBlockStyles';\r\nconst useStyles = makeStyles(tableBlockStyles);\r\n\r\nconst ReferencesLogsTable = ({\r\n type,\r\n data: { fields, values, count },\r\n filters,\r\n lang,\r\n handlePaginationAction,\r\n httpGet,\r\n httpPut,\r\n createNotifier,\r\n closeNotifier,\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const [passportState, setPassportState] = useState({\r\n open: false,\r\n data: null,\r\n loading: false,\r\n });\r\n const [dialog, setDialog] = useState({\r\n open: false,\r\n loading: false,\r\n title: null,\r\n content: null,\r\n });\r\n const [selectedIds, setSelectedIds] = useState([]);\r\n const [formDialogOpen, setDialogFormOpen] = useState(false);\r\n const [isSending, setIsSending] = useState(false);\r\n\r\n const onSelectAllClick = (event) => {\r\n setSelectedIds(\r\n event.target.checked\r\n ? values.map((bRow) => bRow['id']['name' + lang])\r\n : []\r\n );\r\n };\r\n\r\n const onSelectClick = (event, id) => {\r\n event.stopPropagation();\r\n\r\n setSelectedIds(\r\n event.target.checked\r\n ? [...selectedIds, id]\r\n : selectedIds.filter((x) => x !== id)\r\n );\r\n };\r\n\r\n const headers = [];\r\n for (let key in fields) {\r\n headers.push(\r\n <TableCell key={key} align=\"center\">\r\n {key !== 'id' ? (\r\n fields[key]['name' + lang]\r\n ) : (\r\n <Checkbox\r\n indeterminate={\r\n selectedIds.length > 0 && selectedIds.length < values.length\r\n }\r\n checked={values.length > 0 && selectedIds.length === values.length}\r\n onChange={onSelectAllClick}\r\n inputProps={{ 'aria-label': 'select all' }}\r\n />\r\n )}\r\n </TableCell>\r\n );\r\n }\r\n\r\n const renderBody = (hRow) => {\r\n const body = [];\r\n for (let key in fields) {\r\n let value = hRow[key] !== null ? hRow[key]['name' + lang] : '';\r\n let content = value;\r\n\r\n if (key === 'id' && type === 'bypass') {\r\n content = (\r\n <Checkbox\r\n checked={selectedIds.includes(value)}\r\n onClick={(e) => onSelectClick(e, value)}\r\n inputProps={{ 'aria-label': 'select one' }}\r\n />\r\n );\r\n } else if (key === 'document' && value !== null) {\r\n value = new URL(value);\r\n\r\n content = (\r\n <Link\r\n href={window.location.origin + value.pathname}\r\n component=\"a\"\r\n target=\"_blank\"\r\n >\r\n Document\r\n </Link>\r\n );\r\n } else if (type === 'applications' && key === 'files' && value !== null) {\r\n content = (\r\n <IconButton\r\n onClick={() => handleDialogOpen(hRow['id']['name' + lang], key)}\r\n >\r\n <DescriptionIcon />\r\n </IconButton>\r\n );\r\n } else if (\r\n (type === 'applications' || type === 'bypass') &&\r\n key === 'stages' &&\r\n value !== null\r\n ) {\r\n content = (\r\n <IconButton\r\n onClick={() => handleDialogOpen(hRow['id']['name' + lang], key)}\r\n >\r\n <FormatListNumberedIcon />\r\n </IconButton>\r\n );\r\n }\r\n\r\n body.push(\r\n <TableCell key={key} align=\"center\">\r\n {content}\r\n </TableCell>\r\n );\r\n }\r\n\r\n return body;\r\n };\r\n\r\n const handleDialogOpen = async (id, columnType) => {\r\n setDialog({ ...dialog, loading: true });\r\n const application = await httpGet(\r\n `/api/application/stages/${id}`,\r\n { byUserGroup: type === 'bypass' },\r\n { createNotifier, closeNotifier, translator: t }\r\n );\r\n\r\n let newDialog = dialog;\r\n if (application !== null) {\r\n newDialog.open = true;\r\n\r\n if (columnType === 'files') {\r\n newDialog.title = t('REFERENCES_LOGS.FILES_TITLE');\r\n newDialog.content = (\r\n <List>\r\n {application.files.map((fileUrl, idx) => {\r\n const url = new URL(fileUrl);\r\n return (\r\n <ListItem key={idx}>\r\n <Link\r\n href={window.location.origin + url.pathname}\r\n component=\"a\"\r\n target=\"_blank\"\r\n >\r\n Document {idx + 1}\r\n </Link>\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n );\r\n } else if (columnType === 'stages') {\r\n newDialog.title = t('REFERENCES_LOGS.STAGES_TITLE');\r\n newDialog.content = (\r\n <Stepper orientation=\"vertical\">\r\n {application.stages.map((stage, idx) => (\r\n <Step active={true} key={idx}>\r\n <StepLabel>{stage.status['name' + lang]}</StepLabel>\r\n <StepContent>\r\n <Typography>\r\n {stage.position['name' + lang]}:{' '}\r\n {stage.employee['name' + lang]}\r\n </Typography>\r\n <Typography color=\"primary\">\r\n {stage.comment['name' + lang]}\r\n </Typography>\r\n <Typography variant=\"caption\">\r\n {new Date(stage.dateOfCreation).toLocaleDateString(\r\n 'ru-RU',\r\n {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n }\r\n )}\r\n </Typography>\r\n </StepContent>\r\n </Step>\r\n ))}\r\n </Stepper>\r\n );\r\n }\r\n }\r\n\r\n setDialog({ ...newDialog, loading: false });\r\n };\r\n\r\n const handlePassportOpen = async (event, id) => {\r\n event.stopPropagation();\r\n\r\n if (id && (type === 'applications' || type === 'bypass')) {\r\n setPassportState({\r\n ...passportState,\r\n loading: true,\r\n open: true,\r\n });\r\n var url =\r\n type === 'bypass'\r\n ? '/api/application/bypass/passport'\r\n : '/api/references/ReferencesLogsPassport';\r\n\r\n const passport = await httpGet(\r\n url,\r\n { type, elementId: id },\r\n { createNotifier, closeNotifier, translator: t }\r\n );\r\n\r\n setPassportState({\r\n ...passportState,\r\n data: passport,\r\n loading: false,\r\n open: true,\r\n });\r\n }\r\n };\r\n\r\n const handleFormSubmit = (values) => {\r\n setIsSending(true);\r\n var formData = { ...values, applicationIds: selectedIds };\r\n httpPut(`/api/application/bypass`, formData, {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n })\r\n .then((result) => {\r\n if (result.isSuccess) {\r\n setDialogFormOpen(false);\r\n }\r\n })\r\n .catch((ex) => {\r\n createNotifier({\r\n message: ex.status,\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n <IconButton onClick={() => closeNotifier(key)}>\r\n <CloseIcon />\r\n </IconButton>\r\n ),\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n setIsSending(false);\r\n });\r\n };\r\n\r\n return (\r\n <Paper className={classes.root}>\r\n <div style={{ overflowX: 'auto' }}>\r\n <Table className={classes.table}>\r\n <TableHead>\r\n <TableRow>{headers}</TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {values.map((bRow, index) => (\r\n <TableRow\r\n className={classes.row}\r\n key={index}\r\n onDoubleClick={(e) =>\r\n handlePassportOpen(e, bRow['id']['name' + lang])\r\n }\r\n >\r\n {renderBody(bRow)}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n <Pagination\r\n page={filters.page - 1}\r\n pageLimit={filters.pageLimit}\r\n count={count}\r\n handlePageChange={handlePaginationAction}\r\n handlePageLimitChange={handlePaginationAction}\r\n />\r\n <TablePassport\r\n open={passportState.open}\r\n isLoading={passportState.loading}\r\n data={passportState.data}\r\n lang={lang}\r\n handleClose={() => setPassportState({ ...passportState, open: false })}\r\n />\r\n <FormDialog\r\n open={dialog.open}\r\n title={dialog.title}\r\n content={dialog.content}\r\n handleClose={() => setDialog({ ...dialog, open: false })}\r\n />\r\n <FormDialog\r\n open={formDialogOpen}\r\n title={'Добавление статуса'}\r\n content={\r\n <BypassAddStatusForm\r\n defaultValues={{\r\n status: '',\r\n comment: '',\r\n }}\r\n sending={isSending}\r\n handleFormSubmit={handleFormSubmit}\r\n />\r\n }\r\n handleClose={() => setDialogFormOpen(false)}\r\n />\r\n {fields.hasOwnProperty('id') && (\r\n <Fab\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setDialogFormOpen(true);\r\n }}\r\n className={classes.addButton}\r\n disabled={selectedIds.length === 0}\r\n >\r\n <EditIcon />\r\n </Fab>\r\n )}\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default ReferencesLogsTable;\r\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport ReferencesLogsFilters from './ReferencesLogsFilters';\r\nimport ReferencesLogsTable from './ReferencesLogsTable';\r\nimport { httpGet, httpPut } from './../../../helpers';\r\nimport Spinner from './../../common/Spinner';\r\nimport {\r\n createNotifier,\r\n closeNotifier,\r\n} from '../../../actions/snackbarActions';\r\nimport { getInitialValuesOfFilters } from '../../../helpers/tableFilter';\r\n\r\nconst ReferencesLogs = ({ type, lang, createNotifier, closeNotifier }) => {\r\n const filterRef = useRef(null);\r\n const [filterSettings, setFilterSettings] = useState(null);\r\n const [filters, setFilters] = useState({\r\n page: 1,\r\n pageLimit: 10,\r\n });\r\n const [data, setData] = useState(null);\r\n const [filtersLoading, setFiltersLoading] = useState(false);\r\n const [dataLoading, setDataLoading] = useState(false);\r\n\r\n const getData = useCallback(\r\n async (filters) => {\r\n setDataLoading(true);\r\n var url =\r\n type === 'bypass'\r\n ? '/api/application/bypass'\r\n : '/api/references/referencesLogs';\r\n try {\r\n const references = await httpGet(\r\n url,\r\n { type, ...filters },\r\n { createNotifier, closeNotifier }\r\n );\r\n\r\n setData(references);\r\n setDataLoading(false);\r\n } catch (ex) {\r\n setDataLoading(false);\r\n }\r\n },\r\n [createNotifier, closeNotifier, type]\r\n );\r\n\r\n useEffect(() => {\r\n filterRef.current = true;\r\n\r\n const fetch = async () => {\r\n setFiltersLoading(true);\r\n var url =\r\n type === 'bypass'\r\n ? '/api/application/bypass/filters'\r\n : '/api/references/referencesLogsFilters';\r\n try {\r\n const filterSettings = await httpGet(\r\n url,\r\n { type },\r\n { createNotifier, closeNotifier }\r\n );\r\n\r\n if (filterRef.current) {\r\n setFilters({\r\n ...filters,\r\n ...getInitialValuesOfFilters(filterSettings),\r\n });\r\n\r\n setFilterSettings(filterSettings);\r\n setFiltersLoading(false);\r\n }\r\n } catch (ex) {\r\n if (filterRef.current) {\r\n setFiltersLoading(false);\r\n }\r\n }\r\n };\r\n\r\n if (Object.keys(filters).length === 2) fetch();\r\n\r\n return () => {\r\n filterRef.current = false;\r\n };\r\n }, [createNotifier, closeNotifier, type, filters]);\r\n\r\n useEffect(() => {\r\n if (filterSettings === null && Object.keys(filters).length > 2)\r\n getData(filters);\r\n }, [getData, filterSettings, filters]);\r\n\r\n const handleFormSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n await getData(filters);\r\n };\r\n\r\n const clearFilters = useCallback(async () => {\r\n const initialFilterValues = {\r\n page: 1,\r\n pageLimit: 10,\r\n ...getInitialValuesOfFilters(filterSettings),\r\n };\r\n\r\n setFilters(initialFilterValues);\r\n await getData(initialFilterValues);\r\n }, [filterSettings, getData]);\r\n\r\n const handlePaginationAction = async (e) => {\r\n const { name, value } = e.target;\r\n\r\n const newFilters = { ...filters, [name]: value };\r\n setFilters(newFilters);\r\n await getData(newFilters);\r\n };\r\n\r\n return (\r\n <div>\r\n {filtersLoading ? (\r\n <Spinner />\r\n ) : (\r\n Object.keys(filters).length > 2 && (\r\n <ReferencesLogsFilters\r\n type={type}\r\n lang={lang}\r\n filters={filters}\r\n filterSettings={filterSettings}\r\n setFilters={setFilters}\r\n clearFilters={clearFilters}\r\n handleSumbit={handleFormSubmit}\r\n />\r\n )\r\n )}\r\n {dataLoading ? (\r\n <Spinner />\r\n ) : (\r\n data && (\r\n <ReferencesLogsTable\r\n type={type}\r\n data={data}\r\n filters={filters}\r\n handlePaginationAction={handlePaginationAction}\r\n lang={lang}\r\n httpGet={httpGet}\r\n httpPut={httpPut}\r\n createNotifier={createNotifier}\r\n closeNotifier={closeNotifier}\r\n />\r\n )\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n ReferencesLogs\r\n);\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport HorizontalTabs from '../../tabs/HorizontalTabs';\r\nimport ReferencesLogs from './ReferencesLogs';\r\n\r\nconst Logs = () => {\r\n const { t } = useTranslation();\r\n\r\n const tabs = [\r\n {\r\n tab: {\r\n label: t('REFERENCES_LOGS.TABS.STUDENTS_REFERENCES'),\r\n },\r\n tabpanel: <ReferencesLogs type=\"references\" />,\r\n },\r\n {\r\n tab: {\r\n label: t('REFERENCES_LOGS.TABS.EMPLOYEES_REFERENCES'),\r\n },\r\n tabpanel: <ReferencesLogs type=\"employeesReferences\" />,\r\n },\r\n {\r\n tab: {\r\n label: t('REFERENCES_LOGS.TABS.APPLICATIONS'),\r\n },\r\n tabpanel: <ReferencesLogs type=\"applications\" />,\r\n },\r\n ];\r\n\r\n return <HorizontalTabs data={tabs} />;\r\n};\r\n\r\nexport default Logs;\r\n","import React from 'react';\r\nimport ReferencesLogs from '../ReferencesLogs';\r\n\r\nconst Bypass = () => {\r\n return <ReferencesLogs type=\"bypass\" />;\r\n};\r\n\r\nexport default Bypass;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Button from '@material-ui/core/Button';\r\nimport SelectField from '../../../inputs/SelectField';\r\n\r\nimport filterBlockStyles from '../../../../assets/jss/components/filterableTable/filter/filterBlockStyles';\r\nconst useStyles = makeStyles(filterBlockStyles);\r\n\r\nconst PushRolesFilter = ({\r\n filterValues,\r\n handleChange,\r\n handleSubmit,\r\n clearFilter,\r\n settings,\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Paper className={classes.root}>\r\n <form className={classes.form} onSubmit={handleSubmit} autoComplete=\"off\">\r\n <SelectField\r\n name=\"roleId\"\r\n initialValue={filterValues['roleId']}\r\n label={t('PUSH_NOTIFICATION.FILTER.ROLE')}\r\n customHandle=\"roles\"\r\n allowedValues={settings.allowedRoles}\r\n handleChange={handleChange}\r\n />\r\n <SelectField\r\n name=\"category\"\r\n initialValue={filterValues['category']}\r\n label={t('PUSH_NOTIFICATION.FILTER.CATEGORY')}\r\n customHandle=\"pushNotificationCategory\"\r\n allowedValues={settings.allowedCategories}\r\n handleChange={handleChange}\r\n />\r\n <div className={classes.formActions}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n disabled={\r\n filterValues['roleId'] === '' || filterValues['category'] === ''\r\n }\r\n >\r\n {t('BUTTON.APPLY')}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n onClick={clearFilter}\r\n >\r\n {t('BUTTON.CLEAR')}\r\n </Button>\r\n </div>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default PushRolesFilter;\r\n","import React, { useState } from 'react';\r\nimport clsx from 'clsx';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\n// Custom components\r\nimport { createFilters } from '../../../../helpers/tableFilter';\r\n\r\n// Icons\r\nimport ArrowDropDownCircleIcon from '@material-ui/icons/ArrowDropDownCircle';\r\n\r\n// Styles\r\nimport filterBlockStyles from '../../../../assets/jss/components/filterableTable/filter/filterBlockStyles';\r\nconst useStyle = makeStyles(filterBlockStyles);\r\n\r\nconst FilterBlock = (props) => {\r\n const classes = useStyle();\r\n const {\r\n lang,\r\n registersData,\r\n filterValues,\r\n handleChange,\r\n handleSearchClick,\r\n } = props;\r\n\r\n const { t } = useTranslation();\r\n const [errors, setErrors] = useState({});\r\n const [showExtraFilters, setShowExtraFilters] = useState(false);\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n handleSearchClick(false);\r\n };\r\n\r\n return (\r\n <Paper className={classes.root} style={{ margin: '15px 0' }}>\r\n <form className={classes.form} onSubmit={handleSubmit} autoComplete=\"off\">\r\n {createFilters(\r\n lang,\r\n registersData.filter((x) => x.isMain),\r\n filterValues,\r\n handleChange,\r\n setErrors,\r\n errors\r\n )}\r\n {showExtraFilters &&\r\n createFilters(\r\n lang,\r\n registersData.filter((x) => !x.isMain),\r\n filterValues,\r\n handleChange,\r\n setErrors,\r\n errors\r\n )}\r\n <div className={classes.controls}>\r\n <Typography style={{ margin: '0 15px' }}>\r\n {t('PUSH_NOTIFICATION.FILTER.EXTRA_FIELDS')}\r\n {' '}\r\n <IconButton onClick={() => setShowExtraFilters(!showExtraFilters)}>\r\n <ArrowDropDownCircleIcon\r\n color=\"primary\"\r\n className={clsx(classes.arrowIcon, {\r\n [classes.arrowIconUp]: showExtraFilters,\r\n })}\r\n />\r\n </IconButton>\r\n </Typography>\r\n <div className={classes.formActions}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n >\r\n {t('BUTTON.APPLY')}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.btn}\r\n onClick={() => handleSearchClick(true)}\r\n >\r\n {t('BUTTON.CLEAR')}\r\n </Button>\r\n </div>\r\n </div>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default FilterBlock;\r\n","import React, { useEffect } from 'react';\r\nimport * as yup from 'yup';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useForm, Controller } from 'react-hook-form';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport InputField from '../../../inputs/InputField';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(2),\r\n flexGrow: 1,\r\n },\r\n title: {\r\n margin: `${theme.spacing(2)}px 0 ${theme.spacing(4)}px`,\r\n },\r\n inputsWrapper: {\r\n display: 'flex',\r\n flexFlow: 'row wrap',\r\n justifyContent: 'space-evenly',\r\n alignItems: 'center',\r\n },\r\n item: {\r\n flex: 1,\r\n padding: `0 ${theme.spacing(2)}px`,\r\n },\r\n sendBtn: {\r\n margin: `${theme.spacing(2)}px auto`,\r\n display: 'block',\r\n },\r\n}));\r\n\r\nconst defaultValues = {\r\n titleKk: '',\r\n titleRu: '',\r\n titleEn: '',\r\n bodyKk: '',\r\n bodyRu: '',\r\n bodyEn: '',\r\n};\r\n\r\nconst PushForm = ({ count = null, handleFormSubmit, sending }) => {\r\n const { t, i18n } = useTranslation();\r\n const classes = useStyles();\r\n const {\r\n handleSubmit,\r\n setValue,\r\n errors,\r\n control,\r\n reset,\r\n watch,\r\n triggerValidation,\r\n } = useForm({\r\n defaultValues: defaultValues,\r\n validationSchema: yup.object().shape({\r\n titleKk: yup\r\n .string()\r\n .max(200, t('YUP.STRING.MAX').replace('{0}', 200))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n titleRu: yup\r\n .string()\r\n .max(200, t('YUP.STRING.MAX').replace('{0}', 200))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n titleEn: yup\r\n .string()\r\n .max(200, t('YUP.STRING.MAX').replace('{0}', 200))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n bodyKk: yup\r\n .string()\r\n .max(1500, t('YUP.STRING.MAX').replace('{0}', 1500))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n bodyRu: yup\r\n .string()\r\n .max(1500, t('YUP.STRING.MAX').replace('{0}', 1500))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n bodyEn: yup\r\n .string()\r\n .max(1500, t('YUP.STRING.MAX').replace('{0}', 1500))\r\n .required(t('YUP.STRING.REQUIRED')),\r\n }),\r\n });\r\n\r\n useEffect(() => {\r\n i18n.on('languageChanged', async () => {\r\n for (let fieldName in errors) {\r\n await triggerValidation(fieldName);\r\n }\r\n });\r\n return () => {\r\n i18n.off('languageChanged', () => {});\r\n };\r\n }, [errors, i18n, triggerValidation]);\r\n\r\n const onSubmit = async (values) => {\r\n const success = await handleFormSubmit(values);\r\n if (success) reset(defaultValues);\r\n };\r\n\r\n const values = watch();\r\n\r\n return (\r\n <Paper className={classes.root}>\r\n {count !== null && (\r\n <Typography variant=\"h6\" align=\"center\" className={classes.title}>\r\n {t('PUSH_NOTIFICATION.FORM.TITLE').replace('{0}', count)}\r\n </Typography>\r\n )}\r\n <form onSubmit={handleSubmit(onSubmit)} autoComplete=\"off\">\r\n <Typography style={{ marginLeft: 40 }}>\r\n {t('PUSH_NOTIFICATION.FORM.SUB_TITLE')}\r\n </Typography>\r\n <div className={classes.inputsWrapper}>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"titleKk\"\r\n label={t('COMMON.KK')}\r\n error={errors?.titleKk?.message}\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.titleKk}\r\n />\r\n </div>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"titleRu\"\r\n label={t('COMMON.RU')}\r\n error={errors?.titleRu?.message}\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.titleRu}\r\n />\r\n </div>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"titleEn\"\r\n label={t('COMMON.EN')}\r\n error={errors?.titleEn?.message}\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.titleEn}\r\n />\r\n </div>\r\n </div>\r\n <Typography style={{ marginLeft: 40 }}>\r\n {t('PUSH_NOTIFICATION.FORM.BODY')}\r\n </Typography>\r\n <div className={classes.inputsWrapper}>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"bodyKk\"\r\n label={t('COMMON.KK')}\r\n error={errors?.bodyKk?.message}\r\n rows={12}\r\n multiline\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.bodyKk}\r\n />\r\n </div>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"bodyRu\"\r\n label={t('COMMON.RU')}\r\n error={errors?.bodyRu?.message}\r\n rows={12}\r\n multiline\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.bodyRu}\r\n />\r\n </div>\r\n <div className={classes.item}>\r\n <Controller\r\n as={InputField}\r\n control={control}\r\n name=\"bodyEn\"\r\n label={t('COMMON.EN')}\r\n error={errors?.bodyEn?.message}\r\n rows={12}\r\n multiline\r\n handleChange={(e) => setValue(e.target.name, e.target.value)}\r\n initialValue={values.bodyEn}\r\n />\r\n </div>\r\n </div>\r\n <div>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n className={classes.sendBtn}\r\n disabled={sending}\r\n >\r\n {t('COMMON.SEND')}\r\n </Button>\r\n </div>\r\n </form>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default PushForm;\r\n","import React, { useEffect, useState, useRef, Fragment } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n createNotifier,\r\n closeNotifier,\r\n} from '../../../actions/snackbarActions';\r\nimport { httpGet, httpPost, isEmpty } from '../../../helpers';\r\nimport Spinner from '../../common/Spinner';\r\nimport PushRolesFilter from './roles-filter/PushRolesFilter';\r\nimport PushMainFilter from './main-filter/PushMainFilter';\r\nimport PushForm from './form/PushForm';\r\n\r\nconst PushNotification = ({ createNotifier, closeNotifier, lang }) => {\r\n const { t } = useTranslation();\r\n const isMounted = useRef(false);\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [settings, setSettings] = useState({});\r\n const [rolesFilter, setRolesFilter] = useState({\r\n roleId: '',\r\n category: '',\r\n });\r\n const [mainFilterSettings, setMainFilterSettings] = useState({});\r\n const [mainFilter, setMainFilter] = useState({});\r\n const [mainFilterLoading, setMainFilterLoading] = useState(false);\r\n const [receivers, setReceivers] = useState({});\r\n const [sending, setSending] = useState(false);\r\n\r\n useEffect(() => {\r\n isMounted.current = true;\r\n\r\n const fetch = async () => {\r\n setLoading(true);\r\n try {\r\n const settingsResponse = await httpGet(\r\n '/api/pushnotification/admin/settings',\r\n {},\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n }\r\n );\r\n if (settingsResponse) {\r\n setSettings(settingsResponse);\r\n }\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n if (isMounted.current) fetch();\r\n\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, [createNotifier, closeNotifier, t]);\r\n\r\n const handleRolesFilterChange = (e) => {\r\n setRolesFilter({ ...rolesFilter, [e.target.name]: e.target.value });\r\n };\r\n\r\n const handleRolesFormSubmit = async (e) => {\r\n e.preventDefault();\r\n\r\n const response = await httpGet(\r\n '/api/pushnotification/admin/filters',\r\n {\r\n roleId: rolesFilter.roleId,\r\n },\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n }\r\n );\r\n\r\n if (response) setMainFilterSettings(response);\r\n };\r\n\r\n const handleMainFilterChange = (e) => {\r\n setMainFilter({ ...mainFilter, [e.target.name]: e.target.value });\r\n };\r\n\r\n const handleMainFilterSubmit = async (clean) => {\r\n if (clean) {\r\n setMainFilter({});\r\n setReceivers({});\r\n return;\r\n }\r\n\r\n setMainFilterLoading(true);\r\n try {\r\n const response = await httpPost(\r\n '/api/pushnotification/admin/receivers?roleId=' + rolesFilter.roleId,\r\n {\r\n ...mainFilter,\r\n oldFilter:\r\n Object.keys(receivers).length > 0 ? receivers.filterId : null,\r\n },\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n }\r\n );\r\n if (response) {\r\n setReceivers(response);\r\n }\r\n } finally {\r\n setMainFilterLoading(false);\r\n }\r\n };\r\n\r\n const handlePushFormSubmit = async (data) => {\r\n const formData = new FormData();\r\n for (var key in data) {\r\n formData.append(key, data[key]);\r\n }\r\n\r\n formData.append('category', rolesFilter.category);\r\n formData.append('filterId', receivers.filterId);\r\n\r\n setSending(true);\r\n try {\r\n const response = await httpPost(\r\n '/api/pushnotification/',\r\n formData,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n },\r\n { headers: { 'Content-Type': 'multipart/form-data' } }\r\n );\r\n\r\n if (response) {\r\n return true;\r\n }\r\n } finally {\r\n setSending(false);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return (\r\n <div>\r\n {loading || isEmpty(settings) ? (\r\n <Spinner />\r\n ) : (\r\n <Fragment>\r\n <PushRolesFilter\r\n filterValues={rolesFilter}\r\n handleChange={handleRolesFilterChange}\r\n handleSubmit={handleRolesFormSubmit}\r\n settings={settings}\r\n clearFilter={() => {\r\n setRolesFilter({ roleId: '', category: '' });\r\n setMainFilterSettings({});\r\n setReceivers({});\r\n }}\r\n />\r\n {!isEmpty(mainFilterSettings) && (\r\n <PushMainFilter\r\n lang={lang}\r\n registersData={mainFilterSettings}\r\n filterValues={mainFilter}\r\n handleChange={handleMainFilterChange}\r\n handleSearchClick={handleMainFilterSubmit}\r\n />\r\n )}\r\n {mainFilterLoading ? (\r\n <Spinner />\r\n ) : (\r\n !isEmpty(receivers) && (\r\n <PushForm\r\n count={receivers.count}\r\n sending={sending}\r\n handleFormSubmit={handlePushFormSubmit}\r\n />\r\n )\r\n )}\r\n </Fragment>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n PushNotification\r\n);\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n createNotifier,\r\n closeNotifier,\r\n} from '../../../actions/snackbarActions';\r\nimport { httpPost } from '../../../helpers';\r\nimport PushForm from './form/PushForm';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport SelectField from '../../inputs/SelectField';\r\n\r\nconst PushNotification = ({ createNotifier, closeNotifier, lang }) => {\r\n const { t } = useTranslation();\r\n const [sending, setSending] = useState(false);\r\n const [topic, setTopic] = useState('');\r\n\r\n const handlePushFormSubmit = async (data) => {\r\n const formData = new FormData();\r\n formData.append('topic', topic);\r\n for (var key in data) {\r\n formData.append(key, data[key]);\r\n }\r\n\r\n setSending(true);\r\n try {\r\n const response = await httpPost(\r\n '/api/pushnotification/',\r\n formData,\r\n {\r\n createNotifier,\r\n closeNotifier,\r\n translator: t,\r\n },\r\n { headers: { 'Content-Type': 'multipart/form-data' } }\r\n );\r\n\r\n if (response) {\r\n return true;\r\n }\r\n } finally {\r\n setSending(false);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n return (\r\n <div>\r\n <Paper style={{ marginBottom: 15, textAlign: 'center', padding: 15 }}>\r\n <SelectField\r\n name=\"topic\"\r\n initialValue={topic}\r\n label={t('PUSH_NOTIFICATION.TOPIC')}\r\n customHandle=\"pushTopic\"\r\n handleChange={(e) => setTopic(e.target.value)}\r\n />\r\n </Paper>\r\n {topic !== '' && (\r\n <PushForm sending={sending} handleFormSubmit={handlePushFormSubmit} />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n lang: state.locale.lang,\r\n});\r\n\r\nexport default connect(mapStateToProps, { createNotifier, closeNotifier })(\r\n PushNotification\r\n);\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport HorizontalTabs from '../../tabs/HorizontalTabs';\r\nimport PushNotificationByFilter from './PushNotificationByFilter';\r\nimport PushNotificationByTopic from './PushNotificationByTopic';\r\n\r\nconst PushNotification = () => {\r\n const { t } = useTranslation();\r\n\r\n const tabs = [\r\n {\r\n tab: {\r\n label: t('PUSH_NOTIFICATION.TABS.BY_FILTER'),\r\n },\r\n tabpanel: <PushNotificationByFilter />,\r\n },\r\n {\r\n tab: {\r\n label: t('PUSH_NOTIFICATION.TABS.BY_TOPIC'),\r\n },\r\n tabpanel: <PushNotificationByTopic />,\r\n },\r\n ];\r\n\r\n return <HorizontalTabs data={tabs} />;\r\n};\r\n\r\nexport default PushNotification;\r\n","import React, { useState, Suspense } from 'react';\r\nimport { Route, Switch } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n// Custom components\r\nimport PrivateRoute from './common/PrivateRoute';\r\nimport NotFound from './common/NotFound';\r\nimport Notifier from './snackbar/Notifier';\r\nimport Header from './layouts/Header';\r\nimport SideBar from './navbars/SideBar';\r\nimport Dashboard from './dashboard/Dashboard';\r\nimport Login from './auth/Login';\r\nimport FilterTable from './filterableTable/FilterTable';\r\nimport Profile from './pages/Profile';\r\nimport AHDDataCollection from './pages/AHDDataCollection';\r\nimport Logs from './modules/references/Logs';\r\nimport Bypass from './modules/references/bypass/Bypass';\r\nimport PushNotification from './modules/push/PushNotification';\r\n\r\nimport Spinner from './common/Spinner';\r\n\r\n// Styles\r\nimport appStyles from '../assets/jss/components/app';\r\n\r\n// Lazy\r\nconst Schedule = React.lazy(() => import('./modules/schedule/Schedule'));\r\nconst useStyle = makeStyles(appStyles);\r\n\r\nconst App = (props) => {\r\n const classes = useStyle();\r\n const [sideBarOpen, setSideBarOpen] = useState(false);\r\n const { auth } = props;\r\n\r\n const handleSideBarOpen = () => {\r\n setSideBarOpen(true);\r\n };\r\n\r\n const handleSideBarClose = () => {\r\n setSideBarOpen(false);\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <Notifier />\r\n <Header sideBarOpen={sideBarOpen} handleSideBarOpen={handleSideBarOpen} />\r\n {auth.isAuthorized && (\r\n <SideBar\r\n open={sideBarOpen}\r\n handleSideBarClose={handleSideBarClose}\r\n auth={auth}\r\n />\r\n )}\r\n <main className={classes.content}>\r\n <Switch>\r\n <Route exact path=\"/login\" component={Login} />\r\n <Route exact path=\"/tables/:handle\" component={FilterTable} />\r\n <PrivateRoute exact path=\"/\" component={Dashboard} />\r\n <PrivateRoute exact path=\"/profile\" component={Profile} />\r\n <PrivateRoute exact path=\"/ahd\" component={AHDDataCollection} />\r\n <PrivateRoute exact path=\"/references\" component={Logs} />\r\n <PrivateRoute\r\n exact\r\n path=\"/push-notification\"\r\n component={PushNotification}\r\n />\r\n <PrivateRoute exact path=\"/bypass\" component={Bypass} />\r\n {auth.data.userGroup === 'admin' && (\r\n <Suspense fallback={<Spinner />}>\r\n <PrivateRoute exact path=\"/schedule\" component={Schedule} />\r\n </Suspense>\r\n )}\r\n <Route component={NotFound} />\r\n </Switch>\r\n </main>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n auth: state.auth,\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(App);\r\n","import { drawerWidth } from '../base';\r\n\r\nexport default (theme) => ({\r\n root: {\r\n display: 'flex',\r\n width: '100%',\r\n overflow: 'auto',\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n marginTop: 80,\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n position: 'relative',\r\n minHeight: '100vh',\r\n '& > div': {\r\n overflow: 'hidden',\r\n },\r\n },\r\n});\r\n","import i18n from 'i18next';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport { initReactI18next } from 'react-i18next';\r\n// import XHR from 'i18next-xhr-backend';\r\n\r\n// Resources\r\nimport commonKk from '../locales/kk/common.json';\r\nimport commonRu from '../locales/ru/common.json';\r\nimport commonEn from '../locales/en/common.json';\r\n\r\nconst resources = {\r\n kk: {\r\n common: commonKk\r\n },\r\n ru: {\r\n common: commonRu\r\n },\r\n en: {\r\n common: commonEn\r\n }\r\n};\r\n\r\ni18n\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: 'ru',\r\n ns: ['common'],\r\n defaultNS: 'common',\r\n fallbackNS: 'common',\r\n nonExplicitWhitelist: true,\r\n lng: 'ru', // 'kk' | 'en' | 'ru'\r\n debug: process.env.NODE_ENV === 'development',\r\n interpolation: {\r\n escapeValue: false // not needed for react as it escapes by default\r\n },\r\n resources\r\n });\r\n\r\nexport default i18n;\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider } from 'react-redux';\r\nimport store from './settings/store';\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\nimport theme from './settings/theme';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { SnackbarProvider } from 'notistack';\r\nimport App from './components/App.jsx';\r\nimport './settings/i18n';\r\nimport jwt_decode from 'jwt-decode';\r\nimport { setAuthTokenToHeader } from './helpers';\r\nimport { setCurrentUser, logoutUser } from './actions/authActions';\r\nimport { unregister } from './registerServiceWorker';\r\n\r\nunregister();\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\n// Auth logic\r\nif (localStorage.jwtToken) {\r\n // Set auth token to request header\r\n setAuthTokenToHeader(localStorage.jwtToken);\r\n // Decode token\r\n const decoded = jwt_decode(localStorage.jwtToken);\r\n // Set user and isAuthorized\r\n store.dispatch(setCurrentUser(decoded));\r\n\r\n const currentTime = Date.now() / 1000;\r\n if (decoded.exp < currentTime) {\r\n // Logout user\r\n store.dispatch(logoutUser());\r\n\r\n window.location.href = `/login?back=${window.location.href}`;\r\n }\r\n}\r\n\r\nReactDOM.render(\r\n <BrowserRouter basename={baseUrl}>\r\n <Provider store={store}>\r\n <ThemeProvider theme={theme}>\r\n <SnackbarProvider\r\n maxSnack={3}\r\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\r\n >\r\n <CssBaseline />\r\n <App />\r\n </SnackbarProvider>\r\n </ThemeProvider>\r\n </Provider>\r\n </BrowserRouter>,\r\n rootElement\r\n);\r\n\r\n// registerServiceWorker();\r\n","export default theme => ({\r\n formGroup: {\r\n display: \"flex\",\r\n flexFlow: \"column nowrap\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n minWidth: 280,\r\n margin: \"15px auto\"\r\n },\r\n input: {\r\n width: \"100%\",\r\n margin: \"15px auto\",\r\n backgroundColor: theme.palette.primary.main,\r\n borderRadius: theme.shape.borderRadius\r\n },\r\n formControl: {\r\n minWidth: 280,\r\n margin: \"15px auto\"\r\n },\r\n file: {\r\n display: \"none\"\r\n }\r\n});\r\n","import React, { useState, useEffect } from 'react';\r\nimport axios from 'axios';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nexport const useHttpGet = (\r\n url,\r\n dependencies,\r\n params = {},\r\n notifActions = {}\r\n) => {\r\n const [isLoading, setLoading] = useState(false);\r\n const [fetchedData, setFetchedData] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!dependencies.includes(undefined)) {\r\n setLoading(true);\r\n\r\n axios\r\n .get(url, {\r\n params,\r\n })\r\n .then((response) => {\r\n setFetchedData(response.data);\r\n })\r\n .catch((e) => {\r\n setFetchedData(false);\r\n\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n } = notifActions;\r\n\r\n createNotifier({\r\n message: 'Не удалось получить данные',\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n <IconButton onClick={() => closeNotifier(key)}>\r\n <CloseIcon />\r\n </IconButton>\r\n ),\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n }\r\n }, dependencies);\r\n\r\n return [isLoading, fetchedData];\r\n};\r\n\r\nexport const useHttpPost = (url, body, dependencies, notifActions) => {\r\n const [isLoading, setLoading] = useState(false);\r\n const [fetchedData, setFetchedData] = useState(null);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n axios\r\n .post(url, body)\r\n .then((response) => {\r\n setFetchedData(response.data);\r\n })\r\n .catch((e) => {\r\n setFetchedData(false);\r\n\r\n const {\r\n createNotifier = function () {},\r\n closeNotifier = function () {},\r\n } = notifActions;\r\n\r\n createNotifier({\r\n message: 'Не удалось получить данные',\r\n options: {\r\n variant: 'warning',\r\n key: new Date().getTime() + Math.random(),\r\n action: (key) => (\r\n <IconButton onClick={() => closeNotifier(key)}>\r\n <CloseIcon />\r\n </IconButton>\r\n ),\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n }, dependencies);\r\n\r\n return [isLoading, fetchedData];\r\n};\r\n"],"sourceRoot":""}