{"version":3,"sources":["Components/Formaters/FormaterString.js","Components/Formaters/FormaterDate.js","Components/Formaters/FormaterID.jsx","api/apiFunc.js","dataconfig/columnsGrids.js","projConst.js","api/mockData.js","api/mockDepend.js","Components/Lib/ListIcons.jsx","Components/ShowAppHeader.jsx","Components/ShowAppToolbar.jsx","Components/ShowAppFooter.jsx","Components/Lib/SelectDataList.jsx","Components/ShowAppSidebar.jsx","Components/Formaters/FormaterPick.jsx","Components/Lib/ShowGrid.jsx","Components/Lib/TestGrid.jsx","Components/ShowTotal.jsx","Components/Lib/YearMonthPicker.jsx","Components/Lib/ShowFilter.js","Server/DataServerContext.jsx","Components/FormGrid.jsx","infowindow/infowinContext.js","Components/ShowAzureMap.jsx","key.js","App.jsx","api/mockUIapp.js","types.js","Main.js","Actions/actions.jsx","serviceWorker.js","Reducers/mainuniui.js","Reducers/maindata.js","Reducers/listdata.js","Reducers/mainscreen.js","Reducers/index.js","infowindow/CustomSnackbars.jsx","infowindow/ShowDialog.jsx","infowindow/infowinReducer.js","infowindow/InfowinState.js","Components/Lib/CustomSnackbars.jsx","Server/DataServer.jsx","index.js"],"names":["FormaterString","Component","props","state","curvalue","value","nextProps","this","style","textAlign","Align","color","Color","wordWrap","wordBreak","title","FormaterID","marginTop","src","Src","width","Width","height","Height","isNotEmptyArr","arr","Array","isArray","length","undefined","isEmpty","obj","key","toDateFormatJSON","val","sep","R","arrVal","substring","split","HandleFindError","is_error","error_text","is_err","mess","mutableListSelect","list","label","reduce","result","elem","id","sleep","delay","Promise","resolve","setTimeout","FetchLiteUrl","strUrl","post","userarg","thisMock","mockdata","a","mockdataempty","reject","request","get","body","set","send","parsingCss","data","css","child","map","el","Spinner","className","CustomHeader","item","text","short","background","opacity","backgroundColor","marginLeft","marginRight","marginBottom","fontSize","fontWeight","fontFamily","api","column","name","shortname","columnsMainData","frozen","resizable","_type","headerRenderer","formatter","row","ID","FontSize","editable","StationCode","StationName","StationNameLong","Lat","Lng","CodeEcp","TypeExport","RailwayId","TypePort","StationNameEn","PrizDel","columnsFilter","_typecolumn","_picklist","_typedata","_filterval","window","location","origin","BaseAddress","hostname","pathname","indexOf","apiDataUIUrl","host","apiDataUrl","apiSaveUrl","apiListUrl","main_data","main_data_row_empty","main_data_empty","pick_data","ListIcons","icons","iconsapp","access","filtered","handleOnClick","nodiv","classnam","dopargs","useState","OneIcon","iconapp","useraccess","ui_app_icon_mnem","accessstyle","cursor","icon","iconfile","icontype","ui_app_icon_file","type","file","d","slice","PrepareIcon","SvgIcon","onClick","sort","b","order","useStyles","makeStyles","theme","root","display","content","paddingLeft","spacing","unit","ShowAppHeader","config","curBlock","SetCurBlock","iconsApp","SetIconsApp","useEffect","configApp","headerClick","alert","ui_app_icon_id","ComputedAccess","ref","goToLog","children","nameNsi","position","top","ShowAppToolbar","inputVal","SetInputVal","cur_Block","console","log","onSaveData","onInsertRow","onClearFilter","onColumnFilter","onDeleteRow","pick","mainfilter","curPeriod","curUser","curVidp","curUsers","rows","User","user_id","curVidps","Vidp","category_id","period","curDate","Date","toLocaleDateString","month","year","cstyle","margin","padding","border","borderRadius","ShowFilter","onChange","e","target","handleSeek","arg1","FindB","inputComponent","inputRef","components","Control","TextField","fullWidth","InputProps","inputProps","selectProps","classes","input","innerRef","innerProps","textFieldProps","Menu","Paper","square","paper","NoOptionsMessage","Typography","noOptionsMessage","Option","MenuItem","buttonRef","selected","isFocused","component","isSelected","Placeholder","placeholder","SingleValue","singleValue","ValueContainer","valueContainer","SelectDataList","handleChange","onHandleChange","selName","NoSsr","styleClass","options","selectList","curValue","withStyles","flexGrow","alignItems","flexWrap","flex","overflow","chip","chipFocused","emphasize","palette","grey","left","zIndex","right","divider","withTheme","textList","borderWidth","borderColor","borderStyle","boxShadow","textListNew","hight","textListNewSmall","textListNm","textField","textField2","EmptyRowsRenderer","rowKeyGetter","getComparator","sortColumn","localeCompare","Error","ShowGrid","totalrow","PrimaryId","columnsgrid","myfiolist","curidrow","Set","selectedRows","currow","Setcurrow","gridRef","useRef","sortColumns","setSortColumns","sortedRows","row_idx","current","scrollToRow","onCurRow","_rows","_columns","_PkFieldName","useMemo","editor","TextEditor","compResult","columnKey","comparator","direction","handleKeyDown","preventDefault","maxHeight","columns","defaultColumnOptions","sortable","onRowClick","onRowsChange","change","indexes","updcol","updrow","onHandleUpdateGrid","noRowsFallback","rowHeight","rowRenderer","custprops","rowIdx","onKeyDown","onSortColumnsChange","Intl","DateTimeFormat","navigator","language","NumberFormat","currency","head","common","white","TableCell","action","hover","TableRow","table","minWidth","maxWidth","YearMonthPicker","ruLocale","localize","buildLocalizeFn","values","narrow","abbreviated","wide","defaultWidth","defaultFormattingWidth","utils","DateFnsUtils","locale","DatePicker","views","helperText","minDate","maxDate","format","cancelLabel","selectedDate","handleDateChange","handleOpen","setState","open","handleClose","defaultSelectVal","picklist_values","def_val","x","maxLen","FiltVal","lastvalue","deffilter","k","col","curList","curId","InputMost","event","Dialog","dialogPaper","onClose","DialogTitle","DialogContent","checked","InputCheck","pkRow","tmpRow","_","InputSelect","dateValue","InputDate","InputMonthYear","DialogActions","Button","callB","_alias","moment","onAnswer","idKey","curPkId","pkid","curval","shadows","button","message","grid","minHeight","DataServerContext","flexDirection","createContext","InfoWinContext","point4","Position","setPos","pos","setPosPopur","prop","geometry","coordinates","memoizedOptions","textOptions","offset","eventToMarker","eventName","callback","renderPoint","marker","rendId","Math","random","toString","coordinate","coord","properties","popUpProp","events","ShowAzureMap","onUpdCoordinates","onSearchStation","markers","setMarkers","curmarker","setCurMarker","markersLayer","markerLayer","showAllMarcers","setShowAllMarcers","popupOptions","setPopupOptions","curProperties","setCurProperties","popupProperties","setPopupProperties","visPopup","setVisPopup","sizeFont","setSizeFont","sizeFontSub","setSizeFontSub","getStationPos","setGetStationPos","res","newPoint","code","initDataMarkers","initDataMarker","option","authOptions","authType","AuthenticationType","subscriptionKey","center","zoom","view","memoizedMarkerRender","memoizedCurMarkerRender","styles","buttonContainer","size","variant","getCamera","contextmenu","click","dataadded","cluster","clusterRadius","strokeColor","strokeWidth","iconOptions","image","allowOverlap","ignorePlacement","optional","mousemove","shapes","pixelOffset","lifecycleEvents","layeradded","font","lng","lat","setCamera","isVisible","popupContent","justifyContent","memo","responsPerson","apptitle","apptab","appinnertab","usertitle","alignSelf","App","useContext","messageWin","curmessage","alertWin","dialogWin","alertmessage","dialoganswer","dialog","getServerDataRedux","loading","dataserver","tree","db","argum","themeCss","globalCss","dispatch","useDispatch","mainlist","SetMainList","SetMainFilter","SetTotalList","SetTotalTable","SetPick","updatedData","SetUpdatedData","deleteData","SetDeleteData","insertData","SetInsertData","showFilter","SetShowFilter","curentRow","SetCurentRow","curentIdRow","SetCurentIdRow","newCoord","SetNewCoord","subfilter","Setsubfilter","maindata","useSelector","shallowEqual","listdata","prepareParam","datafilter","serverdata","datamain","datatotalrow","isTotalRow","datan","datak","planh","facth","done","d01","d02","d03","d04","d05","d06","d07","d08","d09","d10","d11","d12","d13","d14","d15","d16","d17","d18","d19","d20","d21","d22","d23","d24","d25","d26","d27","d28","d29","d30","d31","Object","keys","substr","datatotalvid","dat","filter","vidp","picklists","winDialogAnswer","userDialogAnswer","answer","handle_delete_row","handle_upd_coord","handle_coord","appParams","updated","idx","updData","temp","newupdated","handleFilterAnswer","listFilter","check","templist","Number","updrows","newcurrrow","viewmode","messageSimple","messagetitle","alertSimple","errorSimple","args","tempins","tmp","JSON","stringify","newrow","random_id","random_possible","i","charAt","floor","newrows","push","station","rowid","maxwidth","readonly","matchMedia","matches","onHandleMess","onHandleDelete","onHandleAdd","onMessage","FETCH_UNIVER_UI","FETCH_MAIN_DATA","FETCH_LIST_DATA","UUI_GLOBAL","UUI_THEME","SHOW_MESS_APP","SHOW_ALERT_APP","SHOW_DIALOG_APP","DIALOG_ANSWER","Main","useQueryParam","StringParam","NumberParam","mainuniui","mockUIapp","glcss","blocks","header","menu","getState","payload","UiThemecss","ldb","Boolean","match","initialState","combineReducers","mainscreen","variantIcon","success","CheckCircleIcon","warning","WarningIcon","error","ErrorIcon","info","InfoIcon","MySnackbarContentWrapper","green","dark","primary","amber","iconVariant","other","Icon","SnackbarContent","classNames","IconButton","close","CustomSnackbars","uservar","usermess","useropen","userClose","Snackbar","anchorOrigin","vertical","horizontal","React","ShowDialog","DialogContentText","statement","func","autoFocus","handlers","infowinReducer","DEFAULT","dense","menuButton","clgrid","divbutton","InfoWinState","useReducer","draw","typemess","messageWinClose","Provider","autoHideDuration","ContentProps","userdur","DataServer","Setloading","SetDataServer","SetAlertmessage","setLoading","param","getServerData","apiUrl","thismock","mock","SetState","showmess","durmess","then","onedata","duration","mockempty","store","createStore","reducer","composeWithDevTools","applyMiddleware","thunk","ReactDOM","render","document","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.7a826bfe.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass FormaterString extends Component {\r\n /* static propTypes = {\r\n value: PropTypes.string,\r\n value: PropTypes.number\r\n };\r\n */\r\n constructor(props) {\r\n super(props);\r\n //let viewValue = this.props.value\r\n // console.log('viewValue------',viewValue); \r\n this.state = {\r\n curvalue: this.props.value\r\n }\r\n //this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return nextProps.value !== this.props.value;\r\n }\r\n\r\n /* handleChange = date => \r\n this.setState({\r\n startDate: date\r\n });\r\n */\r\n\r\n render() { \r\n let curvalue\r\n if (this.props.value !== null) curvalue = this.props.value\r\n //return
{this.state.curvalue}
;\r\n return
{curvalue}
;\r\n }\r\n }\r\n\r\n export default FormaterString; ","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport DateTime from 'react-datetime';\r\nimport DatePicker from 'react-datepicker';\r\nimport moment from 'moment';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\n\r\nclass FormaterDate extends Component {\r\n static propTypes = {\r\n value: PropTypes.string\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n startDate: moment\r\n }\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return nextProps.value !== this.props.value;\r\n }\r\n\r\n handleChange = date => \r\n this.setState({\r\n startDate: date\r\n });\r\n \r\n\r\n render() { \r\n let curdate\r\n if (this.props.value !== null) {\r\n //console.log('this.props.value-------------',typeof(this.props.value),this.props.value)\r\n if (typeof(this.props.value) == 'string') {\r\n let value = this.props.value.split('-');\r\n curdate = new Date(this.props.value); \r\n // curdate = new Date(value[0], value[1] - 1, value[2]); \r\n }\r\n else\r\n {\r\n if (typeof(this.props.value) == 'object') {\r\n curdate = this.props.value._d\r\n }\r\n else\r\n {\r\n curdate = this.props.value\r\n }\r\n }\r\n\r\n let options = {year: 'numeric', month: 'numeric', day: 'numeric' };\r\n return
{curdate.toLocaleDateString('ru-RU'/*,options*/)}
;\r\n //return
{value.format(\"L\")}
;\r\n /* return
*/\r\n // return \r\n \r\n }\r\n else\r\n {\r\n let curdate = new Date() \r\n let options = {year: 'numeric', month: 'numeric', day: 'numeric' };\r\n return null\r\n // return
{curdate.toLocaleDateString('ru-RU',options)}
;\r\n }\r\n }\r\n }\r\n\r\n/*\r\n getColumns = () => {\r\n \r\n let eventDataGrid = {\r\n onClick: (ev, args) => {\r\n const idx = args.idx;\r\n const rowIdx = args.rowIdx;\r\n this.grid.openCellEditor(rowIdx, idx);\r\n }\r\n }\r\n \r\n return [\r\n {\r\n key: 'date',\r\n name: 'Date',\r\n width: 100,\r\n editable: true,\r\n editor:,\r\n formatter: ,\r\n events:eventDataGrid\r\n }]\r\n }\r\n */\r\n export default FormaterDate; ","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst FormaterID = (props) => {\r\n const { value } = props\r\n if (value !== null && typeof value === 'number') \r\n return
{value}
;\r\n else \r\n return
\r\n \r\n
\r\n }\r\n\r\n export default FormaterID; ","import React, {Fragment} from \"react\";\r\nimport request from \"superagent\";\r\nimport * as R from 'ramda'\r\nimport moment from 'moment';\r\n\r\nexport const isNotEmptyArr = (arr) => \r\n arr && Array.isArray(arr) && arr.length > 0 && arr[0] !== undefined\r\n\r\nexport const isEmpty = (obj) => {\r\n for (var key in obj) {\r\n return false;\r\n\r\n }\r\n return true;\r\n}\r\nconst is_Empty = (prop) => (\r\n prop === null ||\r\n prop === undefined ||\r\n (prop.hasOwnProperty('length') && prop.length === 0) ||\r\n (prop.constructor === Object && Object.keys(prop).length === 0)\r\n);\r\n\r\nexport const toDateFormat = (val) => {\r\n if (R.not(val)) return null\r\n const arrVal = val.substring(0,10).split('-')\r\n if (arrVal && arrVal.length == 3){\r\n const dat = `${arrVal[2]}.${arrVal[1]}.${arrVal[0]}`\r\n return dat\r\n }\r\n else\r\n return '';\r\n}\r\nexport const toDateFormatJSON = (val,sep) => {\r\n if (R.not(val)) return null\r\n const arrVal = val.substring(0,10).split(sep)\r\n if (arrVal && arrVal.length == 3){\r\n const dat = `${arrVal[2]}-${arrVal[1]}-${arrVal[0]}`\r\n return dat\r\n }\r\n else\r\n return '';\r\n}\r\n\r\nexport const isDateVal = (val) => {\r\n const arrVal = val.split('.')\r\n if (arrVal && arrVal.length == 3){\r\n const dat = `${arrVal[1]}.${arrVal[0]}.${arrVal[2]}`\r\n return moment(dat)._isValid\r\n }\r\n else\r\n return false;\r\n}\r\n\r\nexport const HandleFindError = (obj) => {\r\n if (!isEmpty(obj)){\r\n const {is_error,error_text} = obj\r\n if (is_error && is_error == 1) \r\n return {is_err : true , mess : error_text||null} \r\n }\r\n return {is_err : false , mess : null} \r\n}\r\n\r\nexport const mutableList = (list,id,name) => {\r\n if (!isNotEmptyArr(list)) \r\n return [{value : null, label : \"Нет данных\"}]\r\n return list.reduce(\r\n (result, elem) =>\r\n [...result, {value : elem[id],\r\n label : elem[name]} ],\r\n []\r\n )\r\n }\r\n export const mutablePickList = (list,id,name) => {\r\n if (!isNotEmptyArr(list)) \r\n return [{value : null, label : \"Нет данных\"}]\r\n return list.reduce(\r\n (result, elem) =>\r\n [...result, {id : elem[id],\r\n title : elem[name]} ],\r\n []\r\n )\r\n }\r\n export const mutableListSel = (list,val,lab,field1 = '',field2 = '') => {\r\n if (isEmpty(list)) \r\n return [{value: \"\", label: \"Нет данных\"}]\r\n const countlab = 17 \r\n return list.reduce(\r\n (result, elem) => {\r\n let fiel1 = elem[field1] ? elem[field1] : ''\r\n let fiel2 = elem[field2] ? elem[field2] : ''\r\n let elemlab = elem[lab] ? elem[lab] : ''\r\n //elemlab = typeof elemlab === 'string' ? elemlab.substring(0,countlab) : elemlab\r\n return [...result, {value : elem[val],label : `${elemlab} ${fiel1} ${fiel2}`} ]\r\n }, []\r\n )\r\n }\r\n export const mutableListSelDef = (list,val,lab,field1 = '',field2 = '') => {\r\n if (isEmpty(list)) \r\n return [{value: \"\", label: \"Нет данных\"}]\r\n return list.reduce(\r\n (result, elem) => {\r\n let fiel1 = elem[field1] ? elem[field1] : ''\r\n let fiel2 = elem[field2] ? elem[field2] : ''\r\n let elemlab = elem[lab] ? elem[lab] : ''\r\n //elemlab = typeof elemlab === 'string' ? elemlab.substring(0,countlab) : elemlab\r\n return [...result, {value : elem[val],label : `${elemlab} ${fiel1} ${fiel2}`} ]\r\n }, [{value : 0,label : ``}]\r\n )\r\n }\r\n export const mutableListSelect = list => {\r\n if (isEmpty(list))\r\n return [{ value: \"\", label: \"Нет данных\" }]\r\n \r\n return list.reduce(\r\n (result, elem) =>\r\n [...result, {\r\n value: elem.id,\r\n label: elem.title\r\n }],\r\n []\r\n )\r\n }\r\n \r\nexport const CustomFormatter = (text,short=text,color=null,background=null,opacity=1) => {\r\n let style = {};\r\n if ( color ) style.color = color;\r\n if ( background ) style.backgroundColor = background;\r\n style.height = '50px' \r\n style.marginTop = '-3px' \r\n style.marginLeft = '-7px' \r\n style.marginRight = '-8px' \r\n style.marginBottom = '-20px' \r\n style.textAlign = 'center'\r\n style.fontSize = '80%'\r\n style.fontWeight = '100'\r\n style.fontFamily = 'Arial'\r\n style.opacity = opacity\r\n //style.wordWrap = 'break-word'\r\n //style.wordBreak = 'break-all' \r\n return (color || background) ? (
{short}
) : (
{text}
);\r\n };\r\n\r\n/*\r\n Функция для отбора данных \r\n*/\r\nexport const SumTotalVid = (data) => {\r\n let datatotalvid = [{\r\n 'vidp': 'Плановая',\r\n 'planh': 0,\r\n 'facth': 0,\r\n 'percent': 0\r\n },\r\n {\r\n 'vidp': 'Внеплановая',\r\n 'planh': 0,\r\n 'facth': 0,\r\n 'percent': 0\r\n },\r\n {\r\n 'vidp': 'MFSM',\r\n 'planh': 0,\r\n 'facth': 0,\r\n 'percent': 0\r\n }]\r\n \r\n if (!isNotEmptyArr(data)) return datatotalvid\r\n datatotalvid.map((dat) => {\r\n Object.keys(data[0]).map((key) => {\r\n if (key == 'planh'||key == 'facth') \r\n dat[key] = data.filter(x=> x.vidp===dat.vidp.substr(0,1)).reduce((result, elem) => result+elem[key], 0)\r\n })\r\n })\r\n\r\n return datatotalvid\r\n}\r\n\r\nexport const SumTotalRow = (data) => {\r\n let datatotalrow = {isTotalRow: true,id: 0,datan: null,datak: null,planh: 0,facth: 0,done:0,\r\n d01:0,d02:0,d03:0,d04:0,d05:0,d06:0,d07:0,d08:0,d09:0,d10:0,d11:0,d12:0,d13:0,d14:0,d15:0, \r\n d16:0,d17:0,d18:0,d19:0,d20:0,d21:0,d22:0,d23:0,d24:0,d25:0,d26:0,d27:0,d28:0,d29:0,d30:0,d31:0}\r\n\r\n if (!isNotEmptyArr(data)) return datatotalrow\r\n\r\n Object.keys(data[0]).map((key) => {\r\n if (key == 'planh'||key == 'facth'||(key.length==3 && key.substr(0,1) == 'd')) \r\n datatotalrow[key] = data.reduce((result, elem) => result+elem[key], 0)\r\n if (key == 'done') \r\n datatotalrow[key] = data.reduce((result, elem) => result+(elem[key]=='+'?1:0), 0)\r\n })\r\n\r\n return datatotalrow\r\n}\r\n\r\nexport const filterDataChoisePack = (dataArray, filter , name_columns) =>\r\n {\r\n let filteredArray = dataArray.filter(data => {\r\n //console.log('filterDataChoise',filter,name_columns);\r\n if (R.not(filter.turn)) return true;\r\n\r\n let found = false;\r\n\r\n Object.keys(data).map((key) => {\r\n // console.log('key,name_columns',key,name_columns)\r\n if (R.contains(key,name_columns)){\r\n if (typeof(data[key]) === 'string'){\r\n //console.log('filter[key],data[key]',filter[key],data[key],key)\r\n if (filter[key])\r\n found = found || R.contains(filter[key],data[key])\r\n else {\r\n if (key === 'datesupply'&&filter['day01']&&filter['day02']) {\r\n let startDate = moment(filter['day01']).toDate()\r\n let endDate = moment(filter['day02']).toDate()\r\n let date = moment(data[key]).toDate()\r\n found = found || (date > startDate && date < endDate)\r\n }\r\n } \r\n //console.log('found',found)\r\n }\r\n if (typeof(data[key]) === 'number'){\r\n let datakey = String(data[key])\r\n if (filter[key])\r\n found = found || R.contains(filter[key],datakey)\r\n }\r\n }\r\n });\r\n return found;\r\n });\r\n //console.log('filteredArray--',filteredArray);\r\n\r\n return filteredArray;\r\n }\r\n\r\n export const filterDataChoiseSpis = (dataArray, filter , name_columns,key) =>\r\n {\r\n if (isEmpty(dataArray)) return false\r\n let filteredArray = dataArray.filter(data => {\r\n if (isEmpty(filter)) return true\r\n \r\n let found = false;\r\n found = found || (filter[key] === data[key])\r\n\r\n return found;\r\n });\r\n //console.log('filteredArray--',filteredArray);\r\n\r\n return filteredArray;\r\n}\r\n\r\nfunction sleep(delay = 0) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, delay);\r\n });\r\n}\r\n\r\nexport const FetchLiteUrl = async (strUrl, post, userarg, thisMock, mockdata, mockdataempty = {}) => {\r\n if (thisMock||strUrl=='') {\r\n await sleep(200); \r\n return new Promise((resolve, reject) => { resolve(mockdata); });\r\n } else {\r\n if (!post) {\r\n const { body } = await request.get(strUrl);\r\n return body;\r\n } else {\r\n try {\r\n const { body } = await request\r\n .post(strUrl)\r\n .set(\"Content-Type\", \"application/json\")\r\n .send({ ...userarg });\r\n return body;\r\n }\r\n catch { \r\n return mockdataempty;\r\n }\r\n }\r\n }\r\n\r\n}\r\nexport const computeRow = () => {\r\n if (window.matchMedia(`(max-width: 800px)`).matches)\r\n return 9\r\n if (window.matchMedia(`(max-width: 900px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 1100px)`).matches)\r\n return 11\r\n if (window.matchMedia(`(max-width: 1200px)`).matches)\r\n return 12\r\n if (window.matchMedia(`(max-width: 1300px)`).matches)\r\n return 12\r\n if (window.matchMedia(`(max-width: 1400px)`).matches)\r\n return 13\r\n if (window.matchMedia(`(max-width: 1500px)`).matches)\r\n return 14\r\n if (window.matchMedia(`(max-width: 1600px)`).matches)\r\n return 15\r\n if (window.matchMedia(`(max-width: 1700px)`).matches)\r\n return 18\r\n if (window.matchMedia(`(max-width: 1800px)`).matches)\r\n return 22\r\n if (window.matchMedia(`(max-width: 1900px)`).matches)\r\n return 22\r\n if (window.matchMedia(`(max-width: 2000px)`).matches)\r\n return 25\r\n if (window.matchMedia(`(max-width: 2100px)`).matches)\r\n return 25\r\n if (window.matchMedia(`(max-width: 2400px)`).matches)\r\n return 25\r\n\r\n return 25\r\n}\r\nexport const computeRowOne = () => {\r\n if (window.matchMedia(`(max-width: 800px)`).matches)\r\n return 5\r\n if (window.matchMedia(`(max-width: 900px)`).matches)\r\n return 6\r\n if (window.matchMedia(`(max-width: 1100px)`).matches)\r\n return 6\r\n if (window.matchMedia(`(max-width: 1200px)`).matches)\r\n return 8\r\n if (window.matchMedia(`(max-width: 1300px)`).matches)\r\n return 8\r\n if (window.matchMedia(`(max-width: 1400px)`).matches)\r\n return 9\r\n if (window.matchMedia(`(max-width: 1500px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 1600px)`).matches)\r\n return 12\r\n if (window.matchMedia(`(max-width: 1700px)`).matches)\r\n return 12\r\n if (window.matchMedia(`(max-width: 1800px)`).matches)\r\n return 14\r\n if (window.matchMedia(`(max-width: 1900px)`).matches)\r\n return 15\r\n if (window.matchMedia(`(max-width: 2000px)`).matches)\r\n return 17\r\n if (window.matchMedia(`(max-width: 2100px)`).matches)\r\n return 17\r\n if (window.matchMedia(`(max-width: 2400px)`).matches)\r\n return 17\r\n\r\n return 17\r\n}\r\n\r\nexport const computeRowTwo = () => {\r\n if (window.matchMedia(`(max-width: 800px)`).matches)\r\n return 3\r\n if (window.matchMedia(`(max-width: 900px)`).matches)\r\n return 4\r\n if (window.matchMedia(`(max-width: 1100px)`).matches)\r\n return 4\r\n if (window.matchMedia(`(max-width: 1200px)`).matches)\r\n return 4\r\n if (window.matchMedia(`(max-width: 1300px)`).matches)\r\n return 6\r\n if (window.matchMedia(`(max-width: 1400px)`).matches)\r\n return 6\r\n if (window.matchMedia(`(max-width: 1500px)`).matches)\r\n return 6\r\n if (window.matchMedia(`(max-width: 1600px)`).matches)\r\n return 7\r\n if (window.matchMedia(`(max-width: 1700px)`).matches)\r\n return 7\r\n if (window.matchMedia(`(max-width: 1800px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 1900px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 2000px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 2100px)`).matches)\r\n return 10\r\n if (window.matchMedia(`(max-width: 2400px)`).matches)\r\n return 10\r\n\r\n return 10\r\n}\r\n\r\nexport const parsingCss = (data,css,key,child) => {\r\n \r\n if (!isNotEmptyArr(data)) return ''\r\n data.map(el => {\r\n if (el[key] && el[key].length) \r\n css = css+'\\n'+el[key] \r\n if (el[child] && isNotEmptyArr(el[child])) \r\n css = parsingCss(el[child],css,key,child) \r\n })\r\n return css\r\n }\r\n\r\nexport const Spinner = () => \r\n
\r\n
\r\n
Загрузка...
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n export const GridHeight = () => {\r\n if (window.matchMedia(`(max-height: 600px)`).matches)\r\n return '80vh'\r\n if (window.matchMedia(`(max-height: 700px)`).matches)\r\n return '85vh'\r\n if (window.matchMedia(`(max-height: 800px)`).matches)\r\n return '88vh'\r\n if (window.matchMedia(`(max-height: 900px)`).matches)\r\n return '88vh'\r\n if (window.matchMedia(`(max-height: 1000px)`).matches)\r\n return '92vh'\r\n if (window.matchMedia(`(max-height: 1100px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1200px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1300px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1400px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1500px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1600px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1700px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1800px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 1900px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 2000px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 2100px)`).matches)\r\n return '95vh'\r\n if (window.matchMedia(`(max-height: 2400px)`).matches)\r\n return '95vh'\r\n \r\n return '95vh'\r\n }\r\n ","import FormaterColorWeek from '../Components/Formaters/FormaterColorWeek';\r\nimport FormaterColorFact from '../Components/Formaters/FormaterColorFact';\r\nimport FormaterDate from '../Components/Formaters/FormaterDate';\r\nimport FormaterString from '../Components/Formaters/FormaterString';\r\nimport FormaterID from '../Components/Formaters/FormaterID';\r\n//import { SelectColumn } from 'react-data-grid';\r\nimport * as api from '../api/apiFunc';\r\n\r\nconst lday = 50;\r\nfunction CustomHeader(item) {\r\n return api.CustomFormatter(item.column.name,item.column.shortname,'white','#343433',0.7)\r\n}\r\n\r\nexport const columnsMainData = [\r\n {\r\n key: 'ID', name: 'ID', frozen: false, resizable: true, width: 100, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const value = props.row.ID; return ; }\r\n },\r\n {\r\n key: 'StationCode', name: 'Код станции', resizable: true, frozen: false, editable: true, width: 150, _type: 0,\r\n /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.StationCode; return ; }\r\n },\r\n {\r\n key: 'StationName', name: 'Наименование станции', resizable: true, editable: true, width: 250, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.StationName; return ; }\r\n },\r\n {\r\n key: 'StationNameLong', name: 'Полное наимен. станции', resizable: true, editable: true, width: 250, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.StationNameLong; return ; }\r\n },\r\n {\r\n key: 'Lat', name: 'Широта', resizable: true, editable: true, width: 200, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.Lat; return ; }\r\n },\r\n {\r\n key: 'Lng', name: 'Долгота', resizable: true, editable: true, width: 200, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.Lng; return ; }\r\n },\r\n {\r\n key: 'CodeEcp', name: 'Код ЖД дороги ЕСР', resizable: true, editable: true, width: 150, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.CodeEcp; return ; }\r\n },\r\n {\r\n key: 'TypeExport', name: 'Признак импортной ж/д станции', resizable: true, editable: true, width: 200, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.TypeExport; return ; }\r\n },\r\n {\r\n key: 'RailwayId', name: 'Ключ на дорогу',shortname:'Ключ на дорогу', resizable: true, editable: true, width: 200, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.RailwayId; return ; }\r\n },\r\n {\r\n key: 'TypePort', name: 'Тип станции', resizable: true, editable: true, width: 150, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.TypePort; return ; }\r\n },\r\n {\r\n key: 'StationNameEn', name: 'Наим. станции на англ.', resizable: true, editable: true, width: 250, _type: 0, /*headerRenderer: CustomHeader,*/\r\n formatter(props) { const value = props.row.StationNameEn; return ; }\r\n },\r\n {\r\n key: 'PrizDel', name: 'Пр. удаления', resizable: true, editable: true, width: 150, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const value = props.row.PrizDel; return ; }\r\n },\r\n \r\n]\r\n\r\nexport const columnsFilter = [\r\n { key: 'StationCode', name: 'Код станции', _typecolumn : null, _picklist : null, _typedata : 4, _filterval: \"\", },\r\n { key: 'StationName', name: 'Наименование станции', _typecolumn : null, _picklist : null, _typedata : 4, _filterval: \"\", },\r\n { key: 'StationNameLong', name: 'Полное наимен. станции', _typecolumn: null, _picklist: null, _typedata: 4, _filterval: \"\", },\r\n { key: 'CodeEcp', name: 'Код ЖД дороги ЕСР', _typecolumn: null, _picklist: null, _typedata: 4, _filterval: \"\", },\r\n { key: 'TypeExport', name: 'Признак ж/д станции', _typecolumn: null, _picklist: null, _typedata: 1, _filterval: \"\", },\r\n { key: 'RailwayId', name: 'Ключ на дорогу', _typecolumn: null, _picklist: null, _typedata: 1, _filterval: \"\", },\r\n { key: 'TypePort', name: 'Тип станции', _typecolumn: null, _picklist: null, _typedata: 1, _filterval: \"\", },\r\n { key: 'StationNameEn', name: 'Наим. станции на англ.', _typecolumn: null, _picklist: null, _typedata: 4, _filterval: \"\", },\r\n { key: 'PrizDel', name: 'Пр. удаления', _typecolumn : null, _picklist : null, _typedata : 1, _filterval: \"\", },\r\n ]\r\n \r\nexport const columnsMainDataOLD = [\r\n { key: 'vidp', name: 'Т',frozen : true,resizable: false,width:30,maxWidth:30,_type:0,headerRenderer: CustomHeader },\r\n {\r\n key: 'taskp', name: 'Задача', resizable: true, frozen: true, editable: false, width: 570, _type: 0,\r\n headerRenderer: CustomHeader,\r\n summaryFormatter() { return Итого; },\r\n formatter(props) { const value = props.row.taskp; return ; }\r\n },\r\n {\r\n key: 'datan', name: 'Начало', resizable: true, editable: false, width: 120, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const val = props.row.datan;\r\n return ;\r\n }\r\n },\r\n {\r\n key: 'datak', name: 'Конец', resizable: true, editable: false, width: 120, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const val = props.row.datak;\r\n return ;\r\n }\r\n },\r\n { key: 'planh', name: 'План,ч.',resizable: true,editable: false,width:60,maxWidth:60,_type:0,headerRenderer: CustomHeader ,\r\n summaryFormatter({ row }) { return },\r\n formatter(props) { const value = props.row.planh; return ; }\r\n },\r\n { key: 'facth', name: 'Факт,ч.', resizable: true, editable: false, width: 60,maxWidth:60, _type: 1, headerRenderer: CustomHeader,\r\n summaryFormatter({ row }) { return },\r\n formatter(props) { const value = props.row.facth; return ; }\r\n },\r\n { key: 'done', name: 'Вып.',resizable: true,editable: false,width:40,maxWidth:40,_type:0,headerRenderer: CustomHeader,\r\n summaryFormatter({ row }) { return },\r\n formatter(props) { const value = props.row.done; return ; }\r\n },\r\n { key: 'd01', name: '1', resizable: false, editable: true, width: lday,maxWidth:lday, _type: 1,headerRenderer: CustomHeader,\r\n summaryFormatter({ row }) { return },\r\n formatter(props) { const value = props.row.d01; return ; }\r\n },\r\n]\r\n\r\nexport const columnsAppTasks = [\r\n { key: 'application_id', name: 'App_id',resizable: true,editable: false,width:120 },\r\n { key: 'Name', name: 'Наименование проекта',resizable: true,editable: false,width:600 },\r\n { key: 'Mnem', name: 'Мнемоника',resizable: true,editable: true},\r\n /* { key: 'Author', name: 'Автор',resizable: true,editable: true,width:240 },\r\n { key: 'Version', name: 'Версия',resizable: true,editable: true,width:70 },\r\n { key: 'Date_creation', name: 'Дата создания',resizable: true,editable: true,width:140 },\r\n { key: 'Date_update', name: 'Дата последнего обновления',resizable: true,editable: true,width:140 },*/\r\n]\r\n\r\nexport const columnsUsersAccess = [\r\n { key: 'Group_id', name: 'Ключ',resizable: true,width:140 },\r\n { key: 'Sam_name', name: 'Название в системе AD',resizable: true,editable: false,width:250 },\r\n { key: 'Group_dn', name: 'Идентификатор в системе AD',resizable: true,editable: false,width:220 },\r\n { key: 'It_group_id', name: 'Группа ИТ',resizable: true,editable: false,width:220 },\r\n { key: 'Group_Note', name: 'Описание в группе',resizable: true,editable: false,width:220 },\r\n]\r\n\r\nexport const columnsElementsList = [\r\n { key: 'application_id', name: 'Ключ',resizable: true,width:140 },\r\n { key: 'Tree_name', name: 'Название элемента меню',resizable: true,width:250 },\r\n { key: 'Parent_tree_name', name: 'Название родительского элемента меню',resizable: true },\r\n { key: 'Name', name: 'Доступ',resizable: true },\r\n]\r\n\r\n","import React, { Fragment } from \"react\";\r\nimport * as R from 'ramda'\r\n\r\nexport const thisMock = window.location.origin == \"http://localhost:3000\" || window.location.origin == \"http://localhost:3000\" ? true : false;\r\n//export const thisMock = true;\r\nexport const thisPost = true \r\n\r\nexport const BaseAddress = ((window.location.hostname != 'localhost') && (R.startsWith('/react-template-u', window.location.pathname))) \r\n? window.location.origin + window.location.pathname.substring(0, window.location.pathname.indexOf(\"/\", 2)) \r\n: window.location.origin\r\n\r\n\r\nexport let apiDataUIUrl = `` //${window.location.origin}/global-ui-service/api/values/GetUniversalUi/`\r\n\r\nif (!R.contains(\"localhost\", window.location.host))\r\n apiDataUIUrl = `${window.location.origin}/global-ui-service/api/values/GetUniversalUi/`\r\n\r\nexport const apiDataUrl = `${BaseAddress}/api/values/GetMainData/`\r\nexport const apiSaveUrl = `${BaseAddress}/api/values/SaveData/`\r\nexport const apiListUrl = `${BaseAddress}/api/values/GetPickList/`\r\n\r\n\r\nexport const MESS_TO_SAVE = 'Сохранение успешно !'\r\n\r\nexport const SHOW_TOOL_BAR = true\r\nexport const SHOW_LEFT_SIDE_BAR = false\r\nexport const SHOW_FOOTHER = false\r\n\r\n\r\n","export const main_data =\r\n{\r\n \"datamain\": [\r\n {\r\n 'ID': 1,\r\n 'StationCode': '460005',\r\n 'StationName': 'Запорожье-Левое',\r\n 'StationNameLong': 'Запорожье-Левое',\r\n 'CodeEcp': '1',\r\n 'TypeExport': 0,\r\n 'RailwayId': 1,\r\n 'TypePort': 3,\r\n 'StationNameEn': 'Zaporizhzhya-Live',\r\n 'PrizDel': 0,\r\n 'Lat': 47.869721759813046,\r\n 'Lng': 37.552172249841362\r\n },\r\n {\r\n 'ID': 2,\r\n 'StationCode': '485604',\r\n 'StationName': 'Мариуполь-Сортировочный',\r\n 'StationNameLong': 'Мариуполь-Сортировочный',\r\n 'CodeEcp': '2',\r\n 'TypeExport': 1,\r\n 'RailwayId': 1,\r\n 'TypePort': 4,\r\n 'StationNameEn': 'Mariupol',\r\n 'PrizDel': 0,\r\n 'Lat': 47.210262951368009,\r\n 'Lng': 37.552172249841362\r\n },\r\n {\r\n 'ID': 3,\r\n 'StationCode': '12345',\r\n 'StationName': 'Днепр',\r\n 'StationNameLong': 'Днепр',\r\n 'CodeEcp': '5',\r\n 'TypeExport': 1,\r\n 'RailwayId': 7,\r\n 'TypePort': 5,\r\n 'StationNameEn': 'Dnepr',\r\n 'PrizDel': 0,\r\n 'Lat': 48.38166334758364,\r\n 'Lng': 34.948718602147494\r\n },\r\n ],\r\n \r\n \"is_error\": 0,\r\n \"error_text\": \"Ошибка при получении данных \",\r\n \"user_message_text\": \"\"\r\n}\r\nexport const main_data_row_empty =\r\n{\r\n 'ID': null,\r\n 'StationCode': '',\r\n 'StationName': '',\r\n 'StationNameLong': '',\r\n 'CodeEcp': '',\r\n 'TypeExport': null,\r\n 'RailwayId': null,\r\n 'TypePort': null,\r\n 'StationNameEn': '',\r\n 'PrizDel': null,\r\n 'Lat': null,\r\n 'Lng': null\r\n}\r\n\r\nexport const main_data_empty =\r\n{\r\n \"datamain\": [\r\n ],\r\n\r\n \"is_error\": 1,\r\n \"error_text\": \"Ошибка при обращении к методу сервера\",\r\n \"user_message_text\": \"\"\r\n\r\n}\r\n\r\n","export const pick_data = \r\n{\r\n \"picklists\": [\r\n {\r\n \"name\": \"Users\",\r\n \"masterkey\": \"user_id\",\r\n \"rows\": [\r\n { \"id\": 1,\"title\": \"Асеев А.С.\",\"pkid\": 3 },\r\n { \"id\": 2,\"title\": \"Оскин А.А.\",\"pkid\": 4 },\r\n { \"id\": 3,\"title\": \"Остренко С.А.\",\"pkid\": 5 },\r\n { \"id\": 4,\"title\": \"Полежаева Л.В.\",\"pkid\": 7 },\r\n { \"id\": 5,\"title\": \"Заикина К.Е.\",\"pkid\": 9 },\r\n { \"id\": 6,\"title\": \"Максименко А.А.\",\"pkid\": 12 },\r\n { \"id\": 7,\"title\": \"Янева Н.Н.\",\"pkid\": 11 },\r\n ]\r\n },\r\n {\r\n \"name\": \"TypePort\",\r\n \"masterkey\": \"TypePort\",\r\n \"rows\": [\r\n { \"id\": 1,\"title\": \"Соломенная\",\"pkid\": 3 },\r\n { \"id\": 2,\"title\": \"Деревянная\",\"pkid\": 4 },\r\n { \"id\": 3,\"title\": \"Каменная\",\"pkid\": 5 },\r\n ]\r\n },\r\n {\r\n \"name\": \"Vidp\",\r\n \"masterkey\": \"category_id\",\r\n \"rows\": [\r\n {\"id\": 1,\"title\": \"Плановая\",\"pkid\": 2 },\r\n {\"id\": 2,\"title\": \"Внеплановая\",\"pkid\": 4 },\r\n {\"id\": 3,\"title\": \"MFSM\",\"pkid\": 6 },\r\n ]\r\n }\r\n ],\r\n \"is_error\": 0,\r\n \"error_text\": \"\",\r\n \"user_message_text\": \"\"\r\n}\r\n","import React, { useState, Fragment, useEffect } from \"react\"\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\n\r\nimport * as api from '../../api/apiFunc' \r\nimport * as R from 'ramda'\r\n\r\nconst ListIcons = ({ icons, iconsapp, access,filtered, handleOnClick, nodiv,classnam, dopargs }) => {\r\n const [txtval, Settxtval] = useState(\"\");\r\n const handleChange = e => {\r\n let val = e.target.value\r\n }\r\n const ParseSvgFilePath = (svgfile) => {\r\n const arr = svgfile.split('>')\r\n const path = arr[1].slice(9, -2)\r\n //на скорую руку потом делать\r\n return {d:path}\r\n }\r\n\r\n const PrepareIcon = (id) => {\r\n const iconfile = R.find(R.propEq('ui_app_icon_id', id))(iconsapp)\r\n if (!api.isEmpty(iconfile)) {\r\n const icontype = iconfile.ui_app_icon_file.indexOf('svg') == -1 ? 'JPEG' : 'SVG' // R.find(R.propEq('ui_app_icon_type_id', iconfile.ui_app_icon_type_id))(iconstype)\r\n if (!api.isEmpty(icontype)) {\r\n if (icontype == 'SVG') {\r\n const svgpath = ParseSvgFilePath(iconfile.ui_app_icon_file)\r\n return (\r\n {\r\n id, type: icontype, file: svgpath,\r\n style: { \"float\": \"left\", \"fontSize\": 24, \"color\": \"#6e767d\" }\r\n })\r\n }\r\n else { \r\n const file = `data:image/jpeg;base64,${iconfile.ui_app_icon_file}`\r\n return (\r\n {\r\n id, type: icontype, file,\r\n style: { \"float\": \"left\", \"fontSize\": 24, \"color\": \"#6e767d\" }\r\n })\r\n }\r\n }\r\n }\r\n }\r\n const OneIcon = (props) => {\r\n const iconapp = R.find(R.propEq('ui_app_icon_id', props.id))(iconsapp)\r\n const useraccess = access[iconapp.ui_app_icon_mnem] \r\n if (useraccess == -1) return null\r\n let accessstyle = (useraccess == 0 ? { opacity: '0.4',cursor: 'default' } : {})\r\n if (props.id == 20) accessstyle = { ...accessstyle, color: 'red' }\r\n const title = (api.isNotEmptyArr(props.title) ? props.title[useraccess] : props.title)\r\n const icon = PrepareIcon(props.id)\r\n if (icon.type == 'SVG') {\r\n if (nodiv) {\r\n return ( (useraccess != 0 ? handleOnClick(props.id) : null)}>\r\n {/*iconapp.path.map(icon => )*/}\r\n \r\n )\r\n }\r\n return (
(useraccess != 0 ? handleOnClick(props.id,dopargs) : null)}>\r\n {/*iconapp.path.map(icon => )*/}\r\n \r\n
)\r\n }\r\n else {\r\n if (nodiv) {\r\n return (\r\n
\r\n )\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n }\r\n \r\n \r\n if (!icons) return null \r\n return (\r\n \r\n {icons.sort((a, b) => a.order - b.order).map((el) => {\r\n const iconapp = R.find(R.propEq('ui_app_icon_id', el.id))(iconsapp) \r\n if (iconapp && (iconapp.ui_app_icon_mnem == \"save\" || iconapp.ui_app_icon_mnem == \"add\" || iconapp.ui_app_icon_mnem == (filtered == true ? \"filter\" : \"filteroff\") || iconapp.ui_app_icon_mnem == \"delete\"\r\n || iconapp.ui_app_icon_mnem == \"nofilt\" || iconapp.ui_app_icon_mnem==\"search\" || iconapp.ui_app_icon_mnem==\"apps\" ))\r\n return \r\n }\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default ListIcons","import React,{ useEffect, useState } from 'react'\r\nimport '../App.css'\r\nimport {BaseAddress} from '../projConst'\r\nimport ListIcons from '../Components/Lib/ListIcons';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport * as api from \"../api/apiFunc\";\r\nimport * as R from 'ramda'\r\n\r\nconst useStyles = makeStyles( theme => ({ \r\n root: {\r\n display: 'flex',\r\n textAlign: 'left',\r\n backgroundColor: '#3f51b5',\r\n height: '40px',\r\n width: '100%'\r\n },\r\n content: {\r\n paddingLeft: theme.spacing.unit*3,\r\n },\r\n title: {\r\n // paddingLeft: theme.spacing.unit*3,\r\n textAlign: 'left',\r\n color : '#000',\r\n backgroundColor : '#d9d9d9',\r\n fontSize: '75%',\r\n },\r\n}));\r\n\r\nconst ShowAppHeader = (props) => {\r\n const classes = useStyles()\r\n const { config } = props\r\n const [curBlock, SetCurBlock] = useState([])\r\n const [iconsApp, SetIconsApp] = useState([])\r\n\r\n\r\n useEffect(() => {\r\n if (api.isEmpty(config.configApp)) return\r\n //console.log('config.configApp',config.configApp);\r\n SetCurBlock(R.find(R.propEq(\"block\", config.name))(config.configApp)) \r\n SetIconsApp(config.iconsApp) \r\n }, [config]);\r\n\r\n const headerClick = (id) => alert(`Реализация в проекте ${id} !`)\r\n\r\n const ComputedAccess = () => {\r\n const { config, iconsapp } = props\r\n if (!api.isNotEmptyArr(config.iconsApp)) return {}\r\n let access = {} \r\n config.iconsApp.map((icon) => { \r\n const iconapp = R.find(R.propEq('ui_app_icon_id', icon.ui_app_icon_id))(config.iconsApp)\r\n switch (iconapp.ui_app_icon_mnem) { \r\n case \"apps\": access = {...access, [iconapp.ui_app_icon_mnem]: 0 }\r\n break\r\n }\r\n }) \r\n return access \r\n }\r\n \r\n const access = ComputedAccess()\r\n\r\n\r\n const ShowViewmode = () => {\r\n const {viewmode} = props\r\n //console.log('viewmode',viewmode);\r\n return ()\r\n }\r\n \r\n return (\r\n
\r\n
\r\n {curBlock.children && curBlock.children[0] &&\r\n }\r\n {props.nameNsi} {/*{props.title}*/}\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n
\r\n {curBlock.children && curBlock.children[2] &&\r\n } \r\n
\r\n
\r\n )\r\n}\r\nexport default ShowAppHeader","import React, { useEffect,useState } from 'react';\r\nimport '../App.css';\r\nimport ListIcons from '../Components/Lib/ListIcons';\r\nimport * as R from 'ramda'\r\nimport * as api from \"../api/apiFunc\";\r\n\r\n//import {fetchDict,fetchColu} from './Actions/actions'\r\n\r\nconst ShowAppToolbar = (props) => {\r\n const { config } = props\r\n const [curBlock, SetCurBlock] = useState([])\r\n const [iconsApp, SetIconsApp] = useState([])\r\n const [inputVal, SetInputVal] = useState('')\r\n \r\n useEffect(() => {\r\n if (api.isEmpty(config.configApp)) return\r\n //console.log('config.configApp',config.configApp);\r\n SetCurBlock(R.find(R.propEq(\"block\", config.name))(config.configApp)) \r\n SetIconsApp(config.iconsApp) \r\n }, [config]);\r\n\r\n const ComputedAccess = () => {\r\n if (api.isEmpty(config.configApp)) return []\r\n let curBlock = R.find(R.propEq(\"block\", config.name))(config.configApp)\r\n if (!(!api.isEmpty(curBlock) && !api.isEmpty(curBlock.children[0]))) return [] \r\n // if (!api.isNotEmptyArr(curBlock) || !api.isNotEmptyArr(curBlock.children[0])) return [] \r\n let access = {} \r\n curBlock.children[0].icons.map((icon) => {\r\n const iconapp = R.find(R.propEq('ui_app_icon_id', icon.id))(config.iconsApp)\r\n switch (iconapp.ui_app_icon_mnem) {\r\n case \"refresh\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n case \"save\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n case \"add\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n //case \"copy\": access = {...access, [iconapp.ui_app_icon_mnem]: -1 }\r\n //break\r\n //case \"edit\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n //break\r\n case \"filteroff\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n case \"filter\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n //case \"print\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n //break\r\n case \"delete\": access = {...access, [iconapp.ui_app_icon_mnem]: 1 }\r\n break\r\n }\r\n })\r\n return access \r\n }\r\n\r\n const ShowFilter = () => {\r\n const { pick,mainfilter} = props\r\n if (api.isEmpty(mainfilter) || !api.isNotEmptyArr(pick))\r\n return null\r\n let curPeriod = null\r\n let curUser = null\r\n let curVidp = null\r\n\r\n const curUsers = R.find(R.propEq('name', 'Users'))(pick).rows \r\n const User = R.find(R.propEq('pkid', mainfilter.user_id))(curUsers)\r\n \r\n const curVidps = R.find(R.propEq('name', 'Vidp'))(pick).rows \r\n const Vidp = R.find(R.propEq('pkid', mainfilter.category_id))(curVidps)\r\n\r\n if (!api.isEmpty(User)) curUser = `ФИО = ${User.title}`\r\n if (!api.isEmpty(Vidp)) curVidp = `Тип = ${Vidp.title}`\r\n if (typeof mainfilter.period === \"string\") {\r\n const curDate = new Date(mainfilter.period + '-01')\r\n curPeriod = `Период = ${curDate.toLocaleDateString(\"ru-RU\", { month: 'long' })} ${curDate.toLocaleDateString(\"ru-RU\", { year: 'numeric' })}`\r\n }\r\n \r\n const cstyle = {margin: '2px 10px',padding: '2px', width: '30%', border: '1px solid rgba(0,0,0,0.5)',borderRadius:'5px',color : '#000', backgroundColor :'#faf5c5'}\r\n const iconapp = R.find(R.propEq('name', 'search'))(config.iconsApp)\r\n return (
\r\n {curVidp &&
{curVidp}
}\r\n {curPeriod &&
{curPeriod}
}\r\n {curUser &&
{curUser}
}\r\n
)\r\n }\r\n\r\n const FindB = () => {\r\n //if (!curBlock || !api.isNotEmptyArr(curBlock.children)) return null\r\n \r\n const iconapp = R.find(R.propEq('name', 'search'))(config.iconsApp)\r\n return (
\r\n
\r\n {SetInputVal(e.target.value) }/* props.handleFilterUpdated*/}\r\n />\r\n {curBlock.children && curBlock.children[1] &&\r\n } \r\n \r\n
)\r\n }\r\n const access = ComputedAccess() \r\n\r\n const IconMenuClick = (id) => {\r\n const iconapp = R.find(R.propEq('ui_app_icon_id', id))(iconsApp)\r\n console.log('id ==== ',id);\r\n switch (iconapp.ui_app_icon_mnem) {\r\n case \"refresh\": alert('refresh') ; break;\r\n case \"save\": props.onSaveData(); /*props.onSaveData();*/ break;\r\n case \"add\": props.onInsertRow(); break;\r\n case \"copy\": alert('copy'); break;\r\n case \"edit\": alert('edit'); break;\r\n case \"nofilt\": props.onClearFilter(); break; \r\n case \"filter\": props.onColumnFilter(); break;\r\n case \"filteroff\": props.onColumnFilter(); break;\r\n case \"print\": alert('print'); break;\r\n case \"delete\": props.onDeleteRow(); break;\r\n }\r\n }\r\n if (api.isEmpty(config.configApp)) return\r\n let cur_Block = R.find(R.propEq(\"block\", config.name))(config.configApp)\r\n if (!api.isNotEmptyArr(cur_Block.children) || !api.isNotEmptyArr(iconsApp)) return null \r\n \r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {cur_Block.children && cur_Block.children[0] &&\r\n } \r\n
\r\n
\r\n {ShowFilter()}\r\n
\r\n
\r\n {FindB()}\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n );\r\n}\r\n \r\nexport default ShowAppToolbar\r\n","import { useState, useMemo } from \"react\";\r\nimport \"../App.css\";\r\nimport { BaseAddress } from \"../projConst\";\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 ReportIcon from \"@material-ui/icons/Report\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { width } from \"@material-ui/system\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: \"flex\",\r\n textAlign: \"left\",\r\n backgroundColor: \"#3f51b5\",\r\n height: \"40px\",\r\n width: \"100%\"\r\n },\r\n content: {\r\n paddingLeft: theme.spacing.unit * 3\r\n },\r\n title: {\r\n // paddingLeft: theme.spacing.unit*3,\r\n textAlign: \"left\",\r\n color: \"#000\",\r\n backgroundColor: \"#d9d9d9\",\r\n fontSize: \"75%\"\r\n }\r\n}));\r\n\r\nconst ShowAppFooter = props => {\r\n const classes = useStyles();\r\n\r\n const ShowViewmode = () => {\r\n const { viewmode } = props;\r\n //console.log('viewmode',viewmode);\r\n return ;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {/*props.config.children && props.config.children[0] &&\r\n */}\r\n \r\n {props.nameNsi}{\" \"}\r\n {/*{props.title}*/}\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n
\r\n {/*props.config.children && props.config.children[2] &&\r\n */}\r\n
\r\n
\r\n );\r\n};\r\nexport default ShowAppFooter;\r\n","import React, { Component , Fragment} from 'react';\r\n\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport Select from 'react-select';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport NoSsr from '@material-ui/core/NoSsr';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport CancelIcon from '@material-ui/icons/Cancel';\r\nimport { emphasize } from '@material-ui/core/styles/colorManipulator';\r\nimport * as api from '../../api/apiFunc' \r\n\r\nconst styles = theme => ({\r\n root: {\r\n flexGrow: 1,\r\n height: 250,\r\n },\r\n input: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n //paddingBottom: 10 ,\r\n },\r\n valueContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flex: 1,\r\n height: 40,\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n },\r\n chip: {\r\n margin: `${theme.spacing.unit / 2}px ${theme.spacing.unit / 4}px`,\r\n },\r\n chipFocused: {\r\n backgroundColor: emphasize(\r\n theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700],\r\n 0.08,\r\n ),\r\n },\r\n noOptionsMessage: {\r\n padding: `${theme.spacing.unit}px ${theme.spacing.unit * 2}px`,\r\n },\r\n singleValue: {\r\n fontSize: 16,\r\n },\r\n placeholder: {\r\n position: 'absolute',\r\n left: 2,\r\n fontSize: 16,\r\n },\r\n paper: {\r\n position: 'absolute',\r\n zIndex: 1,\r\n marginTop: theme.spacing.unit,\r\n left: 0,\r\n right: 0,\r\n },\r\n divider: {\r\n height: theme.spacing.unit * 2,\r\n },\r\n});\r\n\r\nfunction NoOptionsMessage(props) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nfunction inputComponent({ inputRef, ...props }) {\r\n return
;\r\n}\r\n\r\nfunction Control(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction Option(props) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nfunction Placeholder(props) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nfunction SingleValue(props) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nfunction ValueContainer(props) {\r\n return
{props.children}
;\r\n}\r\n\r\nfunction Menu(props) {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nconst components = {\r\n Control,\r\n Menu,\r\n NoOptionsMessage,\r\n Option,\r\n Placeholder,\r\n SingleValue,\r\n ValueContainer,\r\n};\r\n\r\nclass SelectDataList extends Component {\r\n\r\n handleChange = val => {\r\n //console.log('val',val.value);\r\n if (!val || val.value == null) return\r\n this.props.onHandleChange(this.props.selName,val) \r\n //this.setState({[name]: value,});\r\n };\r\n\r\n render() {\r\n const { classes, theme } = this.props;\r\n\r\n const selectStyles = {\r\n input: base => ({\r\n ...base,\r\n color: theme.palette.text.primary,\r\n '& input': {\r\n font: 'inherit',\r\n },\r\n }),\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSelectDataList.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles, { withTheme: true })(SelectDataList);","import React, { useState ,useEffect, useContext} from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport '../App.css'\r\nimport * as R from 'ramda'\r\nimport * as api from \"../api/apiFunc\";\r\nimport ListIcons from '../Components/Lib/ListIcons';\r\n\r\nimport TextField from '@material-ui/core/TextField';\r\nimport SelectDataList from \"./Lib/SelectDataList\";\r\n\r\nconst useStyles = makeStyles( theme => ({ \r\n root: {\r\n margin: theme.spacing.unit*2,\r\n textAlign: 'left',\r\n },\r\n textList: {\r\n marginTop: theme.spacing.unit*0.5, \r\n color : '#000',\r\n backgroundColor: '#fff',\r\n width: '100%',\r\n height: '75%',\r\n fontSize: '85%',\r\n borderWidth: 1,\r\n borderColor: '#fff',\r\n borderStyle: 'solid',\r\n borderRadius: '3%',\r\n boxShadow: '2px 2px 2px rgba(0, 0, 0, 0.25);'\r\n},\r\ntextListNew: {\r\n marginTop: -theme.spacing.unit, \r\n marginBottom: theme.spacing.unit*1, \r\n color : 'gold',\r\n width: '95%',\r\n hight: '70%',\r\n fontSize: '80%',\r\n},\r\ntextListNewSmall: {\r\n marginTop: -theme.spacing.unit, \r\n marginBottom: theme.spacing.unit*1, \r\n color : 'red',\r\n width: '95%',\r\n hight: '70%',\r\n fontSize: '80%',\r\n},\r\ntextListNm: {\r\n marginTop: theme.spacing.unit*0.5, \r\n //marginLeft: theme.spacing.unit*0.1, \r\n color : 'green',\r\n width: '65%',\r\n fontSize: '90%',\r\n borderWidth: 1,\r\n borderColor: '#ffaad5',\r\n borderStyle: 'solid',\r\n borderRadius: '5%'\r\n},\r\ntextField: {\r\n width: '100%',\r\n //height: '100%',\r\n height: '2.1476em',\r\n marginBottom: '6px'\r\n},\r\ntextField2: {\r\n width: '100%',\r\n height: '100%',\r\n},\r\ninput: {\r\n display: 'flex',\r\n padding: 0,\r\n marginTop: 1,\r\n color : '#000',\r\n height: '90%',\r\n backgroundColor: '#fff',\r\n fontSize: '90%',\r\n borderWidth: 1,\r\n borderColor: '#fff',\r\n borderStyle: 'solid',\r\n borderRadius: '3%',\r\n boxShadow: '2px 2px 2px rgba(0, 0, 0, 0.25)'\r\n },\r\n valueContainer: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n flex: 1,\r\n alignItems: 'center',\r\n overflow: 'hidden',\r\n }, \r\n}));\r\n\r\n\r\nconst ShowAppSidebar = (props) => {\r\n \r\n const classes = useStyles()\r\n const { config } = props\r\n const [curBlock, SetCurBlock] = useState([])\r\n const [iconsApp, SetIconsApp] = useState([])\r\n \r\n useEffect(() => {\r\n if (api.isEmpty(config.configApp)) return\r\n //console.log('config.configApp',config.configApp);\r\n SetCurBlock(R.find(R.propEq(\"block\", config.name))(config.configApp)) \r\n SetIconsApp(config.iconsApp) \r\n }, [config]);\r\n \r\n const ComputedAccess = () => {\r\n const {config,iconsapp} = this.props \r\n if (!api.isNotEmptyArr(config.iconsapps)) return {} \r\n let access = {} \r\n config.iconsapps.map((icon) => {\r\n const iconapp = R.find(R.propEq('id', icon.id))(iconsapp)\r\n switch (iconapp.name) {\r\n case \"apps\": access = {...access, [iconapp.name]: 1 }\r\n break\r\n }\r\n })\r\n return access \r\n }\r\n \r\n return(\r\n
\r\n
\r\n

SideBar

\r\n
\r\n
\r\n {{}} />}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ShowAppSidebar;\r\n\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport * as R from 'ramda'\r\n\r\nclass FormaterPick extends Component {\r\n /*static propTypes = {\r\n value: PropTypes.string||PropTypes.number\r\n };*/\r\n constructor(props) {\r\n super(props);\r\n let viewValue = this.props.value\r\n let mPick = this.props.Pick\r\n //console.log('this.props.Pick-----',mPick);\r\n //console.log('this.props.value-----',viewValue);\r\n try {\r\n if (this.props.Pick)\r\n viewValue = mPick[viewValue-1]['title']\r\n else\r\n viewValue = this.props.value\r\n }\r\n catch(e)\r\n {\r\n viewValue = this.props.value\r\n }\r\n // console.log('viewValue------',viewValue); \r\n this.state = {\r\n curvalue: viewValue\r\n }\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return nextProps.value !== this.props.value;\r\n }\r\n\r\n handleChange = date => \r\n this.setState({\r\n startDate: date\r\n });\r\n \r\n\r\n render() { \r\n let viewValue = this.props.value\r\n let mPick = this.props.Pick\r\n try {\r\n if (this.props.Pick){\r\n let rowPick = R.find(R.propEq('pkid', viewValue))(this.props.Pick) \r\n if (rowPick)\r\n viewValue = rowPick['title']\r\n }\r\n else\r\n viewValue = this.props.value\r\n }\r\n catch(e)\r\n {\r\n viewValue = this.props.value\r\n }\r\n // return
{this.state.curvalue}
;\r\n return
{viewValue}
;\r\n }\r\n }\r\n\r\n export default FormaterPick; ","import React, {Fragment, useEffect, useState, useCallback, useMemo, useRef} from \"react\";\r\nimport ReactDOM from 'react-dom';\r\nimport \"../../App.css\";\r\nimport {makeStyles } from \"@material-ui/core/styles\";\r\nimport FormaterDate from '../Formaters/FormaterDate';\r\n//import DateEditorMask from './DateEditorMask'\r\nimport FormaterString from '../Formaters/FormaterString';\r\nimport FormaterPick from '../Formaters/FormaterPick';\r\nimport FormaterColorFact from '../Formaters/FormaterColorFact';\r\nimport FormaterColorWeek from '../Formaters/FormaterColorWeek';\r\nimport DataGrid, { Row, RowRendererProps,SelectColumn, TextEditor, SelectCellFormatter } from 'react-data-grid';\r\n//import { css } from '@linaria/core';\r\nimport * as R from 'ramda'\r\nimport * as api from '../../api/apiFunc' \r\n\r\nfunction EmptyRowsRenderer() {\r\n return (\r\n
\r\n Нет данных\r\n
\r\n );\r\n}\r\n\r\nfunction createRows(data,totalrow,_columns,_PkFieldName) {\r\n const now = Date.now();\r\n let rows = [];\r\n if (api.isNotEmptyArr(data))\r\n rows = [...data, totalrow]\r\n else\r\n rows = data\r\n\r\n rows = rows.reduce((res, row) => {\r\n let rowKeys = R.keys(row);\r\n let yy = 0 \r\n rowKeys.map(n=>{\r\n let col = R.find(R.propEq('key', n))(_columns)\r\n if (!api.isEmpty(col)) {\r\n if (col._type === 1) {\r\n if (!row['isTotalRow']) {\r\n if (typeof row[n] == \"string\" && row[n].indexOf('$') == -1) {\r\n row[n] = row['datan'] + '#' + row['planh'] + '$' + row[n]\r\n }\r\n else {\r\n if (!(row[n] && row[n].toString().indexOf('$') !== -1)) {\r\n if (row[_PkFieldName])\r\n row[n] = row['datan'] + '#' + row['planh'] + '#0' + '$' + row[n]\r\n else\r\n row[n] = `${yy}$-`\r\n }\r\n }\r\n }\r\n else {\r\n if (typeof row[n] == \"string\" && row[n].indexOf('$') == -1) {\r\n row[n] = \"0#\"+ row['planh'] + '#1' + '$' + row[n]\r\n }\r\n else {\r\n if (!(row[n] && row[n].toString().indexOf('$') !== -1)) {\r\n row[n] = \"0#\"+row['planh']+ '#1' + '$' + row[n]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n yy++\r\n return [...res, row]\r\n },[])\r\n\r\n return rows;\r\n}\r\nfunction rowKeyGetter(row) {\r\n return row.id;\r\n}\r\n/*\r\nfunction SelectEditor(p) {\r\n return (\r\n onRowChange({ ...p.row, progress: e.target.valueAsNumber })}\r\n />\r\n\r\n p.onRowChange({ ...p.row, country: e.target.value }, true)}\r\n >\r\n {countries.map((country) => (\r\n \r\n ))}\r\n \r\n )\r\n}\r\n*/\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: \"flex\",\r\n textAlign: \"left\",\r\n backgroundColor: \"#3f51b5\",\r\n height: \"40px\",\r\n width: \"100%\"\r\n },\r\n content: {\r\n paddingLeft: theme.spacing.unit * 3\r\n },\r\n}));\r\n\r\n\r\n\r\nfunction getComparator(sortColumn) {\r\n switch (sortColumn) {\r\n case 'StationCode':\r\n case 'StationName':\r\n case 'StationNameLong':\r\n case 'StationNameEn':\r\n return (a, b) => {\r\n return a[sortColumn].localeCompare(b[sortColumn]);\r\n };\r\n case 'bool':\r\n return (a, b) => {\r\n return a[sortColumn] === b[sortColumn] ? 0 : a[sortColumn] ? 1 : -1;\r\n };\r\n case 'id': case 'Lat': case 'Lng':\r\n case 'CodeEcp': case 'TypeExport': case 'RailwayId': case 'TypePort': case 'PrizDel':\r\n return (a, b) => {\r\n return a[sortColumn] - b[sortColumn];\r\n };\r\n default:\r\n throw new Error(`unsupported sortColumn: \"${sortColumn}\"`);\r\n }\r\n}\r\n\r\nconst ShowGrid = props => {\r\n const classes = useStyles();\r\n const { data,totalrow, PrimaryId, myfiolist, columnsgrid,curidrow} = props;\r\n //const [rows, setRows] = useState([]);\r\n const [selectedRows, setSelectedRows] = useState(() => new Set());\r\n const [currow, Setcurrow] = useState(null);\r\n const gridRef = useRef(null)\r\n const [sortColumns, setSortColumns] = useState([]);\r\n\r\n useEffect(() => {\r\n //if (curidxrow >= 0 && api.isNotEmptyArr(_rows) && !api.isEmpty(_rows[currow]) && currow>=0 && _rows[currow]?.StationCode!==_rows[curidxrow]?.StationCode) {\r\n if (curidrow >= 0 && api.isNotEmptyArr(sortedRows)) {\r\n let row_idx = R.findIndex(R.propEq('ID', curidrow))(sortedRows);\r\n //console.log('curentrow ======',currow,curidxrow);\r\n if (gridRef.current) gridRef.current.scrollToRow(row_idx)\r\n Setcurrow(row_idx)\r\n props.onCurRow(sortedRows[row_idx]) \r\n }\r\n }, [curidrow]); \r\n /* useEffect(() => {\r\n if (api.isNotEmptyArr(data))\r\n setRows(data);\r\n }, [data]);\r\n useEffect(() => {\r\n console.log('rows ==',rows);\r\n }, [rows]); */\r\n /* useEffect(() => {\r\n let node = document.getElementById(\"datagrid\");\r\n let canvas = ReactDOM.findDOMNode(node);\r\n canvas.addEventListener('keydown', keyListenerDown);\r\n canvas.addEventListener('keyup', keyListenerUp);\r\n return () => {\r\n canvas.removeEventListener('keydown', keyListenerDown);\r\n canvas.removeEventListener('keyup', keyListenerUp);\r\n };\r\n }); \r\n */\r\n const keyListenerDown = (e) => {\r\n if (e.key === \"ArrowDown\")\r\n {\r\n e.preventDefault();\r\n Setcurrow(currow + 1)\r\n //console.log('currow = ', currow + 1);\r\n props.onCurRow(sortedRows[currow+1])\r\n }\r\n };\r\n\r\n const keyListenerUp = (e) => {\r\n if (e.key === \"ArrowUp\")\r\n {\r\n e.preventDefault();\r\n Setcurrow(currow - 1)\r\n //console.log('currow = ', currow-1);\r\n props.onCurRow(sortedRows[currow-1])\r\n }\r\n };\r\n\r\n const summaryRows = useMemo(() => {\r\n const summaryRow = totalrow\r\n return [summaryRow];\r\n }, [totalrow]);\r\n\r\n //if (!api.isNotEmptyArr(data))\r\n // return null\r\n\r\n let _rows,_columns,_PkFieldName;\r\n _rows=data\r\n _columns = columnsgrid\r\n _PkFieldName = PrimaryId\r\n\r\n if (api.isNotEmptyArr(data))\r\n // _rows = [...data, totalrow]\r\n //else\r\n _rows = data \r\n \r\n let yy = 0\r\n\r\n _columns.map((data)=>{\r\n switch(data['key']) {\r\n case 'StationCode': case 'StationName': case 'StationNameLong': case 'CodeEcp': case 'TypeExport': case 'RailwayId':\r\n case 'TypePort': case 'StationNameEn': case 'PrizDel':\r\n data.editor = TextEditor \r\n //data.editorOptions= {editOnClick: true}\r\n break \r\n }\r\n \r\n })\r\n let name_columns = _columns.map(elem=>elem.key)\r\n let filteredRows = _rows\r\n\r\n const sortedRows = useMemo(() => {\r\n if (sortColumns.length === 0) return _rows;\r\n\r\n const sortedRows = [..._rows];\r\n sortedRows.sort((a, b) => {\r\n for (const sort of sortColumns) {\r\n const comparator = getComparator(sort.columnKey);\r\n const compResult = comparator(a, b);\r\n if (compResult !== 0) {\r\n return sort.direction === 'ASC' ? compResult : -compResult;\r\n }\r\n }\r\n return 0;\r\n });\r\n return sortedRows;\r\n }, [_rows, sortColumns]);\r\n \r\n const handleKeyDown = (e) => {\r\n if (e.key === \"ArrowDown\" && currow < sortedRows.length-1)\r\n {\r\n e.preventDefault();\r\n Setcurrow(currow + 1)\r\n //console.log('currow = ', currow + 1);\r\n props.onCurRow(sortedRows[currow+1])\r\n }\r\n if (e.key === \"ArrowUp\" && currow > 0)\r\n {\r\n e.preventDefault();\r\n Setcurrow(currow - 1)\r\n //console.log('currow = ', currow-1);\r\n props.onCurRow(sortedRows[currow-1])\r\n }\r\n\r\n };\r\n\r\n const MyRowRenderer = (props) => {\r\n let custprops = { ...props,'aria-selected':true}\r\n if (currow == props.rowIdx) {\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n \r\n const rowsChange = (rows,change ) => {\r\n console.log('rowsChangeData=', change);\r\n //column: {key: 'd06', name: '6', resizable: false, editable: true, width: 50, …}\r\n //indexes: [0]\r\n /*if (rows[change.indexes[0]].category_id == 6) \r\n {\r\n props.onHandleMess(\"Для этой колонки корректировка запрещена !\") \r\n return\r\n }*/\r\n let val=rows[change.indexes[0]][change.column.key]\r\n const currow = rows[change.indexes[0]]\r\n // if (!isNaN(parseFloat(val)) && !isNaN(val - 0)) {\r\n //console.log('n==', Number(n));\r\n // val = Number(val).toFixed(2)\r\n const updcol = change.column.key\r\n rows[change.indexes[0]][updcol] = val\r\n //if (updcol == 'WorksCode' && R.findIndex(R.propEq('WorksCode', Number(val)))(_rows) != -1) {\r\n // props.onMessage(\"Запись с таким кодом уже введена!\") \r\n // return \r\n // } \r\n const updrow = { [_PkFieldName]: rows[change.indexes[0]][_PkFieldName], updated: { [updcol]: val } }\r\n props.onHandleUpdateGrid(rows,currow,updrow) \r\n }\r\n const onRowClick = (row, column) => {\r\n let row_idx = R.findIndex(R.propEq('ID', row.ID))(sortedRows);\r\n Setcurrow(row_idx)\r\n //props.onCurRow(_rows[rowIdx], _rows.length) \r\n props.onCurRow(sortedRows[row_idx]) \r\n }\r\n \r\n const rowGetter = rowNumber => {\r\n let curRow = {...filteredRows[rowNumber]}\r\n return curRow\r\n }\r\n return (\r\n }\r\n rowHeight={25}\r\n //minHeight={props.minHeight || 250}\r\n //onSelectedRowsChange={setSelectedRows}\r\n rowRenderer={MyRowRenderer}\r\n /*onSelectedRowsChange={setSelectedRows}*/\r\n sortColumns={sortColumns}\r\n onSortColumnsChange={setSortColumns}\r\n //summaryRows={summaryRows}\r\n className=\"fill-grid\"\r\n />\r\n );\r\n}\r\nexport default ShowGrid\r\n","import { useState, useMemo } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { css } from '@linaria/core';\r\nimport faker from 'faker';\r\nimport FormaterColorWeek from '../Formaters/FormaterColorWeek';\r\n\r\nimport DataGrid, { SelectColumn, TextEditor, SelectCellFormatter } from 'react-data-grid';\r\nimport type { Column, SortColumn } from 'react-data-grid';\r\n//import { stopPropagation } from 'react-data-grid/utils';\r\n//import { exportToCsv, exportToXlsx, exportToPdf } from 'react-data-grid/exportUtils';\r\n//import { textEditorClassname } from 'react-data-grid/editors/TextEditor';\r\n\r\n\r\nconst dateFormatter = new Intl.DateTimeFormat(navigator.language);\r\nconst currencyFormatter = new Intl.NumberFormat(navigator.language, {\r\n style: 'currency',\r\n currency: 'eur'\r\n});\r\n\r\nfunction TimestampFormatter({ timestamp }: { timestamp: number }) {\r\n return <>{dateFormatter.format(timestamp)};\r\n}\r\n\r\nfunction CurrencyFormatter({ value }: { value: number }) {\r\n return <>{currencyFormatter.format(value)};\r\n}\r\n\r\ninterface SummaryRow {\r\n id: string;\r\n totalCount: number;\r\n d01: number;\r\n client: string;\r\n yesCount: number;\r\n}\r\n\r\ninterface Row {\r\n id: number;\r\n title: string;\r\n client: string;\r\n area: string;\r\n country: string;\r\n contact: string;\r\n assignee: string;\r\n progress: number;\r\n startTimestamp: number;\r\n endTimestamp: number;\r\n budget: number;\r\n transaction: string;\r\n account: string;\r\n version: string;\r\n available: boolean;\r\n}\r\n\r\nfunction getColumns(countries: string[]): Column[] {\r\n return [\r\n SelectColumn,\r\n {\r\n key: 'id',\r\n name: 'ID',\r\n width: 60,\r\n frozen: true,\r\n resizable: false,\r\n summaryFormatter() {\r\n return Total;\r\n }\r\n },\r\n {\r\n key: 'title',\r\n name: 'Task',\r\n width: 120,\r\n frozen: true,\r\n editor: TextEditor,\r\n summaryFormatter({ row }) {\r\n return <>{row.totalCount} records;\r\n }\r\n },\r\n {\r\n key: 'client',\r\n name: 'Client',\r\n width: 220,\r\n editor: TextEditor,\r\n summaryFormatter({ row: { client } }) {\r\n return <>{client};\r\n }\r\n },\r\n {\r\n key: 'd01',\r\n name: '1',\r\n width: 80,\r\n editor: TextEditor,\r\n summaryFormatter({ row }) { return <> },\r\n //summaryFormatter({ row }) { return <>{row.d01} },\r\n formatter(props) { const value = props.row.d01; return ; }\r\n },\r\n {\r\n key: 'area',\r\n name: 'Area',\r\n width: 120,\r\n editor: TextEditor\r\n },\r\n {\r\n key: 'country',\r\n name: 'Country',\r\n width: 180,\r\n editor: (p) => (\r\n p.onRowChange({ ...p.row, country: e.target.value }, true)}\r\n >\r\n {countries.map((country) => (\r\n \r\n ))}\r\n \r\n ),\r\n editorOptions: {\r\n editOnClick: true\r\n }\r\n },\r\n {\r\n key: 'contact',\r\n name: 'Contact',\r\n width: 160,\r\n editor: TextEditor\r\n },\r\n {\r\n key: 'assignee',\r\n name: 'Assignee',\r\n width: 150,\r\n editor: TextEditor\r\n },\r\n {\r\n key: 'progress',\r\n name: 'Completion',\r\n width: 110,\r\n formatter(props) {\r\n const value = props.row.progress;\r\n return (\r\n <>\r\n {Math.round(value)}%\r\n \r\n );\r\n },\r\n editor({ row, onRowChange, onClose }) {\r\n return createPortal(\r\n {\r\n if (event.key === 'Escape') {\r\n onClose();\r\n }\r\n }}\r\n >\r\n \r\n onRowChange({ ...row, progress: e.target.valueAsNumber })}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n
,\r\n document.body\r\n );\r\n },\r\n editorOptions: {\r\n renderFormatter: true\r\n }\r\n },\r\n {\r\n key: 'startTimestamp',\r\n name: 'Start date',\r\n width: 100,\r\n formatter(props) {\r\n return ;\r\n }\r\n },\r\n {\r\n key: 'endTimestamp',\r\n name: 'Deadline',\r\n width: 100,\r\n formatter(props) {\r\n return ;\r\n }\r\n },\r\n {\r\n key: 'budget',\r\n name: 'Budget',\r\n width: 100,\r\n formatter(props) {\r\n return ;\r\n }\r\n },\r\n {\r\n key: 'transaction',\r\n name: 'Transaction type'\r\n },\r\n {\r\n key: 'account',\r\n name: 'Account',\r\n width: 150\r\n },\r\n {\r\n key: 'version',\r\n name: 'Version',\r\n editor: TextEditor\r\n },\r\n {\r\n key: 'available',\r\n name: 'Available',\r\n width: 80,\r\n formatter({ row, onRowChange, isCellSelected }) {\r\n return (\r\n {\r\n onRowChange({ ...row, available: !row.available });\r\n }}\r\n onClick={e => e.stopPropagation()}\r\n isCellSelected={isCellSelected}\r\n />\r\n );\r\n },\r\n summaryFormatter({ row: { yesCount, totalCount } }) {\r\n return <>{`${Math.floor((100 * yesCount) / totalCount)}% ✔️`};\r\n }\r\n }\r\n ];\r\n}\r\n\r\nfunction rowKeyGetter(row: Row) {\r\n return row.id;\r\n}\r\n\r\nfunction createRows(): Row[] {\r\n const now = Date.now();\r\n const rows: Row[] = [];\r\n\r\n for (let i = 0; i < 1000; i++) {\r\n rows.push({\r\n id: i,\r\n title: `Task #${i + 1}`,\r\n client: faker.company.companyName(),\r\n d01: i,\r\n area: faker.name.jobArea(),\r\n country: faker.address.country(),\r\n contact: faker.internet.exampleEmail(),\r\n assignee: faker.name.findName(),\r\n progress: Math.random() * 100,\r\n startTimestamp: now - Math.round(Math.random() * 1e10),\r\n endTimestamp: now + Math.round(Math.random() * 1e10),\r\n budget: 500 + Math.random() * 10500,\r\n transaction: faker.finance.transactionType(),\r\n account: faker.finance.iban(),\r\n version: faker.system.semver(),\r\n available: Math.random() > 0.5\r\n });\r\n }\r\n\r\n return rows;\r\n}\r\n\r\ntype Comparator = (a: Row, b: Row) => number;\r\nfunction getComparator(sortColumn: string): Comparator {\r\n switch (sortColumn) {\r\n case 'assignee':\r\n case 'title':\r\n case 'client':\r\n case 'area':\r\n case 'country':\r\n case 'contact':\r\n case 'transaction':\r\n case 'account':\r\n case 'version':\r\n return (a, b) => {\r\n return a[sortColumn].localeCompare(b[sortColumn]);\r\n };\r\n case 'available':\r\n return (a, b) => {\r\n return a[sortColumn] === b[sortColumn] ? 0 : a[sortColumn] ? 1 : -1;\r\n };\r\n case 'id':\r\n case 'progress':\r\n case 'startTimestamp':\r\n case 'endTimestamp':\r\n case 'budget':\r\n return (a, b) => {\r\n return a[sortColumn] - b[sortColumn];\r\n };\r\n default:\r\n throw new Error(`unsupported sortColumn: \"${sortColumn}\"`);\r\n }\r\n}\r\n\r\nexport default function CommonFeatures() {\r\n const [rows, setRows] = useState(createRows);\r\n const [sortColumns, setSortColumns] = useState([]);\r\n const [selectedRows, setSelectedRows] = useState(() => new Set());\r\n\r\n const countries = useMemo(() => {\r\n return [...new Set(rows.map((r) => r.country))].sort(new Intl.Collator().compare);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n const columns = useMemo(() => getColumns(countries), [countries]);\r\n\r\n const summaryRows = useMemo(() => {\r\n const summaryRow: SummaryRow = {\r\n id: 'total_0',\r\n totalCount: rows.length,\r\n client: rows[0].client,\r\n d01: rows[0].d01,\r\n yesCount: rows.filter((r) => r.available).length\r\n };\r\n return [summaryRow];\r\n }, [rows]);\r\n\r\n const sortedRows = useMemo((): Row[] => {\r\n if (sortColumns.length === 0) return rows;\r\n\r\n const sortedRows = [...rows];\r\n sortedRows.sort((a, b) => {\r\n for (const sort of sortColumns) {\r\n const comparator = getComparator(sort.columnKey);\r\n const compResult = comparator(a, b);\r\n if (compResult !== 0) {\r\n return sort.direction === 'ASC' ? compResult : -compResult;\r\n }\r\n }\r\n return 0;\r\n });\r\n return sortedRows;\r\n }, [rows, sortColumns]);\r\n\r\n const gridElement = (\r\n \r\n );\r\n\r\n return (\r\n <>\r\n
\r\n {/* exportToCsv(gridElement, 'CommonFeatures.csv')}>\r\n Export to CSV\r\n \r\n exportToXlsx(gridElement, 'CommonFeatures.xlsx')}>\r\n Export to XSLX\r\n \r\n exportToPdf(gridElement, 'CommonFeatures.pdf')}>\r\n Export to PDF\r\n \r\n */}\r\n
\r\n {gridElement}\r\n \r\n );\r\n}\r\n\r\nfunction ExportButton({\r\n onExport,\r\n children\r\n}: {\r\n onExport: () => Promise;\r\n children: React.ReactChild;\r\n}) {\r\n const [exporting, setExporting] = useState(false);\r\n return (\r\n {\r\n setExporting(true);\r\n await onExport();\r\n setExporting(false);\r\n }}\r\n >\r\n {exporting ? 'Exporting' : children}\r\n \r\n );\r\n}","import React from \"react\";\r\nimport \"../App.css\";\r\nimport { BaseAddress } from \"../projConst\";\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 ReportIcon from \"@material-ui/icons/Report\";\r\nimport { withStyles, makeStyles } from \"@material-ui/core/styles\";\r\nimport { width } from \"@material-ui/system\";\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\n\r\nconst StyledTableCell = withStyles((theme) => ({\r\n head: {\r\n backgroundColor: '#343433',\r\n color: theme.palette.common.white,\r\n opacity: 0.7,\r\n maxHeight: '2vh',\r\n },\r\n body: {\r\n fontSize: 14,\r\n },\r\n}))(TableCell);\r\n\r\nconst StyledTableRow = withStyles((theme) => ({\r\n root: {\r\n '&:nth-of-type(odd)': {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n },\r\n}))(TableRow);\r\n\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n table: {\r\n minWidth: 200,\r\n maxWidth: 350,\r\n }, \r\n}));\r\n\r\nconst ShowTotal = ({data}) => {\r\n const classes = useStyles();\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 {data.map((row) => (\r\n \r\n \r\n {row.vidp}\r\n \r\n {row.planh}\r\n {row.facth}\r\n {row.percent}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\nexport default ShowTotal;\r\n","import React, { Fragment, useState } from \"react\";\r\nimport {\r\n DatePicker,\r\n TimePicker,\r\n DateTimePicker,\r\n MuiPickersUtilsProvider,\r\n} from '@material-ui/pickers';\r\nimport ruLocale from \"date-fns/locale/ru\";\r\nimport DateFnsUtils from \"@date-io/date-fns\";\r\nimport format from \"date-fns/format\";\r\nimport buildLocalizeFn from 'date-fns/locale/_lib/buildLocalizeFn'\r\n\r\nconst YearMonthPicker = props => {\r\n //const [selectedDate, handleDateChange] = useState(new Date());\r\n const localeFormatMap = {\r\n en: \"MMMM d, yyyy\",\r\n fr: \"d MMM yyyy\",\r\n ru: \"MMMM yyyy\",\r\n };\r\n const localeCancelLabelMap = {\r\n en: \"cancel\",\r\n fr: \"annuler\",\r\n ru: \"отмена\",\r\n };\r\n const monthValues = {\r\n narrow: [\"Я\", \"Ф\", \"М\", \"А\", \"М\", \"И\", \"И\", \"А\", \"С\", \"О\", \"Н\", \"Д\"],\r\n abbreviated: [\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 wide: [\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 ruLocale.localize.month = buildLocalizeFn({\r\n values: monthValues,\r\n defaultWidth: 'wide',\r\n defaultFormattingWidth: 'wide'\r\n })\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default YearMonthPicker;","import React, { Component , Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport moment from 'moment';\r\nimport 'moment/locale/ru';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Modal from '@material-ui/core/Modal';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport YearMonthPicker from '../Lib/YearMonthPicker';\r\n//import { DatePicker } from \"@material-ui/pickers\";\r\n//import DatePicker from 'react-datepicker';\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem'; \r\nimport SelectDataList from '../Lib/SelectDataList';\r\n\r\nimport * as api from '../../api/apiFunc'\r\nimport * as R from 'ramda'\r\n\r\nfunction rand() {\r\n return Math.round(Math.random() * 20) - 10;\r\n}\r\n\r\nfunction getModalStyle() {\r\n const top = 50 + rand();\r\n const left = 50 + rand();\r\n\r\n return {\r\n top: `${top}%`,\r\n left: `${left}%`,\r\n transform: `translate(-${top}%, -${left}%)`,\r\n };\r\n}\r\n\r\nconst styles = theme => ({\r\n paper: {\r\n position: 'absolute',\r\n width: theme.spacing.unit * 50,\r\n backgroundColor: theme.palette.background.paper,\r\n boxShadow: theme.shadows[5],\r\n padding: theme.spacing.unit * 4,\r\n },\r\n button: {\r\n marginTop: theme.spacing.unit*3,\r\n marginLeft: theme.spacing.unit*8,\r\n color:'navy',\r\n fontWeight : \"bold\",\r\n },\r\n title: {\r\n marginTop: -theme.spacing.unit*2,\r\n marginBottom: theme.spacing.unit*3,\r\n textAlign: 'center',\r\n backgroundColor : '#f0f0f0'\r\n},\r\nmessage: {\r\n margin: theme.spacing.unit*2,\r\n textAlign: 'left',\r\n},\r\ngrid: {\r\n flexGrow: 1,\r\n },\r\n dialogPaper: {\r\n minHeight: '80vh',\r\n maxHeight: '80vh',\r\n }\r\n});\r\n\r\n\r\nclass ShowFilter extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.maxLen = 0\r\n this.FiltVal = {}\r\n this.state = {\r\n open: this.props.open,\r\n lastvalue : null\r\n };\r\n }\r\n/* componentDidMount() {\r\n const { columns, pick, deffilter } = this.props;\r\n console.log('deffilter===',deffilter);\r\n if (!api.isEmpty(deffilter)) {\r\n R.keys(deffilter).map(k => {\r\n const col = R.find(R.propEq('key', k))(columns)\r\n if (col._picklist && R.find(R.propEq('name', col._picklist))(pick)) {\r\n const curList = R.find(R.propEq('name', col._picklist))(pick).rows\r\n if (api.isNotEmptyArr(curList)) {\r\n const curLId = R.find(R.propEq('pk_id', deffilter[k]))(curList)\r\n const curId = curLId.id\r\n this.FiltVal[k] = curId\r\n }\r\n } else {\r\n this.FiltVal[k] = deffilter[k]\r\n }\r\n })\r\n }\r\n \r\n }*/ \r\n \r\n handleOpen = () => {\r\n this.setState({ open: true });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ open: false });\r\n };\r\n defaultSelectVal = (picklist_values,def_val) => {\r\n let def = picklist_values.map( x => {\r\n if (x.value == def_val) return (x) \r\n })\r\n //console.log(\"def======\",def);\r\n return def||{value :\"\",label:\"\"}\r\n }\r\n\r\n\r\n render() {\r\n const { classes, columns, pick, deffilter } = this.props;\r\n //console.log('this.FiltVal---', this.FiltVal);\r\n if (!api.isEmpty(deffilter) && !api.isEmpty(this.FiltVal) && this.FiltVal[\"user_id\"] ==0) {\r\n\r\n R.keys(deffilter).map(k => {\r\n const col = R.find(R.propEq('key', k))(columns)\r\n if (col._picklist && R.find(R.propEq('name', col._picklist))(pick)) {\r\n const curList = R.find(R.propEq('name', col._picklist))(pick).rows\r\n if (api.isNotEmptyArr(curList)) {\r\n const curLId = R.find(R.propEq('pk_id', deffilter[k]))(curList)\r\n const curId = curLId.id\r\n this.FiltVal[k] = curId\r\n }\r\n } else {\r\n if (k == 'period' && this.FiltVal[k] == undefined) \r\n this.FiltVal[k] = new Date(deffilter[k]+\"-01\") \r\n else\r\n this.FiltVal[k] = deffilter[k]\r\n }\r\n })\r\n }\r\n \r\n /* this.nbsp = new Object()\r\n this.mycol = new Object()\r\n this.maxLen = 0\r\n this.props.columns.map( (col) => this.maxLen = this.maxLen > col.name.length ? this.maxLen : col.name.length)\r\n this.props.columns.map( (col) => this.nbsp[col.name] = '..'.repeat(this.maxLen-col.name.length))\r\n */\r\n\r\n const InputMost = (col,type) => (\r\n
\r\n \r\n
\r\n { \r\n this.FiltVal[col.key] = event.target.value \r\n this.setState({ lastvalue: event.target.value });\r\n }}\r\n />\r\n
\r\n
\r\n )\r\n const InputCheck = (col) => {\r\n //console.log('this.FiltVal[col.key]',this.FiltVal[col.key]);\r\n //let chk = this.FiltVal[col.key] === 1 ? : false\r\n return (\r\n
\r\n \r\n
\r\n { \r\n this.FiltVal[col.key] = event.target.checked ? 1 : 0 \r\n this.setState({ lastvalue: event.target.value });\r\n }}\r\n />\r\n
\r\n
\r\n )\r\n }\r\n \r\n const InputSelect = (col,rows ) => (\r\n
\r\n \r\n
\r\n { \r\n if (e.value) \r\n this.FiltVal[col.key] = e.value \r\n this.setState({ lastvalue: e.value });\r\n }}\r\n selName = {col.key} \r\n />\r\n \r\n {/* \r\n */}\r\n
\r\n
\r\n )\r\n \r\n const InputMonthYear = (col) => {\r\n let dateValue = new Date(this.FiltVal[col.key]+\"-01\") \r\n if (dateValue === undefined) dateValue = new Date() //'дд.мм.гггг'\r\n //let dateValue = moment(null)\r\n //let options = {year: 'numeric', month: 'numeric', day: 'numeric' };\r\n \r\n // \r\n \r\n
\r\n {\r\n this.FiltVal[col.key] = d \r\n this.setState({ lastvalue: d })\r\n }}\r\n />\r\n
\r\n \r\n )}\r\n \r\n const InputDate = (col) => {\r\n let dateValue = this.FiltVal[col.key]\r\n if (dateValue === undefined)\r\n dateValue = 'дд.мм.гггг'\r\n //let dateValue = moment(null)\r\n //let options = {year: 'numeric', month: 'numeric', day: 'numeric' };\r\n\r\n // \r\n \r\n
\r\n { \r\n this.FiltVal[col.key] = event.target.value \r\n this.setState({ lastvalue: event.target.value });\r\n }}\r\n />\r\n
\r\n \r\n )}\r\n return (\r\n
\r\n \r\n {this.props.title}\r\n \r\n
\r\n {this.props.columns.map( (col) => {\r\n // if (R.not(col.filterable)) return null\r\n if (col._typecolumn ==='checkbox') {\r\n return InputCheck(col) \r\n }\r\n else \r\n {\r\n if (col._picklist&&R.find(R.propEq('name', col._picklist))(pick)){\r\n let curpick = R.find(R.propEq('name', col._picklist))(pick) \r\n let pkRow = curpick.rows\r\n let tmpRow = pkRow\r\n // let Nbsp = \"\\u00A0\".repeat(20) ie yt gjllth;bdftn\r\n let Nbsp = \"\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\"\r\n\r\n if (R.not(R.find(R.propEq('id', 0))(pkRow)))\r\n tmpRow = R.concat([{id:0,title:Nbsp}],pkRow); \r\n //pkRow.unshift({id:0,title:Nbsp});\r\n //console.log('pkRow',pkRow); \r\n if (this.FiltVal[col.key] === undefined) \r\n this.FiltVal[col.key] = 0\r\n //data.editor = \r\n //console.log('tmpRow----',tmpRow);\r\n return InputSelect(col,tmpRow)\r\n }\r\n else\r\n {\r\n if (col._typedata === 5 || col._typedata === 6)\r\n return InputDate(col) \r\n if (col._typedata === 15 )\r\n return InputMonthYear(col) \r\n if (col._typedata === 1 || col._typedata === 2) \r\n return InputMost(col,'number') \r\n return InputMost(col,'text') \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\nShowFilter.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(ShowFilter);","import {createContext} from 'react'\r\n\r\nexport const DataServerContext = createContext()\r\n","import React, { useState , useEffect} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport * as R from 'ramda'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n //width: '650vh',\r\n height: '100%',\r\n position: 'relative'\r\n },\r\n grid: {\r\n zIndex:9999,\r\n width: '100%',\r\n height: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n left:0,\r\n },\r\n row: {\r\n zIndex:9999,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n },\r\n child: {\r\n position: 'absolute',\r\n top: 0,\r\n left:0,\r\n }\r\n}))\r\n\r\n\r\nconst FormGrid = ({children,countrow,countcol,init}) => {\r\n const classes = useStyles()\r\n const [paint,Setpaint] = useState(init) \r\n const ShowRow = ({ ind }) => {\r\n let nstyle = { width: `calc(100%/${countcol})` }\r\n return (
\r\n {[...Array(countcol)].map((_, i) => {\r\n const mark = paint.filter(f=>f.r==ind&&f.c==i).length > 0\r\n return (
Setpaint([...paint,{r:ind,c:i}])}\r\n > 
)\r\n }\r\n )}\r\n
)\r\n }\r\n return (\r\n
\r\n
\r\n {[...Array(countrow)].map((_,i) =>\r\n \r\n )}\r\n
\r\n
{children}
\r\n
\r\n );\r\n }\r\n\r\n FormGrid.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default FormGrid;\r\n","import {createContext} from 'react'\r\n\r\nexport const InfoWinContext = createContext()","import React, { memo, useMemo, useState, useEffect } from 'react';\r\nimport {\r\n AzureMap,\r\n AzureMapDataSourceProvider,\r\n AzureMapFeature,\r\n AzureMapHtmlMarker,\r\n AzureMapLayerProvider,\r\n AzureMapsProvider,\r\n AzureMapPopup,\r\n\r\n} from 'react-azure-maps';\r\nimport { AuthenticationType, data, HtmlMarkerOptions, SymbolLayerOptions, MapMouseEvent, PopupOptions} from 'azure-maps-control';\r\nimport { Button, Chip } from '@material-ui/core';\r\nimport { key } from '../key';\r\nimport { apiDataUIUrl } from '../projConst';\r\n\r\nimport * as api from '../api/apiFunc' \r\nimport { red } from '@material-ui/core/colors';\r\n\r\nconst point1 = new data.Position(-100.01, 45.01);\r\nconst point2 = new data.Position(-120.2, 45.1);\r\nconst point3 = new data.Position(-120.2, 50.1);\r\nconst point4 = new data.Position(-126.2, 55.1);\r\n\r\nconst setPos = (pos) => pos?.Lng ? new data.Position(pos['Lng'], pos['Lat']) : new data.Position(0,0);;\r\nconst setPosPopur = (prop) => {\r\n //console.log('setPosPopur ==',prop.data)\r\n if (!prop?.data?.geometry) return new data.Position(-126.2, 55.1);\r\n return new data.Position(\r\n prop.data.geometry.coordinates[0],\r\n prop.data.geometry.coordinates[1]\r\n )\r\n \r\n}\r\n\r\nfunction clusterClicked(e) {\r\n console.log('clusterClicked', e);\r\n}\r\n\r\nconst onClick = (e) => {\r\n console.log('You click on: ', e);\r\n};\r\n\r\nfunction azureHtmlMapMarkerOptions(coordinates) {\r\n return {\r\n position: coordinates,\r\n text: 'My text',\r\n title: 'Title',\r\n };\r\n}\r\n\r\nconst memoizedOptions = {\r\n textOptions: {\r\n textField: ['get', 'title'], //Specify the property name that contains the text you want to appear with the symbol.\r\n offset: [0, 1.2],\r\n },\r\n};\r\n\r\nconst eventToMarker = [{ eventName: 'click', callback: onClick }];\r\n\r\nconst renderPoint = (marker) => {\r\n const rendId = Math.random();\r\n //console.log('marker', marker)\r\n const name = marker.title\r\n return (\r\n \r\n );\r\n};\r\n\r\nfunction renderHTMLPoint(coordinates) {\r\n const rendId = Math.random();\r\n return (\r\n }\r\n options={{ ...azureHtmlMapMarkerOptions(coordinates) }}\r\n events={eventToMarker}\r\n />\r\n );\r\n}\r\n\r\nconst colorValue = () =>\r\n '#000000'.replace(/0/g, function () {\r\n return (~~(Math.random() * 16)).toString(16);\r\n });\r\nconst markersStandardImages = [\r\n `marker-black`,\r\n `marker-blue`,\r\n `marker-darkblue`,\r\n `marker-red`,\r\n `marker-yellow`,\r\n `pin-blue`,\r\n `pin-darkblue`,\r\n `pin-red`,\r\n `pin-round-blue`,\r\n `pin-round-darkblue`,\r\n `pin-round-red`,\r\n];\r\nconst initDataMarkers = (data) => {\r\n const listmarks = data.reduce(\r\n (res, row) => {\r\n const newPoint = setPos(row) \r\n return [...res, { coord: newPoint, title: row.StationName, code: row.StationCode, Lat: row.Lat, Lng: row.Lng }]\r\n } , [])\r\n return listmarks\r\n}\r\n\r\nconst initDataMarker = (data) => {\r\n const listmark = data.reduce(\r\n (res, row) => {\r\n const newPoint = setPos(row) \r\n return [...res, { coord: newPoint, title: row.StationName, code: row.StationCode, Lat: row.Lat, Lng: row.Lng }]\r\n } , [])\r\n return listmark\r\n}\r\nconst rand = () => markersStandardImages[Math.floor(Math.random() * markersStandardImages.length)];\r\nconst ShowAzureMap = ({data,current,onUpdCoordinates,onSearchStation}) => {\r\n //const [markers, setMarkers] = useState([point1, point2, point3]);\r\n \r\n const [markers, setMarkers] = useState([]);\r\n const [curmarker, setCurMarker] = useState([]);\r\n const [htmlMarkers, setHtmlMarkers] = useState([point4]);\r\n const [markersLayer] = useState('SymbolLayer');\r\n const [markerLayer] = useState('SymbolLayer');\r\n const [layerOptions, setLayerOptions] = useState(memoizedOptions);\r\n const [showAllMarcers,setShowAllMarcers] = useState(true);\r\n const [popupOptions, setPopupOptions] = useState({});\r\n const [curProperties, setCurProperties] = useState(null);\r\n const [popupProperties, setPopupProperties] = useState({});\r\n const [visPopup, setVisPopup] = useState(false);\r\n const [sizeFont, setSizeFont] = useState(0.01);\r\n const [sizeFontSub, setSizeFontSub] = useState(0.01);\r\n\r\n const [getStationPos, setGetStationPos] = useState([]);\r\n \r\n useEffect(() => {\r\n setVisPopup(false);\r\n setMarkers(initDataMarkers(data))\r\n }, [data]) \r\n useEffect(() => {\r\n setVisPopup(false);\r\n //console.log('initDataMarker == ',current)\r\n setCurMarker(initDataMarker([current]))\r\n }, [current]) \r\n\r\n useEffect(() => {\r\n if (!curProperties || curProperties?.code!==popupProperties?.code){\r\n setCurProperties(popupProperties)\r\n //onSearchStation(popupProperties)\r\n }\r\n }, [popupProperties]) \r\n useEffect(() => {\r\n if (api.isNotEmptyArr(getStationPos)){\r\n onSearchStation(curProperties)\r\n //console.log('curProperties========',curProperties)\r\n }\r\n }, [getStationPos]) \r\n\r\n\r\n const option = useMemo(() => {\r\n return {\r\n authOptions: {\r\n authType: AuthenticationType.subscriptionKey,\r\n subscriptionKey: key,\r\n },\r\n center: [36,48],\r\n zoom: 6,\r\n view: 'Auto',\r\n };\r\n }, []);\r\n\r\n const addRandomMarker = () => {\r\n const randomLongitude = Math.floor(Math.random() * (-80 - -120) + -120);\r\n const randomLatitude = Math.floor(Math.random() * (30 - 65) + 65);\r\n const newPoint = new data.Position(randomLongitude, randomLatitude);\r\n setMarkers([...markers, newPoint]);\r\n };\r\n\r\n const addRandomHTMLMarker = () => {\r\n const randomLongitude = Math.floor(Math.random() * (-80 - -120) + -120);\r\n const randomLatitude = Math.floor(Math.random() * (30 - 65) + 65);\r\n const newPoint = new data.Position(randomLongitude, randomLatitude);\r\n setHtmlMarkers([...htmlMarkers, newPoint]);\r\n };\r\n\r\n const removeAllMarkers = () => {\r\n setMarkers([]);\r\n setHtmlMarkers([]);\r\n };\r\n\r\n const memoizedMarkerRender = useMemo(\r\n () => markers.map((marker) => renderPoint(marker)),\r\n [markers],\r\n );\r\n const memoizedCurMarkerRender = useMemo(\r\n () => curmarker.map((marker) => renderPoint(marker)),\r\n [curmarker],\r\n );\r\n\r\n /* const memoizedHtmlMarkerRender = useMemo(\r\n () => htmlMarkers.map((marker) => renderHTMLPoint(marker)),\r\n [htmlMarkers],\r\n ); */\r\n\r\n function getStationName(e) {\r\n if (e.map.getCamera().zoom >= 11.0) {\r\n setSizeFont(1.1)\r\n setSizeFontSub(0.9)\r\n }\r\n else if (e.map.getCamera().zoom > 7.0 && e.map.getCamera().zoom < 11.0){\r\n setSizeFont(0.75)\r\n setSizeFontSub(0.6)\r\n }\r\n else {\r\n setSizeFont(0.01)\r\n setSizeFontSub(0.01)\r\n }\r\n }\r\n\r\n function getCoordinates(e) {\r\n //console.log(\"getCoordinates=\",e); \r\n //const newPoint = new data.Position(e.position[0], e.position[1]);\r\n //setMarkers([...markers, newPoint]);\r\n onUpdCoordinates(e.position)\r\n }\r\n function getStation(e) {\r\n //console.log(\"getStation=\",e); \r\n //const newPoint = new data.Position(e.position[0], e.position[1]);\r\n //setMarkers([...markers, newPoint]);\r\n setGetStationPos(e.position);\r\n //onSearchStation(e.position)\r\n }\r\n \r\n //console.log('MarkerExample RENDER');\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {/* \r\n setLayerOptions({\r\n textOptions: {\r\n color: colorValue(),\r\n size: 16,\r\n },\r\n })\r\n }\r\n >\r\n {' '}\r\n Text Options\r\n \r\n \r\n setLayerOptions({\r\n iconOptions: {\r\n image: rand(),\r\n },\r\n })\r\n }\r\n >\r\n {' '}\r\n ICON OPTIONS\r\n \r\n \r\n \r\n \r\n */}\r\n
\r\n \r\n
\r\n \r\n {\r\n //console.log('Data on source added', e);\r\n },\r\n }}\r\n id={'markers AzureMapDataSourceProvider'}\r\n options={{ cluster: true, clusterRadius: 2 }}\r\n >\r\n {\r\n if (e.shapes && e.shapes.length > 0) {\r\n const prop = e.shapes[0];\r\n setPopupOptions({\r\n ...popupOptions,\r\n position: setPosPopur (prop),\r\n pixelOffset: [0, -18]\r\n });\r\n \r\n \r\n if (prop.data?.properties) {\r\n setVisPopup(true);\r\n setPopupProperties({\r\n ...prop.data.properties.popUpProp\r\n });\r\n }\r\n }\r\n }\r\n }}\r\n lifecycleEvents={{\r\n layeradded: () => {\r\n console.log('LAYER ADDED TO MAP');\r\n },\r\n }}\r\n type={markersLayer}\r\n />\r\n {showAllMarcers && memoizedMarkerRender}\r\n \r\n {\r\n console.log('Data on source added', e);\r\n },\r\n }}\r\n id={'curmarker AzureMapDataSourceProvider'}\r\n options={{ cluster: true, clusterRadius: 2 }}\r\n >\r\n {\r\n let prop = e.shapes[0];\r\n if (e.shapes && e.shapes.length > 0) {\r\n prop = e.shapes[0];\r\n setPopupOptions({\r\n ...popupOptions,\r\n position: setPosPopur (prop),\r\n pixelOffset: [0, -18]\r\n });\r\n \r\n \r\n if (prop.data.properties) {\r\n setVisPopup(true);\r\n setPopupProperties({\r\n ...prop.data.properties.popUpProp\r\n });\r\n }\r\n }\r\n \r\n if (prop && prop.data && prop.data.properties.popUpProp){\r\n const coord = prop.data.properties.popUpProp\r\n const lng = coord.Lng //Number(cord[0])\r\n const lat = coord.Lat //Number(cord[1]) \r\n //console.log('app-val cord', cord,lng,lat)\r\n e.map.setCamera({\r\n center: [lng,lat],\r\n });\r\n }\r\n }, \r\n mousemove: (e) => {\r\n if (e.shapes && e.shapes.length > 0) {\r\n const prop = e.shapes[0];\r\n setPopupOptions({\r\n ...popupOptions,\r\n position: setPosPopur (prop),\r\n pixelOffset: [0, -18]\r\n });\r\n \r\n \r\n if (prop.data?.properties) {\r\n setVisPopup(true);\r\n setPopupProperties({\r\n ...prop.data.properties.popUpProp\r\n });\r\n }\r\n }\r\n }\r\n }}\r\n \r\n lifecycleEvents={{\r\n layeradded: () => {\r\n console.log('LAYER ADDED TO MAP');\r\n },\r\n }}\r\n type={markerLayer}\r\n />\r\n {memoizedCurMarkerRender}\r\n \r\n \r\n
Код станции: {popupProperties.code}
\r\n
{popupProperties.title}
\r\n
{popupProperties.Lat}
\r\n
{popupProperties.Lng}
\r\n
\r\n }\r\n />\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n map: {\r\n height: '94%',\r\n },\r\n buttonContainer: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n /* display: 'grid',\r\n gridAutoFlow: 'column',\r\n gridGap: '10px',\r\n gridAutoColumns: 'max-content',\r\n padding: '2px 0',\r\n justifyItems: 'end'\r\n alignItems: 'center',*/\r\n },\r\n button: {\r\n height: 25,\r\n width: 180,\r\n backgroundColor: '#343433',\r\n opacity: 0.7,\r\n marginRight: '15px'\r\n },\r\n};\r\n\r\nexport default memo(ShowAzureMap);","import React from \"react\";\r\nexport const key = \"rrEq919nYkNekVmWJ__LQrgBUTV05E6OXRMrwd1wSCI\";\r\n\r\n\r\n\r\nexport const Description = ({ children }) => {\r\nreturn \r\n(\r\n
\r\n\r\nDescription: \r\n\r\n

\r\n\r\n{children}\r\n\r\n
\r\n\r\n);\r\n\r\n};\r\n\r\n","import React, { Fragment ,useContext, useEffect, useState, useCallback } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Style from 'style-it';\nimport \"bootstrap/dist/css/bootstrap.css\";\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport AppBar from '@material-ui/core/AppBar';\nimport Button from \"@material-ui/core/Button\";\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport \"./App.css\";\nimport {columnsFilter} from './dataconfig/columnsGrids'\n\nimport {\n SHOW_TOOL_BAR,\n SHOW_LEFT_SIDE_BAR,\n SHOW_FOOTHER, \n apiDataUrl,apiListUrl,apiSaveUrl, thisMock\n} from './projConst';\nimport {main_data,main_data_empty,main_data_row_empty} from './api/mockData';\nimport {pick_data} from './api/mockDepend';\nimport {main_save_data} from './api/mockSaveData';\n\nimport ShowAppHeader from \"./Components/ShowAppHeader\";\nimport ShowAppFooter from \"./Components/ShowAppFooter\";\nimport ShowAppToolbar from \"./Components/ShowAppToolbar\";\nimport ShowAppSidebar from \"./Components/ShowAppSidebar\";\nimport ShowGrid from \"./Components/Lib/ShowGrid\";\nimport TestGrid from \"./Components/Lib/TestGrid\";\nimport ShowTotal from \"./Components/ShowTotal\";\nimport ShowFilter from './Components/Lib/ShowFilter';\nimport FormGrid from \"./Components/FormGrid\";\n\nimport { DataServerContext } from \"./Server/DataServerContext\";\nimport { InfoWinContext } from \"./infowindow/infowinContext\";\n\nimport * as api from \"./api/apiFunc\";\nimport * as R from 'ramda'\nimport { shallowEqual, useDispatch,useSelector } from 'react-redux'\nimport {columnsMainData,columnsTotalData\n} from './dataconfig/columnsGrids'\n\nimport ShowAzureMap from \"./Components/ShowAzureMap\";\n\nconst useStyles = makeStyles(theme => ({\n responsPerson: {\n margin: theme.spacing(),\n height: 900,\n width: \"auto\"\n },\n root: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n },\n apptitle: {\n display: 'flex',\n width: '100%'\n },\n apptab: {\n minWidth: '80% !important',\n },\n appinnertab: {\n marginTop: '-30px'\n },\n usertitle: {\n alignSelf: 'center'\n },\n/*\n root: {\n margin: theme.spacing(),\n textAlign: \"left\"\n },*/\n content: {\n paddingLeft: -theme.spacing(5),\n textAlign: \"center\"\n },\n title: {\n paddingLeft: theme.spacing(3),\n textAlign: \"left\",\n color: \"#000\",\n backgroundColor: \"#d9d9d9\",\n fontSize: \"75%\",\n fontWeight: \"bold\",\n height: 5\n },\n}));\n\nconst defaultTabKey = '1';\n\nfunction App (props) {\n const classes = useStyles();\n const {curmessage,messageWin,alertWin,alertmessage,dialogWin,\n dialog,dialoganswer } = useContext(InfoWinContext);\n const { loading, getServerDataRedux, dataserver } = useContext(DataServerContext);\n\n const { tree,db,argum,iconsApp,configApp,themeCss,globalCss} = props\n const dispatch = useDispatch();\n\n const [mainlist, SetMainList] = useState([]);\n const [mainfilter, SetMainFilter] = useState([]);\n const [totallist, SetTotalList] = useState([]);\n const [totaltable, SetTotalTable] = useState([]);\n const [pick, SetPick] = useState([]);\n\n const [scrollY, setScrollY] = useState(0);\n const [updatedData, SetUpdatedData] = useState([]);\n const [deleteData, SetDeleteData] = useState([]);\n const [insertData, SetInsertData] = useState([]);\n const [showFilter, SetShowFilter] = useState({ open: false, title: 'Фильтр по полям', mess: \"\" });\n const [curentRow, SetCurentRow] = useState({});\n const [curentIdRow, SetCurentIdRow] = useState(null);\n const [newCoord, SetNewCoord] = useState({});\n const [subfilter, Setsubfilter] = useState(false);\n \n function logit() {\n setScrollY(window.pageYOffset);\n \n } \n const maindata = useSelector(state=>state.maindata,shallowEqual)\n const listdata = useSelector(state=>state.listdata,shallowEqual)\n\n useEffect(async () => {\n dispatch(getServerDataRedux(apiDataUrl, true, prepareParam({ datafilter: mainfilter }), thisMock, main_data, 'FETCH_MAIN_DATA',main_data_empty))\n dispatch(getServerDataRedux(apiListUrl, true, prepareParam(), thisMock, pick_data, 'FETCH_LIST_DATA'))\n }, []);\n\n/* useEffect(() => {\n function watchScroll() {\n window.addEventListener(\"scroll\", logit);\n }\n watchScroll();\n // Remove listener (like componentWillUnmount)\n return () => {\n window.removeEventListener(\"scroll\", logit);\n };\n }, []); \n*/\n useEffect(() => {\n if (api.isEmpty(maindata)) return\n SetMainList(maindata.serverdata.datamain);\n SetMainFilter(maindata.serverdata.datafilter);\n SetTotalList(api.SumTotalRow(maindata.serverdata.datamain));\n //SetTotalTable(maindata.serverdata.datatotal);\n SetTotalTable(api.SumTotalVid(maindata.serverdata.datamain));\n }, [maindata]);\n\n useEffect(() => {\n if (api.isEmpty(listdata)) return\n SetPick(listdata.serverdata.picklists);\n }, [listdata]);\n \n useEffect(() => {\n if (dialoganswer.winDialogAnswer)\n if (dialoganswer.userDialogAnswer.answer) {\n switch (dialoganswer.userDialogAnswer.id) {\n case 1:\n handle_delete_row()\n break;\n case 2:\n handle_upd_coord()\n break;\n }\n } else { messageWin(\"Отменено.\") } \n }, [dialoganswer])\n useEffect(() => {\n if (!api.isEmpty(newCoord)) \n handle_coord()\n }, [newCoord])\n\n const prepareParam = (userarg=null) => {\n const { tree, db } = props\n const appParams = { tree, db };\n\n return userarg ? {appParams,...userarg} : {appParams}\n } \n\n const handleColumnFilter =() => {\n //console.log('this.ToggleColumnFilter',this.ToggleColumnFilter); \n /* if (toggleColumnfilter) {\n ToggleColumnFilter = R.not(this.ToggleColumnFilter)\n SetToggleColumnfilter({toggleColumnfilter: this.ToggleColumnFilter});\n \n //this.props.onChangeFilterLoc('')\n } */\n SetShowFilter({open : true,title:'Фильтр по полям', mess : \"\" })\n \n }\n \n const handleSeek = (val,args) => {\n console.log('handleSeek',val,args)\n // R.keys(row).map(key => row[key].toString().indexOf(args) !== -1 ) \n if (args.arg1 == \"\") {\n SetMainList(maindata.serverdata.datamain)\n return \n }\n SetMainList(maindata.serverdata.datamain.filter(row => \n row.ID.toString().indexOf(args.arg1) !== -1 ||\n row.StationCode.toString().indexOf(args.arg1) !== -1 ||\n row.StationName.indexOf(args.arg1) !== -1 ||\n row.StationNameLong.indexOf(args.arg1) !== -1 ||\n row.CodeEcp.toString().indexOf(args.arg1) !== -1 ||\n row.TypeExport.toString().indexOf(args.arg1) !== -1 ||\n row.RailwayId.toString().indexOf(args.arg1) !== -1 ||\n row.TypePort.toString().indexOf(args.arg1) !== -1 ||\n row.StationNameEn.indexOf(args.arg1) !== -1 ||\n row.PrizDel.toString().indexOf(args.arg1) !== -1 ||\n row.Lat.toString().indexOf(args.arg1) !== -1 ||\n row.Lng.toString().indexOf(args.arg1) !== -1 \n ))\n }\n const onHandleSave = (name,data) => {\n //props.SaveDict({ table: name, data })\n }\n \n const handleCurRow = (row) => { \n SetCurentRow(row)\n }\n\n const onHandleAdd = (name, row) => { \n SetMainList([...mainlist,row])\n }\n\n const onHandleDelete = (name, row, pkid) => { \n SetMainList(mainlist.filter(el => el[pkid] !== row[pkid]))\n }\n\nconst onHandleUpdateGrid = (rows,currow,updated) => {\n SetMainList(rows);\n if (!api.isEmpty(updated)) {\n if (typeof updated.ID === 'number') {\n let idx = R.findIndex(R.propEq('ID', updated.ID))(updatedData)\n if (idx !== -1) {\n let updData = [...updatedData]\n //const newupdated = updated.updated\n //updData[idx] = { ...updData[idx], ...newupdated }\n updData[idx] = { ...updData[idx], ...currow }\n //const ID = updData[idx].ID\n //updData[idx] = { ...updData[idx], ..._updated }\n SetUpdatedData(updData)\n }\n else {\n //const temp = { ID: updated.ID, ...updated.updated }\n const temp = { ID: updated.ID, ...currow }\n SetUpdatedData([...updatedData, temp])\n }\n }\n else {\n let idx = R.findIndex(R.propEq('ID', updated.ID))(insertData)\n if (idx !== -1) {\n let updData = [...insertData]\n const newupdated = updated.updated\n updData[idx] = { ...updData[idx], ...newupdated }\n SetInsertData(updData)\n }\n else {\n const temp = { ID: updated.ID, ...updated.updated }\n SetInsertData([...insertData, temp])\n }\n }\n }\n } \n const handleScroll = (event) => {\n let scrollTop = event.srcElement.body.scrollTop\n console.log('scrollTop ==',scrollTop);\n let itemTranslate = Math.min(0, scrollTop / 3 - 60)\n \n }\n const handleClearFilter = () => {\n handleFilterAnswer(true, {})\n //SetAutoclearFilter(true)\n }\n\n const handleFilterAnswer = (answer, listFilter) => {\n SetShowFilter({open : false,title:'Фильтр по полям', mess : \"\"})\n if (answer == false) return\n SetMainFilter(listFilter)\n let check = false\n R.keys(listFilter).map(key => check = (listFilter[key] !== null ? true : check))\n if (!check) {\n SetMainList(maindata.serverdata.datamain)\n Setsubfilter(false)\n messageWin(\"Фильтр очищен.\");\n }\n else {\n let templist = [...mainlist]\n R.keys(listFilter).map(key => {\n if (listFilter[key] !== null)\n templist = templist.filter(row => {\n let res \n if (typeof row[key] === 'number')\n res = row[key] == Number(listFilter[key]) \n if (typeof row[key] === 'string')\n res = row[key].toString().indexOf(listFilter[key]) !== -1 \n \n return (res)\n })\n })\n Setsubfilter(true)\n SetMainList(templist)\n SetCurentRow({})\n\n /* SetMainList(maindata.serverdata.datamain.filter(row => \n row.ID.toString().indexOf(args.arg1) !== -1 ||\n row.WorksCode.toString().indexOf(args.arg1) !== -1 ||\n row.WorksName.indexOf(args.arg1) !== -1 ||\n row.WorksNameLong.indexOf(args.arg1) !== -1 ||\n row.WorksCodeSap.indexOf(args.arg1) !== -1 ||\n row.WorksCodeGd.indexOf(args.arg1) !== -1 ||\n row.AgentId.toString().indexOf(args.arg1) !== -1 ||\n row.Priz.toString().indexOf(args.arg1) !== -1 ||\n row.OutUzKvitSequence.indexOf(args.arg1) !== -1 ||\n row.WeightTrainSequence.indexOf(args.arg1) !== -1 ||\n row.LocalCodeWorkSequence.indexOf(args.arg1) !== -1 ||\n row.StationDefaultId.toString().indexOf(args.arg1) !== -1 ||\n row.TranspInstrHeaderSequence.indexOf(args.arg1) !== -1 ||\n row.VersionXml.indexOf(args.arg1) !== -1\n )) */\n messageWin(\"Данные отфильтрованы ...\");\n\n }\n\n }\n const handleSaveData = () => {\n let tempins = [...insertData].reduce((arr, el) => {\n let tmp = { ...el }\n tmp.ID = 0\n return [...arr, { ...tmp }]\n }, [])\n \n console.log(\"updatedData\", JSON.stringify({updatedData: updatedData,deleteData,insertData : [...tempins] }))\n dispatch(getServerDataRedux(apiSaveUrl, true, prepareParam({updatedData,deleteData,insertData : [...tempins]}), thisMock, main_data, 'FETCH_MAIN_DATA'))\n SetUpdatedData([])\n SetDeleteData([])\n SetInsertData([])\n messageWin(\"Данные сохранены .\");\n }\n const handle_delete_row = async () => {\n //dispatch(getServerDataRedux(apiSaveUrl, true, prepareParam({action: 'delete', card_id:cardid }), thisMock, main_data, 'FETCH_MAIN_DATA',{},\"Карта удалена!\")) \n SetMainList(mainlist.filter(el => el.ID !== curentRow.ID))\n SetDeleteData([...deleteData, { ID: curentRow.ID }])\n }\n const handleDeleteRow = () => {\n return dialogWin(1, 'Сообщение', `Удалить запись ?`, false, 'handle_delete_row()') \n }\n const handleInsertRow = () => {\n let newrow = main_data_row_empty\n let random_id = \"ins-\";\n let random_possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n for (let i = 0; i < 20; i++) {\n random_id += random_possible.charAt(Math.floor(Math.random() * random_possible.length));\n }\n newrow.ID = random_id \n const newrows = [...mainlist]\n newrows.push({...newrow}); \n SetMainList(newrows)\n }\n const onHandleMessage = (mess) => {\n messageWin(mess)\n }\n const NoCurData = (data) => {\n if (!api.isNotEmptyArr(data)) return []\n if (api.isEmpty(curentRow)) return data\n return data.filter(el=>el.ID != curentRow.ID)\n }\n const handle_upd_coord = async () => {\n if (api.isEmpty(curentRow)) {\n messageWin(\"Выберите станцию.\");\n return\n }\n let updrows = [...mainlist]\n let idx = R.findIndex(R.propEq('ID', curentRow['ID']))(updrows)\n updrows[idx].Lng = newCoord.Lng \n updrows[idx].Lat = newCoord.Lat \n const newcurrrow = {...curentRow,Lng:newCoord.Lng,Lat:newCoord.Lat}\n SetCurentRow(newcurrrow)\n let updated = { ['ID']: curentRow['ID'], updated: { ...curentRow, Lng: newCoord.Lng, Lat: newCoord.Lat } }\n onHandleUpdateGrid(updrows,newcurrrow,updated)\n }\n const handle_coord = () => {\n if (api.isEmpty(curentRow)) {\n messageWin(\"Выберите станцию.\");\n return\n }\n return dialogWin(2, 'Сообщение', `Записать новые координаты для станции ${curentRow.StationNameLong} ?`, false, 'handle_upd_coord()') \n }\n\n const handleUpdCoordinates = (pos) => {\n SetNewCoord({ Lat: pos[1], Lng: pos[0] }) \n }\n const handleSearchStation = (station) => {\n const row = R.find(R.propEq('StationCode', station.code))(mainlist)\n const rowid = row?.ID ? row.ID : null\n console.log('handleSearchStation ======',rowid);\n SetCurentIdRow(rowid)\n }\n return (\n \n \n \n
\n {!api.isNotEmptyArr(configApp) && }\n {api.isNotEmptyArr(configApp) && \n
\n (\"Простое сообщение\")}\n messagetitle={\" Шаблон клиенского приложения (единый интерфейс) .\"}\n alertSimple={() => alertWin(\"info\", \"Расширенная инфа о сайте\")}\n errorSimple={() => alertWin(\"error\", \"Вывод ошибки\")}\n nameNsi={\"Справочник станций\"}\n />\n {SHOW_TOOL_BAR && }\n
\n {SHOW_LEFT_SIDE_BAR &&
\n \n
}\n
\n
\n
\n \n
\n
\n dialogWin(1, 'Внимание', mess , true) \n }\n />\n \n {/* */}\n
\n
\n
\n {SHOW_FOOTHER &&
\n \n
} \n
}\n
\n \n
\n );\n}\n\nexport default App;\n","export default\r\n{\r\n \"iconsApp\": [\r\n {\r\n \"ui_app_icon_id\": 1,\r\n \"ui_app_icon_name\": \"ic_perm_identity_24px\",\r\n \"ui_app_icon_mnem\": \"avatar\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_perm_identity_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 2,\r\n \"ui_app_icon_name\": \"ic_apps_24px\",\r\n \"ui_app_icon_mnem\": \"apps\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_apps_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 10,\r\n \"ui_app_icon_name\": \"ic_add_alert_24px\",\r\n \"ui_app_icon_mnem\": \"tabl\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_add_alert_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 11,\r\n \"ui_app_icon_name\": \"table\",\r\n \"ui_app_icon_mnem\": \"imgtable\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"table\",\r\n \"ui_app_icon_file\": \"/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAuAC0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4o+BH7GfxU/ae0m/v/h94D8R+LrPS5lt7ubTbUzLbyMNwViOhI5rvP+HSn7S3/RFfH3/gtavrj/ggZ8EPj18VvhF4/uPhD8brH4Vadaaxbx6haT+FLPWTfSmElZA86kpheMDg9a++/wDhjr9tj/o8TRv/AA2Wlf8AxFdEp2djnULo/Ez/AIdKftLf9EV8ff8Agtaj/h0p+0t/0RXx9/4LWr9s/wDhjr9tj/o8TRv/AA2Wlf8AxFH/AAx1+2x/0eJo3/hstK/+IqfaFch+Jn/DpT9pb/oivj7/AMFrV87V/R5/wx1+2x/0eJo3/hstK/8AiK/nDq4yuRKNj7Z/4JX3f7Glv4A8VD9p21nn106hF/YhjOsjFt5fz/8AHgwX7/8Af59OK+qP7U/4JLf9A68/768W/wDxdeY/8EIvjP8AtGfC/wCE3jyD4J/BzQ/ibpd1q8EmpXV/4gttMaymEJCxqss0ZYFecgGvvD/hrj9vn/o07wb/AOFzp/8A8l1Mt/8Aglx2/wCAfLv9qf8ABJb/AKB15/314t/+Lo/tT/gkt/0Drz/vrxb/APF19Rf8Ncft8/8ARp3g3/wudP8A/kuj/hrj9vn/AKNO8G/+Fzp//wAl1P8AW4/62Pl3+1P+CS3/AEDrz/vrxb/8XX4/V/RH/wANcft8/wDRp3g3/wALnT//AJLr+dyrgRM+/P8Agjz8PNI8afDbxjLqX7XF9+zg8OpwqmmweJYNKGsAxZ88rJcRF9v3cgHHrX2H/wAKI8Lf9JSNY/8ADg2f/wAn1+IFFNxu7iUrH7f/APCiPC3/AElI1j/w4Nn/APJ9H/CiPC3/AElI1j/w4Nn/APJ9fiBRS5B83kft/wD8KI8Lf9JSNY/8ODZ//J9fiBRRVJWJbuf/2Q==\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 2,\r\n \"ui_app_icon_name\": \"ic_apps_24px\",\r\n \"ui_app_icon_mnem\": \"apps\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_apps_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 12,\r\n \"ui_app_icon_name\": \"ic_refresh_24px\",\r\n \"ui_app_icon_mnem\": \"refresh\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_refresh_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 22,\r\n \"ui_app_icon_name\": \"ic_add_circle_24px\",\r\n \"ui_app_icon_mnem\": \"nofilt\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_add_circle_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 13,\r\n \"ui_app_icon_name\": \"ic_add_circle_24px\",\r\n \"ui_app_icon_mnem\": \"add\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_add_circle_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 14,\r\n \"ui_app_icon_name\": \"ic_content_copy_24px\",\r\n \"ui_app_icon_mnem\": \"copy\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_content_copy_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 15,\r\n \"ui_app_icon_name\": \"ic_edit_24px\",\r\n \"ui_app_icon_mnem\": \"edit\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_edit_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 16,\r\n \"ui_app_icon_name\": \"ic_print_24px\",\r\n \"ui_app_icon_mnem\": \"print\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_print_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 17,\r\n \"ui_app_icon_name\": \"ic_delete_24px\",\r\n \"ui_app_icon_mnem\": \"delete\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_delete_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 18,\r\n \"ui_app_icon_name\": \"ic_search_24px\",\r\n \"ui_app_icon_mnem\": \"search\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_search_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 19,\r\n \"ui_app_icon_name\": \"ic_save_24px\",\r\n \"ui_app_icon_mnem\": \"save\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_save_24px\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 21,\r\n \"ui_app_icon_name\": \"ic_filter_alt_off_black_24dp\",\r\n \"ui_app_icon_mnem\": \"filteroff\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_filter_alt_off_black_24dp\",\r\n \"ui_app_icon_file\": \"\"\r\n },\r\n {\r\n \"ui_app_icon_id\": 20,\r\n \"ui_app_icon_name\": \"ic_filter_alt_black_24dp\",\r\n \"ui_app_icon_mnem\": \"filter\",\r\n \"is_Global\": 1,\r\n \"application_id\": null,\r\n \"ui_app_icon_file_name\": \"ic_filter_alt_black_24dp\",\r\n \"ui_app_icon_file\": \"\"\r\n //\"ui_app_icon_file\": \"\"\r\n }\r\n ],\r\n \"theme\": \"\",\r\n \"blocks\": [\r\n {\r\n \"block_id\": 1,\r\n \"block_parent_id\": null,\r\n \"block\": \"header\",\r\n \"css\": \".AppHeader{\\nbackground-color:#abbd0b;\\ncolor:#000000;\\nmargin:27px;\\nbox-shadow:10px 4px 5px -1px rgba(105,104,105,0.53);\\n}.TableImgButton{\\nbackground-color:#9ff08d;\\n}.App-header{\\npadding:5px;\\ndisplay:flex;\\nwidth:100%;\\nbackground-color:rgba(52, 52, 51, 1);\\ncolor:#fff;\\nborder-bottom:3px solid #6e767d;\\nfont-size:16;\\n}\\n\",\r\n \"icons\": [\r\n \r\n ],\r\n \"children\": [\r\n {\r\n \"block_id\": 3,\r\n \"block_parent_id\": 1,\r\n \"block\": \"header-1\",\r\n \"css\": \".AppHeader-1{\\nbackground-color:#0fd430;\\ncolor:#0a0a0a;\\nheight:4vh;\\nborder:1px solid black;\\n}.App-header-1{\\nwidth:30%;\\n}\\n\",\r\n \"icons\": [\r\n {\r\n \"id\": 2,\r\n \"order\": null,\r\n \"title\": \"Пользователь\",\r\n \"style\": \"\"\r\n }\r\n ],\r\n \"children\": [\r\n \r\n ]\r\n },\r\n {\r\n \"block_id\": 11,\r\n \"block_parent_id\": 1,\r\n \"block\": \"header-2\",\r\n \"css\": \".App-header-2{\\nwidth:60%;\\n}\\n\",\r\n \"icons\": [\r\n \r\n ],\r\n \"children\": [\r\n \r\n ]\r\n },\r\n {\r\n \"block_id\": 12,\r\n \"block_parent_id\": 1,\r\n \"block\": \"header-3\",\r\n \"css\": \".App-header-3{\\nwidth:10%;\\n}\\n\",\r\n \"icons\": [\r\n {\r\n \"id\": 1,\r\n \"order\": null,\r\n \"title\": \"Аватар\",\r\n \"style\": \"\"\r\n }\r\n ],\r\n \"children\": [\r\n \r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"block_id\": 2,\r\n \"block_parent_id\": null,\r\n \"block\": \"footer\",\r\n \"css\": `.App-footer{\r\n padding: 10px;\r\n display: flex;\r\n width: 100%;\r\n background-color: #343433;\r\n color: #fff;\r\n border-bottom: 3px solid #6e767d;\r\n box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\r\n height: 7vh;\r\n font-size: 16\r\n }\\n`,\r\n \"icons\": [\r\n \r\n ],\r\n \"children\": [\r\n \r\n ]\r\n },\r\n {\r\n \"block_id\": 7,\r\n \"block_parent_id\": null,\r\n \"block\": \"maincontent\",\r\n \"css\": \".App-main{\\nwidth:100%;\\n}\\n\",\r\n \"icons\": [\r\n \r\n ],\r\n \"children\": [\r\n \r\n ]\r\n },\r\n {\r\n \"block_id\": 10,\r\n \"block_parent_id\": null,\r\n \"block\": \"toolsbar\",\r\n \"css\": \".App-toolsbar{\\nwidth:100%;\\npadding:2px 15px 2px 12px;\\ndisplay:block;\\nfloat:left;\\nbackground-color:#f7f7f7;\\ncolor:#fff !important;\\nborder-bottom:1px solid #ddd;\\n}.App-toolsbar-icons-style{\\nmargin-right:20px;\\nfloat:left;\\nfont-size:24px;\\ncolor:#6e767d;\\n}.App-toolsbar-search-style{\\nfloat:left;\\nfont-size:24px;\\ncolor:#6e767d;\\n}\\n\",\r\n \"icons\": [\r\n \r\n ],\r\n \"children\": [\r\n {\r\n \"block_id\": 13,\r\n \"block_parent_id\": 10,\r\n \"block\": \"toolsbar-1\",\r\n \"css\": \"\\n}\\n\",\r\n \"icons\": [\r\n {\r\n \"id\": 12,\r\n \"order\": 1,\r\n \"title\": \"Обновить\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 13,\r\n \"order\": 2,\r\n \"title\": \"Добавить\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 14,\r\n \"order\": null,\r\n \"title\": \"Копировать\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 15,\r\n \"order\": null,\r\n \"title\": \"Редактировать\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 20,\r\n \"order\": 7,\r\n \"title\": \"Фильтр\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:red;}\"\r\n },\r\n {\r\n \"id\": 21,\r\n \"order\": 7,\r\n \"title\": \"Фильтр не выбран\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 22,\r\n \"order\": 8,\r\n \"title\": \"Очистить фильтр\",\r\n \"style\": \"{ marginLeft:20px; float:left; fontSize:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 19,\r\n \"order\": 1,\r\n \"title\": \"Сохранить\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 16,\r\n \"order\": null,\r\n \"title\": \"Excel\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n },\r\n {\r\n \"id\": 17,\r\n \"order\": 5,\r\n \"title\": \"Удалить\",\r\n \"style\": \"{ margin-left:20px; float:left; font-size:24px; color:#6e767d;}\"\r\n }\r\n ],\r\n \"children\": [\r\n \r\n ]\r\n },\r\n {\r\n \"block_id\": 14,\r\n \"block_parent_id\": 10,\r\n \"block\": \"toolsbar-2\",\r\n \"css\": \"\\n}\\n\",\r\n \"icons\": [\r\n {\r\n \"id\": 18,\r\n \"order\": null,\r\n \"title\": \"Поиск\",\r\n \"style\": \"\"\r\n }\r\n ],\r\n \"children\": [\r\n \r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }","\r\nexport const FETCH_UNIVER_UI = 'FETCH_UNIVER_UI'\r\nexport const FETCH_MAIN_DATA = 'FETCH_MAIN_DATA'\r\nexport const FETCH_LIST_DATA = 'FETCH_LIST_DATA'\r\n\r\nexport const UUI_GLOBAL = 'UUI_GLOBAL'\r\nexport const UUI_THEME = 'UUI_THEME'\r\n\r\nexport const GET_MAIN_DATA = 'GET_MAIN_DATA'\r\nexport const GET_LIST_DATA = 'GET_LIST_DATA'\r\nexport const GET_MAIN_ACCESS = 'GET_MAIN_ACCESS'\r\nexport const GET_USER_SAMNAME = 'GET_USER_SAMNAME'\r\nexport const GET_USER_CULTURE = 'GET_USER_CULTURE'\r\nexport const CLEAR_LIST_DATA = 'CLEAR_LIST_DATA'\r\nexport const SET_LOADING = 'SET_LOADING'\r\n\r\nexport const SHOW_MESS_APP = 'SHOW_MESS_APP'\r\nexport const SHOW_ALERT_APP = 'SHOW_ALERT_APP'\r\nexport const SHOW_DIALOG_APP = 'SHOW_DIALOG_APP'\r\nexport const DIALOG_ANSWER = 'DIALOG_ANSWER'\r\n\r\nexport const SEND_UPDATES_SUCCESS = 'SEND_UPDATES_SUCCESS'\r\nexport const SEND_UPDATES_FAILURE = 'SEND_UPDATES_FAILURE'\r\n","import React,{Fragment,useState,useEffect,useContext} from 'react';\r\nimport App from './App';\r\nimport { apiDataUIUrl,thisMock } from './projConst';\r\nimport mockUIapp from './api/mockUIapp';\r\nimport * as api from './api/apiFunc'\r\nimport * as R from 'ramda'\r\nimport { useQueryParam, NumberParam, StringParam } from 'use-query-params';\r\nimport { shallowEqual, useDispatch,useSelector } from 'react-redux'\r\nimport { DataServerContext } from \"./Server/DataServerContext\";\r\nimport {UiGlobalcss,UiThemecss,UiConfigApp} from './Actions/actions.jsx'\r\n\r\nfunction Main() {\r\n const [db, setDb] = useQueryParam('db', StringParam);\r\n const [tree, setTree] = useQueryParam('tree', NumberParam);\r\n const [argum, setArg] = useQueryParam('argum', StringParam);\r\n\r\n const { getServerDataRedux, } = useContext(DataServerContext);\r\n\r\n const dispatch = useDispatch();\r\n\r\n const appParams = { tree, db };\r\n const mainuniui = useSelector(state=>state.mainuniui,shallowEqual)\r\n \r\n useEffect(async () => {\r\n dispatch(getServerDataRedux(apiDataUIUrl,false, {appParams},true, mockUIapp,'FETCH_UNIVER_UI'))\r\n }, []);\r\n useEffect(() => {\r\n if (api.isEmpty(mainuniui)) return\r\n let header = R.find(R.propEq(\"block\", \"header\"))(mainuniui.serverdata.blocks) \r\n let menu = R.find(R.propEq(\"block\", \"toolsbar\"))(mainuniui.serverdata.blocks) \r\n dispatch(UiGlobalcss(api.parsingCss(mainuniui.serverdata.blocks, '', 'css', 'children')))\r\n dispatch(UiThemecss(mainuniui.serverdata.theme))\r\n dispatch(UiConfigApp({ ...mainuniui.serverdata,header,menu }))\r\n }, [mainuniui]);\r\n\r\n return (\r\n \r\n {mainuniui && mainuniui.globalCss && \r\n \r\n /* userdata={userdata}\r\n maindata={otherdata}\r\n SaveDict={handleSaveDict}\r\n SaveReq={handleSaveReq}\r\n */}\r\n \r\n );\r\n}\r\n\r\nexport default Main;\r\n","import React, { useCallback } from \"react\";\r\nimport {\r\n FETCH_DATA_START,\r\n FETCH_MAIN_DATA,\r\n FETCH_LIST_DATA,\r\n FETCH_DATA_FAILURE,\r\n UUI_GLOBAL,\r\n UUI_THEME,\r\n SHOW_MESS_APP\r\n} from '../types'\r\nimport { shallowEqual, useDispatch,useSelector } from 'react-redux'\r\n\r\nexport const UiGlobalcss = (glcss) => {\r\n return (dispatch, getState) => {\r\n return dispatch({ type: UUI_GLOBAL, payload: {globalCss: glcss} })\r\n }\r\n}\r\nexport const UiThemecss = (glcss) => {\r\n return (dispatch, getState) => {\r\n return dispatch({ type: UUI_THEME, payload: {themeCss: glcss} })\r\n }\r\n}\r\nexport const UiConfigApp = (blocks) => {\r\n return (dispatch, getState) => {\r\n return dispatch({ type: UUI_GLOBAL, payload: blocks })\r\n }\r\n}\r\nexport const ShowMessageApp = (curmess) => {\r\n return (dispatch, getState) => {\r\n //console.log('obj----AddRememberApp-----',obj)\r\n if (!(curmess.draw)) {\r\n curmess.draw = { vertical: 'top', horizontal: 'left' }\r\n }\r\n return dispatch({ type: SHOW_MESS_APP, payload: curmess })\r\n }\r\n}\r\n \r\n/*export const fetchData = (filters) => {\r\n //console.log('filters__',filters)\r\n return async dispatch => {\r\n dispatch( CreateAct(FETCH_DATA_START))\r\n await fetchDataApi(filters)\r\n .then((maindata) => {\r\n //console.log('maindata__',maindata)\r\n dispatch(CreateAct(FETCH_MAIN_DATA,{maindata})) \r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: FETCH_DATA_FAILURE,\r\n payload: error,\r\n error: true\r\n })\r\n console.log(error)\r\n })\r\n }\r\n }*/","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import * as R from 'ramda'\r\n\r\nimport {FETCH_UNIVER_UI,\r\n UUI_GLOBAL,\r\n UUI_THEME,\r\n } from '../types'\r\n \r\nconst initialState = {};\r\n\r\nexport default function mainuniua(state = initialState, {type,payload}) {\r\n switch (type) {\r\n case FETCH_UNIVER_UI:\r\n return { ...state, ...payload }\r\n case UUI_GLOBAL:\r\n return { ...state, ...payload }\r\n case UUI_THEME:\r\n return { ...state, ...payload }\r\n default:\r\n return state;\r\n }\r\n}","import * as R from 'ramda'\r\n\r\nimport {\r\n FETCH_MAIN_DATA,\r\n} from '../types'\r\n \r\nconst initialState = {};\r\n\r\nexport default function maindata(state = initialState, {type,payload}) {\r\n switch (type) {\r\n case FETCH_MAIN_DATA:\r\n return R.merge(state, payload)\r\n default:\r\n return state;\r\n }\r\n}","import * as R from 'ramda'\r\n\r\nimport {\r\n FETCH_LIST_DATA,\r\n} from '../types'\r\n \r\nconst initialState = {};\r\n\r\nexport default function listdata(state = initialState, {type,payload}) {\r\n switch (type) {\r\n case FETCH_LIST_DATA:\r\n return R.merge(state, payload)\r\n default:\r\n return state;\r\n }\r\n}","import * as R from 'ramda'\r\n\r\nimport { SHOW_MESS_APP,\r\n } from '../types'\r\n \r\nconst initialState = {\r\n curmessage : { open : false , mess : \"\"},\r\n };\r\n\r\nexport default function mainscreen(state = initialState, {type,payload}) {\r\n switch (type) {\r\n case SHOW_MESS_APP:\r\n return {\r\n ...state,\r\n curmessage : payload\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from 'redux';\r\n\r\nimport mainuniui from './mainuniui';\r\nimport maindata from './maindata';\r\nimport listdata from './listdata';\r\nimport mainscreen from './mainscreen';\r\n\r\nexport default combineReducers({\r\n mainuniui,maindata,listdata,mainscreen\r\n}); ","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport Button from '@material-ui/core/Button';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport green from '@material-ui/core/colors/green';\r\nimport amber from '@material-ui/core/colors/amber';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst styles1 = theme => ({\r\n success: {\r\n backgroundColor: green[600],\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.primary.dark,\r\n },\r\n warning: {\r\n backgroundColor: amber[700],\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(),\r\n },\r\n message: {\r\n display: 'block',\r\n fontSize: '110%',\r\n /* alignItems: 'left'*/\r\n textAlign: 'left',\r\n color: 'white'\r\n },\r\n});\r\n\r\nfunction MySnackbarContent(props) {\r\n const { classes, className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\n\r\nMySnackbarContent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n message: PropTypes.node,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf(['success', 'warning', 'error', 'info']).isRequired,\r\n};\r\n\r\nconst MySnackbarContentWrapper = withStyles(styles1)(MySnackbarContent);\r\n\r\nconst styles2 = theme => ({\r\n margin: {\r\n margin: theme.spacing(),\r\n },\r\n});\r\n\r\nclass CustomSnackbars extends React.Component {\r\n state = {\r\n open: false,\r\n };\r\n\r\n render() {\r\n const { classes , uservar,usermess,useropen,userClose } = this.props;\r\n // variant=\"success\" \"error\" \"warning\" \"info\"\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCustomSnackbars.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles2)(CustomSnackbars);","import React, { Component , Fragment} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Modal from '@material-ui/core/Modal';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\n\r\nfunction rand() {\r\n return Math.round(Math.random() * 20) - 10;\r\n}\r\n\r\nfunction getModalStyle() {\r\n const top = 50 + rand();\r\n const left = 50 + rand();\r\n\r\n return {\r\n top: `${top}%`,\r\n left: `${left}%`,\r\n transform: `translate(-${top}%, -${left}%)`,\r\n };\r\n}\r\n\r\nconst styles = theme => ({\r\n paper: {\r\n position: 'absolute',\r\n width: theme.spacing(50),\r\n backgroundColor: theme.palette.background.paper,\r\n boxShadow: theme.shadows[5],\r\n padding: theme.spacing(4),\r\n },\r\n button: {\r\n marginTop: theme.spacing(3),\r\n marginLeft: theme.spacing(8),\r\n color:'navy',\r\n fontWeight : \"bold\",\r\n },\r\n title: {\r\n marginTop: -theme.spacing(2),\r\n marginBottom: theme.spacing(3),\r\n textAlign: 'center',\r\n backgroundColor : '#f0f0f0'\r\n},\r\nmessage: {\r\n margin: theme.spacing(2),\r\n textAlign: 'left',\r\n},\r\n});\r\n\r\nclass ShowDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n open: this.props.open,\r\n };\r\n }\r\n\r\n handleOpen = () => {\r\n this.setState({ open: true });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ open: false });\r\n };\r\n\r\n render() {\r\n const { classes } = this.props;\r\n\r\n return (\r\n
\r\n \r\n {this.props.title}\r\n \r\n \r\n {this.props.message}\r\n \r\n \r\n \r\n {!this.props.statement &&\r\n <> \r\n \r\n \r\n \r\n }\r\n {this.props.statement &&\r\n \r\n }\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nShowDialog.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles)(ShowDialog);","import {SHOW_ALERT_APP,SHOW_DIALOG_APP,DIALOG_ANSWER,SHOW_MESS_APP} from '../types'\r\n\r\nconst handlers = {\r\n [SHOW_MESS_APP]: (state, {payload}) => ({...state, curmessage: payload}),\r\n [SHOW_ALERT_APP]: (state, {payload}) => ({...state, alertmessage: payload}),\r\n [SHOW_DIALOG_APP]: (state, {payload}) => ({...state, dialog: payload}),\r\n [DIALOG_ANSWER]: (state, {payload}) => ({...state, dialoganswer: payload}),\r\n DEFAULT: state => state\r\n }\r\n \r\nexport const infowinReducer = (state, action) => {\r\n const handler = handlers[action.type] || handlers.DEFAULT\r\n return handler(state, action)\r\n }\r\n \r\n","import React, {useReducer} from 'react' \r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport CustomSnackbars from './CustomSnackbars'\r\nimport ShowDialog from './ShowDialog'\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport {InfoWinContext} from './infowinContext'\r\nimport {infowinReducer} from './infowinReducer'\r\nimport {SHOW_ALERT_APP,SHOW_MESS_APP,SHOW_DIALOG_APP,DIALOG_ANSWER} from '../types'\r\n\r\nconst useStyles = makeStyles( theme => ({ \r\n root: {\r\n textAlign: 'left',\r\n },\r\n content: {\r\n paddingLeft: theme.spacing(3),\r\n },\r\n title: {\r\n paddingLeft: theme.spacing(3),\r\n textAlign: 'left',\r\n color : '#000',\r\n backgroundColor : '#d9d9d9',\r\n fontSize: '75%',\r\n },\r\n dense: {\r\n marginTop: 16,\r\n },\r\n menuButton: {\r\n marginLeft: -18,\r\n marginRight: 10,\r\n }, \r\n clgrid: {\r\n margin: theme.spacing(2),\r\n fontSize: '75%',\r\n textAlign: 'left',\r\n fontWeight : 'bold',\r\n },\r\n divbutton: {\r\n fontSize: '75%',\r\n textAlign: 'left',\r\n fontWeight : 'bold',\r\n },\r\n button: {\r\n margin: theme.spacing(),\r\n display: 'block',\r\n width:'50%',\r\n },\r\n }));\r\n\r\nexport const InfoWinState = ({children}) => {\r\n const initialState = {\r\n curmessage : { open : false , mess : \"\" , draw: { vertical : 'top', horizontal: 'center' }},\r\n alertmessage : { open : false , typemess : \"error\", mess : \"\"},\r\n dialog : { open : false ,id : null, title : \"\", mess : \"\",statement : false},\r\n dialoganswer : {winDialogAnswer : false,userDialogAnswer:{id:null,answer:false}}\r\n }\r\n \r\n const [state, dispatch] = useReducer(infowinReducer, initialState)\r\n const draw = { vertical : 'top', horizontal: 'left' } \r\n\r\n const messageWin = (mess , open = (mess.length ? true : false)) => {\r\n dispatch({\r\n type: SHOW_MESS_APP,\r\n payload: {open, mess, draw}\r\n })\r\n dispatch({\r\n type: DIALOG_ANSWER,\r\n payload: {winDialogAnswer:false,userDialogAnswer:{id:null,answer:false}}\r\n })\r\n\r\n }\r\n\r\n const messageWinClose = () => {\r\n dispatch({\r\n type: SHOW_MESS_APP,\r\n payload: {open:false, mess:\"\", draw}\r\n })\r\n }; \r\n\r\n const alertWin = (typemess = 'info', mess , open = (mess.length ? true : false)) => {\r\n dispatch({\r\n type: SHOW_ALERT_APP,\r\n payload: {open,typemess,mess}\r\n })\r\n dispatch({\r\n type: DIALOG_ANSWER,\r\n payload: {winDialogAnswer:false,userDialogAnswer:{id:null,answer:false}}\r\n })\r\n }\r\n \r\n const alertWinClose = () => {\r\n // console.log('state===',state);\r\n dispatch({\r\n type: SHOW_ALERT_APP,\r\n payload: {open : false, mess : \"\",typemess : state.alertmessage.typemess}\r\n })\r\n }; \r\n \r\n //messageWinExtended\r\n\r\n const dialogWin = (id, title, mess, statement = true, open = true) => {\r\n console.log('statement == ',statement) \r\n dispatch({\r\n type: SHOW_DIALOG_APP,\r\n payload: {open,id,title,mess,statement}\r\n })\r\n dispatch({\r\n type: DIALOG_ANSWER,\r\n payload: {winDialogAnswer:false,userDialogAnswer:{id,answer:false}}\r\n })\r\n }\r\n\r\n const handleDialogAnswer = (answer) => {\r\n const cleaWin = {open : false,id:null,title:\"\",mess:''}\r\n dispatch({\r\n type: SHOW_DIALOG_APP,\r\n payload: {open : false,id:null,title:\"\",mess:'',statement:false}\r\n })\r\n dispatch({\r\n type: DIALOG_ANSWER,\r\n payload: {winDialogAnswer:true,userDialogAnswer:{id:state.dialoganswer.userDialogAnswer.id,answer:answer}}\r\n })\r\n\r\n }\r\n \r\n\r\n // alertWin = (mess,typemess='info') => \r\n // this.props.appAlertOpen({open : true,typemess,mess})\r\n\r\n const {curmessage,alertmessage,dialog,dialoganswer} = state\r\n const classes = useStyles();\r\n \r\n return (\r\n \r\n {children}\r\n {curmessage.mess}}\r\n > \r\n {curmessage.mess}}\r\n action={[\r\n \r\n \r\n ,\r\n ]} \r\n />\r\n \r\n \r\n { }\r\n \r\n )\r\n} \r\n//export default withStyles(styles)(InfoWinState);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport Button from '@material-ui/core/Button';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport green from '@material-ui/core/colors/green';\r\nimport amber from '@material-ui/core/colors/amber';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst styles1 = theme => ({\r\n success: {\r\n backgroundColor: green[600],\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.primary.dark,\r\n },\r\n warning: {\r\n backgroundColor: amber[700],\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(),\r\n },\r\n message: {\r\n display: 'block',\r\n fontSize: '110%',\r\n /* alignItems: 'left'*/\r\n textAlign: 'left',\r\n color: 'white'\r\n },\r\n});\r\n\r\nfunction MySnackbarContent(props) {\r\n const { classes, className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n return (\r\n \r\n \r\n {message}\r\n \r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\n\r\nMySnackbarContent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n message: PropTypes.node,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf(['success', 'warning', 'error', 'info']).isRequired,\r\n};\r\n\r\nconst MySnackbarContentWrapper = withStyles(styles1)(MySnackbarContent);\r\n\r\nconst styles2 = theme => ({\r\n margin: {\r\n margin: theme.spacing(),\r\n },\r\n});\r\n\r\nclass CustomSnackbars extends React.Component {\r\n state = {\r\n open: false,\r\n };\r\n\r\n render() {\r\n const { classes , uservar,usermess,useropen,userClose,userdur } = this.props;\r\n // variant=\"success\" \"error\" \"warning\" \"info\"\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nCustomSnackbars.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(styles2)(CustomSnackbars);","import React, { useState,createContext, useContext } from \"react\";\r\n//import axios from 'axios'\r\nimport request from \"superagent\";\r\nimport CustomSnackbars from \"../Components/Lib/CustomSnackbars\";\r\nimport { DataServerContext } from \"./DataServerContext\";\r\n\r\nimport {\r\n thisPost,\r\n thisMock,\r\n apiDataUrl,\r\n apiDataAccessUrl,\r\n apiUserSamNameUrl,\r\n apiListUrl,\r\n apiSaveUpdUrl\r\n} from \"../projConst\";\r\nimport * as api from \"../api/apiFunc\";\r\n\r\n//import { InfoWinContext } from \"../infowindow/infowinContext\";\r\n\r\nexport const DataServer = ({ children }) => {\r\n //const { alertWin, alertmessage } = useContext(InfoWinContext);\r\n const [loading, Setloading] = useState(false) \r\n const [dataserver, SetDataServer] = useState({});\r\n //const [otherdata, SetOtherData] = useState({});\r\n \r\n \r\n const [alertmessage, SetAlertmessage] = useState(0);\r\n const alertTypeMess = ['success', 'warning', 'error', 'info']\r\n const alertWinClose = () => {\r\n SetAlertmessage({ open: false, mess: \"\", typemess: 'error'})\r\n }; \r\n \r\n const getServerData = (apiUrl,param,thismock,mock,SetState=null,showmess=null,durmess=null) => {\r\n setLoading(true);\r\n api.FetchLiteUrl(apiUrl, true, param , thismock, mock).then(onedata => {\r\n const { is_err, mess } = api.HandleFindError(onedata)\r\n if (is_err) \r\n SetAlertmessage({ open: true, mess: mess || ' Ошибка при загрузке данных с сервера', typemess: 'error' })\r\n else {\r\n if (showmess) \r\n SetAlertmessage({ open: true, mess: showmess , typemess: 'success',duration:durmess})\r\n if (typeof SetState === 'function') SetState(onedata)\r\n SetDataServer(onedata)\r\n }\r\n\r\n setLoading(true);\r\n })\r\n }\r\n\r\n const getServerDataRedux = (apiUrl, post, param, thismock, mock, action = null, mockempty = {}, showmess = null, durmess = null) => {\r\n return (dispatch, getState) => {\r\n return api.FetchLiteUrl(apiUrl, post, param, thismock, mock,mockempty )\r\n .then(onedata => {\r\n //console.log('getState===',getState);\r\n const { is_err, mess } = api.HandleFindError(onedata)\r\n if (is_err) \r\n SetAlertmessage({ open: true, mess: mess || ' Ошибка при загрузке данных с сервера', typemess: 'error' })\r\n else {\r\n if (showmess) \r\n SetAlertmessage({ open: true, mess: showmess , typemess: 'success',duration:durmess})\r\n }\r\n return dispatch({ type: action, payload: {serverdata: onedata } })\r\n })\r\n }\r\n }\r\n\r\n const loadData = async (mockdata, url, userarg) => {\r\n if (thisMock) {\r\n return new Promise((resolve, reject) => {\r\n resolve(mockdata);\r\n });\r\n } else {\r\n if (!thisPost) {\r\n const { body } = await request.get(url);\r\n return body;\r\n } else {\r\n const { body } = await request\r\n .post(url)\r\n .set(\"Content-Type\", \"application/json\")\r\n .send({ ...userarg });\r\n return body;\r\n }\r\n }\r\n };\r\n /* const getMainData = async userarg => {\r\n setLoading();\r\n //const response = loadData(mock.maindata, apiDataUrl, userarg);\r\n await loadData(mock.maindata, apiDataUrl, userarg).then(onedata => {\r\n const { is_err, mess } = api.HandleFindError(onedata);\r\n if (is_err) alertWin(\"error\", mess);\r\n else {\r\n dispatch({\r\n type: GET_MAIN_DATA,\r\n payload: onedata\r\n });\r\n }\r\n });\r\n };*/\r\n\r\n const setLoading = (param) => Setloading(param)\r\n\r\n return (\r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport Main from './Main';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport { createStore, applyMiddleware} from 'redux';\nimport {composeWithDevTools} from 'redux-devtools-extension'\nimport thunk from 'redux-thunk'\nimport reducer from './Reducers';\nimport {InfoWinState} from './infowindow/InfowinState'\nimport {DataServer} from './Server/DataServer'\n\nconst store = createStore(reducer, composeWithDevTools(\n applyMiddleware(thunk)\n))\n\nReactDOM.render(\n \n \n \n
\n \n \n \n , document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}