{"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","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","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","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","background","opacity","backgroundColor","marginLeft","marginRight","marginBottom","fontSize","fontWeight","fontFamily","api","column","name","columnsMainData","frozen","resizable","_type","headerRenderer","formatter","row","ID","FontSize","editable","DIRECTIONCODE","DIRECTIONNAME","DIRECTIONNAMEEN","columnsFilter","_typecolumn","_picklist","_typedata","_filterval","window","location","origin","BaseAddress","hostname","pathname","indexOf","apiDataUIUrl","host","apiDataUrl","apiSaveUrl","main_data","main_data_row_empty","main_data_empty","ListIcons","icons","iconsapp","access","handleOnClick","nodiv","classnam","dopargs","filtered","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","ui_app_icon_id","ComputedAccess","ref","goToLog","children","nameNsi","position","top","ShowAppToolbar","inputVal","SetInputVal","cur_Block","console","log","alert","onSaveData","onInsertRow","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","paddingBottom","flexWrap","flex","alignItems","overflow","chip","chipFocused","emphasize","palette","grey","left","zIndex","right","divider","withTheme","textList","borderWidth","borderColor","borderStyle","boxShadow","textListNew","hight","textListNewSmall","textListNm","textField","textField2","EmptyRowsRenderer","rowKeyGetter","ShowGrid","totalrow","PrimaryId","columnsgrid","myfiolist","Set","selectedRows","currow","Setcurrow","node","document","getElementById","canvas","ReactDOM","findDOMNode","addEventListener","keyListenerDown","keyListenerUp","removeEventListener","_rows","_columns","_PkFieldName","preventDefault","onCurRow","useMemo","editor","TextEditor","minHeight","columns","defaultColumnOptions","sortable","onRowClick","row_idx","onRowsChange","change","indexes","updcol","Number","updrow","onHandleUpdateGrid","onMessage","noRowsFallback","Intl","DateTimeFormat","navigator","language","NumberFormat","currency","head","common","white","maxHeight","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","pk_id","curval","shadows","button","message","grid","DataServerContext","flexDirection","createContext","InfoWinContext","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","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","appParams","viewmode","messageSimple","messagetitle","alertSimple","errorSimple","args","toString","tempins","tmp","JSON","stringify","newrow","random_id","random_possible","i","charAt","Math","floor","random","newrows","push","maxwidth","readonly","onHandleMess","updated","idx","updData","temp","newupdated","onHandleDelete","pkid","onHandleAdd","listFilter","check","templist","res","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","variant","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","render","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.a3567c4e.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,color=null,background=null,opacity=1) => {\r\n let style = {};\r\n if ( color )\r\n style.color = color;\r\n if ( background )\r\n 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 = '90%'\r\n style.fontWeight = '100'\r\n style.fontFamily = 'Arial'\r\n \r\n style.opacity = opacity\r\n return (color || background) ? (
{text}
) : (
{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 ","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\nimport * as api from '../api/apiFunc';\r\n\r\nconst lday = 50;\r\nfunction CustomHeader(item) {\r\n return api.CustomFormatter(item.column.name,'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: 'DIRECTIONCODE', name: 'Код направления', resizable: true, frozen: false, editable: true, width: 150, _type: 0,\r\n headerRenderer: CustomHeader,\r\n formatter(props) { const value = props.row.DIRECTIONCODE; return ; }\r\n },\r\n {\r\n key: 'DIRECTIONNAME', name: 'Наименование направления', resizable: true, editable: true, width: 400, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const value = props.row.DIRECTIONNAME; return ; }\r\n },\r\n {\r\n key: 'DIRECTIONNAMEEN', name: 'Наименование направления(англ.)', resizable: true, editable: true, width: 400, _type: 0, headerRenderer: CustomHeader,\r\n formatter(props) { const value = props.row.DIRECTIONNAMEEN; return ; }\r\n },\r\n]\r\n\r\nexport const columnsFilter = [\r\n { key: 'DIRECTIONCODE', name: 'Код направления', _typecolumn : null, _picklist : null, _typedata : 1, _filterval: \"\", },\r\n { key: 'DIRECTIONNAME', name: 'Наименование направления', _typecolumn : null, _picklist : null, _typedata : 1, _filterval: \"\", },\r\n { key: 'DIRECTIONNAMEEN', name: 'Наименование направления (англ.)', _typecolumn : null, _picklist : null, _typedata : 4, _filterval: \"\", },\r\n ]\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\" ? 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\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 'DIRECTIONCODE': 1,\r\n 'DIRECTIONNAME': 'Отправление',\r\n 'DIRECTIONNAMEEN': 'out',\r\n },\r\n {\r\n 'ID': 2,\r\n 'DIRECTIONCODE': 2,\r\n 'DIRECTIONNAME': 'Прием',\r\n 'DIRECTIONNAMEEN': 'in',\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 'DIRECTIONCODE': null,\r\n 'DIRECTIONNAME': null,\r\n 'DIRECTIONNAMEEN': null\r\n}\r\n\r\nexport const main_data_empty =\r\n{\r\n \"datamain\": [\r\n ],\r\n \"is_error\": 1,\r\n \"error_text\": \"Ошибка при обращении к методу сервера\",\r\n \"user_message_text\": \"\"\r\n\r\n}\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, handleOnClick, nodiv,classnam, dopargs, filtered }) => {\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 //const accessstyle = (useraccess == 0 ? { opacity: '0.4' } : {})\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\")\r\n || iconapp.ui_app_icon_mnem == \"delete\"\r\n || 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 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 \"filter\": 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 \"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 \"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 paddingBottom: 20 ,\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, { useEffect, useState, useCallback, useMemo } 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, { 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\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\nconst ShowGrid = props => {\r\n const classes = useStyles();\r\n const { data,totalrow, PrimaryId, myfiolist, columnsgrid } = props;\r\n //const [rows, setRows] = useState([]);\r\n const [selectedRows, setSelectedRows] = useState(() => new Set());\r\n const [currow, Setcurrow] = useState(0);\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(_rows[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(_rows[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 'DIRECTIONCODE': case 'DIRECTIONNAME': case 'DIRECTIONNAMEEN':\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 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 == 'DIRECTIONCODE' && R.findIndex(R.propEq('DIRECTIONCODE', 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))(_rows);\r\n Setcurrow(row_idx)\r\n //props.onCurRow(_rows[rowIdx], _rows.length) \r\n props.onCurRow(_rows[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={30}\r\n //minHeight={props.minHeight || 250}\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: '60vh',\r\n maxHeight: '60vh',\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('deffilter===',deffilter);\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, { 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\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 [subfilter, Setsubfilter] = useState(false);\n \n function logit() {\n setScrollY(window.pageYOffset);\n console.log('axssaxasxsax')\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 && dialoganswer.userDialogAnswer.answer) {\n switch (dialoganswer.userDialogAnswer.id) {\n case 1:\n handle_delete_row()\n break;\n }\n }\n }, [dialoganswer])\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 \n SetShowFilter({open : true,\n title:'Фильтр по полям',\n mess : \"\"\n })\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.DIRECTIONCODE.toString().indexOf(args.arg1) !== -1 ||\n row.DIRECTIONNAME.indexOf(args.arg1) !== -1 ||\n row.DIRECTIONNAMEEN.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 handleFilterAnswer = (answer, listFilter) => {\n SetShowFilter({open : false,title:'Фильтр по полям', mess : \"\"})\n if (answer == false) return\n SetMainFilter(listFilter)\n\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 SetMainList(templist)\n Setsubfilter(true)\n messageWin(\"Данные отфильтрованы ...\");\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 \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 dialogWin(1, 'Внимание', mess , true)}\n />\n {/* */}\n \n \n
\n
\n {SHOW_FOOTHER &&
\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\": 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 }\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;\\nheight:10vh;\\nmargin:27px;\\nbox-shadow:10px 4px 5px -1px rgba(105,104,105,0.53);\\n}.TableImgButton{\\nbackground-color:#9ff08d;\\n}.App-header{\\npadding:10px;\\ndisplay:flex;\\nwidth:100%;\\nbackground-color:rgba(52, 52, 51, 1);\\ncolor:#fff;\\nborder-bottom:3px solid #6e767d;\\nheight:8vh;\\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:15px 15px 15px 12px;\\ndisplay:block;\\nfloat:left;\\nheight:7vh;\\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\": 3,\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\": \"{ marginLeft:20px; float:left; fontSize:24px; color:red;}\"\r\n },\r\n {\r\n \"id\": 21,\r\n \"order\": 7,\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\": 2,\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\": \"{ margin-right:0px; float:left; font-size:24px; color:grey;}\"\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":""}