From 4892fd7c71c112ddef5c610780e5b1dcb6c36d03 Mon Sep 17 00:00:00 2001 From: Luke Berndt Date: Sun, 24 Jan 2021 22:12:55 -0500 Subject: [PATCH] Cleaned up Admin --- admin/.eslintcache | 2 +- admin/server/config/passport.js | 4 + admin/server/controllers/talkgroups.js | 15 ++-- admin/server/index.js | 1 + admin/src/App/Restricted.js | 85 +++++++++++----------- admin/src/Group/GroupModal.js | 58 +++++++-------- admin/src/Group/group-actions.js | 2 +- admin/src/Permission/AddPermissionModal.js | 2 - admin/src/System/System.js | 13 ++-- admin/src/System/SystemForm.js | 74 +++++++++---------- admin/src/System/system-actions.js | 5 +- 11 files changed, 133 insertions(+), 128 deletions(-) diff --git a/admin/.eslintcache b/admin/.eslintcache index b5d4dad..76461be 100644 --- a/admin/.eslintcache +++ b/admin/.eslintcache @@ -1 +1 @@ -[{"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App.js":"1","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/features/counter/Counter.js":"2","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Navigation.js":"3","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-constants.js":"4","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/configureStore.js":"5","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-reducer.js":"6","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-reducer.js":"7","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-reducer.js":"8","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/index.js":"9","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/About.js":"10","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/NavigationContainer.js":"11","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-constants.js":"12","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-actions.js":"13","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemCard.js":"14","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Restricted.js":"15","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-actions.js":"16","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-constants.js":"17","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-reducer.js":"18","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/App.js":"19","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-constants.js":"20","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ListSystems.js":"21","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-reducer.js":"22","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/reducers.js":"23","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-constants.js":"24","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-constants.js":"25","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemForm.js":"26","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystemContainer.js":"27","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystem.js":"28","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModalContainer.js":"29","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CallChart.js":"30","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CreateSystemContainer.js":"31","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/System.js":"32","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ResponsiveCallChart.js":"33","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModal.js":"34","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModalContainer.js":"35","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ErrorChart.js":"36","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemContainer.js":"37","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-actions.js":"38","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-actions.js":"39","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-actions.js":"40"},{"size":1463,"mtime":499162500000,"results":"41","hashOfConfig":"42"},{"size":1626,"mtime":499162500000,"results":"43","hashOfConfig":"42"},{"size":1499,"mtime":1609685400124,"results":"44","hashOfConfig":"42"},{"size":115,"mtime":1545362103836,"results":"45","hashOfConfig":"42"},{"size":759,"mtime":1609425817988,"results":"46","hashOfConfig":"42"},{"size":2037,"mtime":1545362103826,"results":"47","hashOfConfig":"42"},{"size":3029,"mtime":1609813173090,"results":"48","hashOfConfig":"42"},{"size":636,"mtime":1545362103837,"results":"49","hashOfConfig":"42"},{"size":1684,"mtime":1611441482755,"results":"50","hashOfConfig":"42"},{"size":1278,"mtime":1609812739781,"results":"51","hashOfConfig":"42"},{"size":570,"mtime":1609684078480,"results":"52","hashOfConfig":"42"},{"size":862,"mtime":1545362103839,"results":"53","hashOfConfig":"42"},{"size":1344,"mtime":1609686206535,"results":"54","hashOfConfig":"42"},{"size":1145,"mtime":1609813170344,"results":"55","hashOfConfig":"42"},{"size":2024,"mtime":1611506108884,"results":"56","hashOfConfig":"42"},{"size":5933,"mtime":1611507011039,"results":"57","hashOfConfig":"42"},{"size":320,"mtime":1546657322904,"results":"58","hashOfConfig":"42"},{"size":1045,"mtime":1609813166756,"results":"59","hashOfConfig":"42"},{"size":253,"mtime":1609814499873,"results":"60","hashOfConfig":"42"},{"size":688,"mtime":1545362103825,"results":"61","hashOfConfig":"42"},{"size":1156,"mtime":1609813188195,"results":"62","hashOfConfig":"42"},{"size":2262,"mtime":1609813202417,"results":"63","hashOfConfig":"42"},{"size":858,"mtime":1611513056121,"results":"64","hashOfConfig":"42"},{"size":848,"mtime":1545362103820,"results":"65","hashOfConfig":"42"},{"size":537,"mtime":1545362103845,"results":"66","hashOfConfig":"42"},{"size":13151,"mtime":1608606472255,"results":"67","hashOfConfig":"42"},{"size":381,"mtime":1609814717150,"results":"68","hashOfConfig":"42"},{"size":1137,"mtime":1609814723480,"results":"69","hashOfConfig":"42"},{"size":608,"mtime":1545362103822,"results":"70","hashOfConfig":"42"},{"size":3099,"mtime":1611496772792,"results":"71","hashOfConfig":"42"},{"size":277,"mtime":1546482642525,"results":"72","hashOfConfig":"42"},{"size":20243,"mtime":1611495881969,"results":"73","hashOfConfig":"42"},{"size":613,"mtime":1611443036463,"results":"74","hashOfConfig":"42"},{"size":7830,"mtime":1608606472254,"results":"75","hashOfConfig":"42"},{"size":617,"mtime":1545362103824,"results":"76","hashOfConfig":"42"},{"size":4201,"mtime":1611495367506,"results":"77","hashOfConfig":"42"},{"size":1677,"mtime":1611514031099,"results":"78","hashOfConfig":"42"},{"size":4717,"mtime":1611514305299,"results":"79","hashOfConfig":"42"},{"size":6194,"mtime":1611514572537,"results":"80","hashOfConfig":"42"},{"size":4578,"mtime":1611514663911,"results":"81","hashOfConfig":"42"},{"filePath":"82","messages":"83","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"108517c",{"filePath":"84","messages":"85","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"88","messages":"89","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"92","messages":"93","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"99"},{"filePath":"100","messages":"101","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"102","messages":"103","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"104"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"109"},{"filePath":"110","messages":"111","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"109"},{"filePath":"112","messages":"113","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"114","messages":"115","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"116","messages":"117","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"118","messages":"119","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"120"},{"filePath":"121","messages":"122","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"123","messages":"124","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"120"},{"filePath":"125","messages":"126","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"99"},{"filePath":"127","messages":"128","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"129","messages":"130","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"131","messages":"132","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"133","messages":"134","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"135","messages":"136","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"137","messages":"138","errorCount":0,"warningCount":11,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"139","messages":"140","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"141","messages":"142","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"143","messages":"144","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"120"},{"filePath":"145","messages":"146","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"147","messages":"148","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"149","messages":"150","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"151","usedDeprecatedRules":"109"},{"filePath":"152","messages":"153","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"154","usedDeprecatedRules":"109"},{"filePath":"155","messages":"156","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"157","messages":"158","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"159","messages":"160","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"161","messages":"162","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"165","messages":"166","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"167","messages":"168","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/features/counter/Counter.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Navigation.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/configureStore.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-reducer.js",[],["169","170"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-reducer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-reducer.js",[],["171","172"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/index.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/About.js",[],["173","174"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/NavigationContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-constants.js",[],["175","176"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemCard.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Restricted.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-constants.js",[],["177","178"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-reducer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/App.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ListSystems.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-reducer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/reducers.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemForm.js",["179","180","181","182","183","184","185","186","187","188","189"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystem.js",["190"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CallChart.js",["191","192","193","194","195","196"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CreateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/System.js",["197","198","199","200","201"],"import React, {Component} from \"react\";\nimport {Link} from \"react-router-dom\";\nimport ListTalkgroups from \"../Talkgroups/ListTalkgroups.js\";\nimport MessageBox from \"../Components/Message.js\";\nimport ListGroups from \"../Group/ListGroups.js\";\nimport GroupModal from \"../Group/GroupModalContainer.js\";\nimport UpdatePermissionModal from \"../Permission/UpdatePermissionModalContainer.js\";\nimport AddPermissionModal from \"../Permission/AddPermissionModalContainer.js\";\nimport ErrorChart from \"./ResponsiveErrorChart\"\nimport CallChart from \"./ResponsiveCallChart\"\nimport {\n Button,\n Confirm,\n Icon,\n Form,\n TextArea,\n Header,\n Container,\n Message,\n List,\n Segment,\n Tab,\n Divider,\n Label\n} from \"semantic-ui-react\";\n\n\nclass System extends Component {\n constructor(props) {\n super(props);\n\n this.handleUpload = this.handleUpload.bind(this);\n this.reorderGroup = this.reorderGroup.bind(this);\n this.deleteGroup = this.deleteGroup.bind(this);\n this.editGroup = this.editGroup.bind(this);\n this.saveGroupOrder = this.saveGroupOrder.bind(this);\n this.showSystemDeleteConfirm = this.showSystemDeleteConfirm.bind(this);\n this.showPermissionDeleteConfirm = this.showPermissionDeleteConfirm.bind(\n this\n );\n this.updatePermission = this.updatePermission.bind(this);\n this.handlePermissionDeleteConfirm = this.handlePermissionDeleteConfirm.bind(\n this\n );\n this.handlePermissionDeleteCancel = this.handlePermissionDeleteCancel.bind(\n this\n );\n this.handleSystemDeleteConfirm = this.handleSystemDeleteConfirm.bind(this);\n this.handleSystemDeleteCancel = this.handleSystemDeleteCancel.bind(this);\n this.handleUpdatePermissionClose = this.handleUpdatePermissionClose.bind(\n this\n );\n this.handleGroupToggle = this.handleGroupToggle.bind(this);\n this.handleGroupClose = this.handleGroupClose.bind(this);\n this.handleAddPermissionToggle = this.handleAddPermissionToggle.bind(this);\n this.handleAddPermissionClose = this.handleAddPermissionClose.bind(this);\n this.processErrors = this.processErrors.bind(this);\n this.processStatistics = this.processStatistics.bind(this);\n this.state = {\n openSystemDeleteConfirm: false,\n openPermissionDeleteConfirm: false,\n openMessage: false,\n requestMessage: \"\",\n groupVisible: false,\n editGroupId: false,\n selectedPermission: false,\n addPermissionVisible: false,\n updatePermissionVisible: false,\n updatePermissionId: false\n };\n }\n\n processErrors(errors) {\n var allData = [];\n\n var num = 0;\n const now = new Date();\n var maxDate = now;\n var minDate = now;\n var minValue = 0;\n var maxValue = 0;\n var legend = [];\n for (var j = 0; j < errors.length; j++) {\n var data = [];\n for (var i = 0; i < errors[j].values.length; i++) {\n var time = new Date(errors[j].values[i].time);\n if (errors[j].values[i].errors > maxValue)\n maxValue = errors[j].values[i].errors;\n if (time < minDate) minDate = time;\n var value = {\n id: num++,\n y: errors[j].values[i].errors,\n x: time\n };\n data.push(value);\n }\n const id = Math.floor(errors[j]._id / 1000) / 1000 + \"MHz\";\n legend.push(id);\n var obj = {\n id: id,\n data: data\n };\n allData.push(obj);\n }\n const errorData = {\n data: allData,\n minDate: minDate,\n maxDate: maxDate,\n minValue: minValue,\n maxValue: maxValue,\n legend: legend\n };\n\n this.setState({ errorData: errorData });\n }\n processStatistics(statistic) {\n var callTotals = [];\n var errorTotals = [];\n const now = new Date();\n var maxDate = now;\n var minDate = now;\n var minValue = 0;\n var maxValue = 0;\n var MS_PER_MINUTE = 60000;\n for (var j = 0; j < statistic.callTotals.length; j++) {\n var spotsBack = statistic.callTotals.length - j;\n var time = new Date(now - spotsBack * 15 * MS_PER_MINUTE);\n if (time < minDate) minDate = time;\n if (statistic.callTotals[j] > maxValue)\n maxValue = statistic.callTotals[j];\n callTotals.push({ y: statistic.callTotals[j], x: time });\n }\n for (var j = 0; j < statistic.errorTotals.length; j++) {\n var spotsBack = statistic.errorTotals.length - j;\n var time = new Date(now - spotsBack * 15 * MS_PER_MINUTE);\n if (time < minDate) minDate = time;\n if (statistic.errorTotals[j] > maxValue)\n maxValue = statistic.errorTotals[j];\n errorTotals.push({ x: time, y: statistic.errorTotals[j] });\n }\n var callData = {\n minDate: minDate,\n maxDate: maxDate,\n minValue: minValue,\n maxValue: maxValue,\n callTotals: callTotals,\n errorTotals: errorTotals\n };\n\n this.setState({ callData: callData });\n }\n componentDidMount() {\n this.props.systemActions.fetchSystems();\n this.props.talkgroupActions.fetchTalkgroups(this.props.shortName);\n this.props.groupActions.fetchGroups(this.props.shortName);\n this.props.errorActions.fetch(this.props.shortName);\n this.props.permissionActions.fetch(this.props.shortName);\n if (this.props.statistic) {\n this.processStatistics(this.props.statistic);\n }\n if (this.props.errors) {\n this.processErrors(this.props.errors);\n }\n }\n\n componentWillReceiveProps(nextProp) {\n if (!this.props.errors && nextProp.errors) {\n this.processErrors(nextProp.errors);\n }\n if (!this.props.statistic && nextProp.statistic) {\n this.processStatistics(nextProp.statistic);\n }\n }\n\n updatePermission(permissionId) {\n this.setState({\n updatePermissionId: permissionId,\n updatePermissionVisible: !this.state.updatePermissionVisible\n });\n }\n\n editGroup(groupId) {\n this.setState({\n editGroupId: groupId,\n groupVisible: !this.state.groupVisible\n });\n }\n\n deleteGroup(groupId) {\n this.props.groupActions.deleteGroup(this.props.shortName, groupId);\n }\n\n reorderGroup(oldIndex, newIndex) {\n this.props.groupActions.reorderGroup(\n this.props.shortName,\n oldIndex,\n newIndex\n );\n }\n\n handleUpdatePermissionClose(didUpdate) {\n this.setState({\n updatePermissionVisible: !this.state.updatePermissionVisible,\n updatePermissionId: false\n });\n }\n\n handleAddPermissionClose(didUpdate) {\n this.setState({\n addPermissionVisible: !this.state.addPermissionVisible\n });\n }\n\n handleAddPermissionToggle = () =>\n this.setState({\n addPermissionVisible: !this.state.addPermissionVisible\n });\n\n handleGroupClose(didUpdate) {\n this.setState({\n groupVisible: !this.state.groupVisible,\n editGroupId: false\n });\n }\n handleGroupToggle = () => this.setState({\n editGroupId: false,\n groupVisible: !this.state.groupVisible\n })\n handleExport() {\n this.props.talkgroupActions\n .exportTalkgroups(this.props.system.shortName)\n .then(requestMessage => {\n if (requestMessage) {\n // report to the user is there was a problem during registration\n this.setState({ requestMessage });\n }\n });\n }\n\n saveGroupOrder() {\n const order = this.props.groups.map(x => x._id);\n const data = {\n groupOrder: JSON.stringify(order)\n };\n this.props.groupActions\n .saveGroupOrder(this.props.system.shortName, data)\n .then(requestMessage => {\n if (requestMessage) {\n }\n });\n }\n\n\n handleUpload(file) {\n this.props.talkgroupActions\n .importTalkgroups(this.props.system.shortName, file)\n .then(requestMessage => {\n if (requestMessage) {\n // report to the user is there was a problem during registration\n this.setState({ requestMessage });\n }\n });\n }\n\n // https://github.com/Semantic-Org/Semantic-UI-React/issues/2103\n\n showPermissionDeleteConfirm = permission =>\n this.setState({\n openPermissionDeleteConfirm: true,\n selectedPermission: permission\n });\n showSystemDeleteConfirm = () =>\n this.setState({ openSystemDeleteConfirm: true });\n\n handlePermissionDeleteConfirm = permissionId => {\n this.setState({ openPermissionDeleteConfirm: false });\n this.props.permissionActions\n .deletePermission({\n shortName: this.props.system.shortName,\n permissionId: this.state.selectedPermission._id\n })\n .then(requestMessage => {\n if (requestMessage) {\n // report to the user is there was a problem during login\n this.setState({ requestMessage: requestMessage, openMessage: true });\n }\n });\n };\n\n handleSystemDeleteConfirm = () => {\n this.setState({ openSystemDeleteConfirm: false });\n this.props.systemActions\n .deleteSystem(this.props.system.shortName)\n .then(requestMessage => {\n if (requestMessage) {\n // report to the user is there was a problem during login\n this.setState({ requestMessage: requestMessage, openMessage: true });\n }\n });\n };\n handleSystemDeleteCancel = () =>\n this.setState({ openSystemDeleteConfirm: false });\n handlePermissionDeleteCancel = () =>\n this.setState({ openPermissionDeleteConfirm: false });\n render() {\n const system = this.props.system;\n let fileInput = null;\n var location = \"\";\n var example = \"\";\n var groupRender = () => {};\n\n if (system) {\n if (this.props.talkgroups && this.props.talkgroups.length) {\n groupRender = () => (\n
\n \n \n \n
\n );\n } else {\n groupRender = () => (\n \n \n \n );\n }\n\n\n example =\n '{\\n\\t\"systems\": [\\n\\t\\t{\\n\\t\\t\\t\"shortName\": \"' +\n system.shortName +\n '\",\\n\\t\\t\\t\"apiKey\": \"' +\n system.key +\n '\"\\n\\t\\t}\\n\\t],\\n\\t\"uploadServer\": \"' +\n process.env.REACT_APP_BACKEND_SERVER +\n '\"\\n}';\n\n switch (system.systemType) {\n case \"state\":\n location = system.state;\n break;\n case \"city\":\n location = system.city + \", \" + system.state;\n break;\n case \"county\":\n location = system.county + \", \" + system.state;\n break;\n case \"international\":\n location = system.country;\n break;\n }\n }\n\n const panes = [\n {\n menuItem: \"Overview\",\n render: () => (\n
\n \n \n \n
Location
\n {location}\n
\n \n
Short Name
\n {this.props.system.shortName}\n
\n \n
Description
\n {this.props.system.description}\n
\n\n \n \n \n \n
\n
\n
\n )\n },\n {\n menuItem: \"Config\",\n render: () => (\n
\n \n
Configure Trunk Recorder
\n

\n Below are the parameters you will need to configure Trunk\n Recorder. The example below shows how they should be added to\n the config.json file.\n

\n\n \n \n
API Key
\n {this.props.system.key}\n
\n \n
Short Name
\n {this.props.system.shortName}\n
\n \n
Upload Server
\n {process.env.REACT_APP_BACKEND_SERVER}\n
\n \n
Example
\n
\n