From 25b953d58dffaa71d02361b56a4c5859eaae5356 Mon Sep 17 00:00:00 2001 From: Luke Berndt Date: Thu, 11 Feb 2021 21:54:38 -0500 Subject: [PATCH] auto scrolling working! --- .gitignore | 3 + admin/.eslintcache | 2 +- backend/Dockerfile | 17 ----- backend/index.js | 24 ------ backend/support/mycrontab | 3 - backend/support/sweep.js | 81 --------------------- backend/support/sweep.sh | 2 - frontend/.eslintcache | 2 +- frontend/public/index.html | 2 +- frontend/src/Call/CallItem.js | 7 +- frontend/src/Call/CallPlayer.js | 55 ++++++++------ frontend/src/Call/FilterModal.js | 6 +- frontend/src/Call/GroupModal.js | 6 +- frontend/src/Call/ListCalls.js | 34 ++++++++- frontend/src/Call/MediaPlayer.js | 4 +- frontend/src/redux-router/configureStore.js | 5 +- mongo/Dockerfile | 1 - mongo/trim.js | 25 ------- 18 files changed, 86 insertions(+), 193 deletions(-) delete mode 100644 backend/support/mycrontab delete mode 100644 backend/support/sweep.js delete mode 100644 backend/support/sweep.sh delete mode 100644 mongo/trim.js diff --git a/.gitignore b/.gitignore index 31cc58b..ab35e71 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ prod.env test.env account/.eslintcache account/.eslintcache +admin/.eslintcache +frontend/.eslintcache +admin/.eslintcache diff --git a/admin/.eslintcache b/admin/.eslintcache index 85a0b06..1846b52 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","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModal.js":"41","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModalContainer.js":"42"},{"size":1463,"mtime":499162500000,"results":"43","hashOfConfig":"44"},{"size":1626,"mtime":499162500000,"results":"45","hashOfConfig":"44"},{"size":1499,"mtime":1609685400124,"results":"46","hashOfConfig":"44"},{"size":115,"mtime":1545362103836,"results":"47","hashOfConfig":"44"},{"size":759,"mtime":1609425817988,"results":"48","hashOfConfig":"44"},{"size":2037,"mtime":1545362103826,"results":"49","hashOfConfig":"44"},{"size":3029,"mtime":1609813173090,"results":"50","hashOfConfig":"44"},{"size":636,"mtime":1545362103837,"results":"51","hashOfConfig":"44"},{"size":1684,"mtime":1611441482755,"results":"52","hashOfConfig":"44"},{"size":1278,"mtime":1609812739781,"results":"53","hashOfConfig":"44"},{"size":570,"mtime":1609684078480,"results":"54","hashOfConfig":"44"},{"size":862,"mtime":1545362103839,"results":"55","hashOfConfig":"44"},{"size":1344,"mtime":1609686206535,"results":"56","hashOfConfig":"44"},{"size":1145,"mtime":1609813170344,"results":"57","hashOfConfig":"44"},{"size":1802,"mtime":1611541149541,"results":"58","hashOfConfig":"44"},{"size":5934,"mtime":1611515999167,"results":"59","hashOfConfig":"44"},{"size":320,"mtime":1546657322904,"results":"60","hashOfConfig":"44"},{"size":1045,"mtime":1609813166756,"results":"61","hashOfConfig":"44"},{"size":253,"mtime":1609814499873,"results":"62","hashOfConfig":"44"},{"size":688,"mtime":1545362103825,"results":"63","hashOfConfig":"44"},{"size":1156,"mtime":1609813188195,"results":"64","hashOfConfig":"44"},{"size":2262,"mtime":1609813202417,"results":"65","hashOfConfig":"44"},{"size":858,"mtime":1611513056121,"results":"66","hashOfConfig":"44"},{"size":848,"mtime":1545362103820,"results":"67","hashOfConfig":"44"},{"size":537,"mtime":1545362103845,"results":"68","hashOfConfig":"44"},{"size":13141,"mtime":1611544564637,"results":"69","hashOfConfig":"44"},{"size":381,"mtime":1609814717150,"results":"70","hashOfConfig":"44"},{"size":1137,"mtime":1609814723480,"results":"71","hashOfConfig":"44"},{"size":608,"mtime":1545362103822,"results":"72","hashOfConfig":"44"},{"size":3099,"mtime":1611496772792,"results":"73","hashOfConfig":"44"},{"size":277,"mtime":1546482642525,"results":"74","hashOfConfig":"44"},{"size":20438,"mtime":1611540108720,"results":"75","hashOfConfig":"44"},{"size":613,"mtime":1611443036463,"results":"76","hashOfConfig":"44"},{"size":7933,"mtime":1611544312121,"results":"77","hashOfConfig":"44"},{"size":617,"mtime":1545362103824,"results":"78","hashOfConfig":"44"},{"size":4201,"mtime":1611495367506,"results":"79","hashOfConfig":"44"},{"size":1677,"mtime":1611514031099,"results":"80","hashOfConfig":"44"},{"size":4717,"mtime":1611514305299,"results":"81","hashOfConfig":"44"},{"size":6184,"mtime":1611542098648,"results":"82","hashOfConfig":"44"},{"size":4578,"mtime":1611514663911,"results":"83","hashOfConfig":"44"},{"size":3357,"mtime":1611516085275,"results":"84","hashOfConfig":"44"},{"size":779,"mtime":1545362103818,"results":"85","hashOfConfig":"44"},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"108517c",{"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":"94"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"103"},{"filePath":"104","messages":"105","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"106","messages":"107","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"108"},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"111"},{"filePath":"112","messages":"113","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"114"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"117","messages":"118","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"119","messages":"120","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"121","messages":"122","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"125"},{"filePath":"126","messages":"127","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"128","messages":"129","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"125"},{"filePath":"130","messages":"131","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"103"},{"filePath":"132","messages":"133","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"111"},{"filePath":"134","messages":"135","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"136","messages":"137","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"138","messages":"139","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"140","messages":"141","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"142","messages":"143","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"144","messages":"145","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"146","messages":"147","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"148","messages":"149","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"125"},{"filePath":"150","messages":"151","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"152","messages":"153","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"154","messages":"155","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"156","messages":"157","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"158","usedDeprecatedRules":"114"},{"filePath":"159","messages":"160","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"161","messages":"162","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","errorCount":0,"warningCount":3,"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":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"169","messages":"170","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"94"},{"filePath":"171","messages":"172","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"173","messages":"174","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"175","messages":"176","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",[],["177","178"],"/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",[],"/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",[],["179","180"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/index.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/About.js",[],["181","182"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/NavigationContainer.js",[],["183","184"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-constants.js",[],["185","186"],"/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",[],["187","188"],"/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",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystem.js",["189"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CallChart.js",["190","191","192","193","194","195"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CreateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/System.js",["196","197","198","199","200"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ResponsiveCallChart.js",["201"],"import React, { Component } from \"react\"\nimport CallChart from \"./CallChart\"\nimport { ParentSize } from \"@visx/responsive\";\n\nclass ResponsiveCallChart extends Component {\n constructor(props) {\n super(props);\n }\n\n\trender() {\n\t\treturn(\n \n {({ width: w, height: h }) => {\n return (\n \n );\n }}\n \n\t\t)\n\t}\n}\n\nexport default ResponsiveCallChart\n","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ErrorChart.js",["202","203","204"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-actions.js",["205","206"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModal.js",["207","208","209","210","211","212","213","214","215","216"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModalContainer.js",[],{"ruleId":"217","replacedBy":"218"},{"ruleId":"219","replacedBy":"220"},{"ruleId":"217","replacedBy":"221"},{"ruleId":"219","replacedBy":"222"},{"ruleId":"217","replacedBy":"223"},{"ruleId":"219","replacedBy":"224"},{"ruleId":"217","replacedBy":"225"},{"ruleId":"219","replacedBy":"226"},{"ruleId":"217","replacedBy":"227"},{"ruleId":"219","replacedBy":"228"},{"ruleId":"217","replacedBy":"229"},{"ruleId":"219","replacedBy":"230"},{"ruleId":"231","severity":1,"message":"232","line":19,"column":14,"nodeType":"233","messageId":"234","endLine":19,"endColumn":22},{"ruleId":"231","severity":1,"message":"235","line":5,"column":23,"nodeType":"233","messageId":"234","endLine":5,"endColumn":32},{"ruleId":"231","severity":1,"message":"236","line":8,"column":10,"nodeType":"233","messageId":"234","endLine":8,"endColumn":16},{"ruleId":"237","severity":1,"message":"238","line":12,"column":1,"nodeType":"239","messageId":"240","endLine":14,"endColumn":2},{"ruleId":"231","severity":1,"message":"241","line":47,"column":11,"nodeType":"233","messageId":"234","endLine":47,"endColumn":19},{"ruleId":"231","severity":1,"message":"242","line":68,"column":9,"nodeType":"233","messageId":"234","endLine":68,"endColumn":15},{"ruleId":"231","severity":1,"message":"243","line":69,"column":9,"nodeType":"233","messageId":"234","endLine":69,"endColumn":15},{"ruleId":"231","severity":1,"message":"244","line":24,"column":3,"nodeType":"233","messageId":"234","endLine":24,"endColumn":8},{"ruleId":"245","severity":1,"message":"246","line":133,"column":14,"nodeType":"233","messageId":"247","endLine":133,"endColumn":15},{"ruleId":"245","severity":1,"message":"248","line":134,"column":11,"nodeType":"233","messageId":"247","endLine":134,"endColumn":20},{"ruleId":"245","severity":1,"message":"249","line":135,"column":11,"nodeType":"233","messageId":"247","endLine":135,"endColumn":15},{"ruleId":"250","severity":1,"message":"251","line":351,"column":7,"nodeType":"252","messageId":"253","endLine":364,"endColumn":8},{"ruleId":"237","severity":1,"message":"238","line":6,"column":3,"nodeType":"239","messageId":"240","endLine":8,"endColumn":4},{"ruleId":"237","severity":1,"message":"238","line":10,"column":3,"nodeType":"239","messageId":"240","endLine":12,"endColumn":4},{"ruleId":"231","severity":1,"message":"242","line":70,"column":7,"nodeType":"233","messageId":"234","endLine":70,"endColumn":13},{"ruleId":"231","severity":1,"message":"243","line":71,"column":7,"nodeType":"233","messageId":"234","endLine":71,"endColumn":13},{"ruleId":"231","severity":1,"message":"254","line":29,"column":10,"nodeType":"233","messageId":"234","endLine":29,"endColumn":32},{"ruleId":"231","severity":1,"message":"255","line":33,"column":10,"nodeType":"233","messageId":"234","endLine":33,"endColumn":30},{"ruleId":"231","severity":1,"message":"256","line":2,"column":8,"nodeType":"233","messageId":"234","endLine":2,"endColumn":16},{"ruleId":"231","severity":1,"message":"257","line":4,"column":3,"nodeType":"233","messageId":"234","endLine":4,"endColumn":12},{"ruleId":"231","severity":1,"message":"258","line":6,"column":3,"nodeType":"233","messageId":"234","endLine":6,"endColumn":9},{"ruleId":"231","severity":1,"message":"259","line":8,"column":3,"nodeType":"233","messageId":"234","endLine":8,"endColumn":7},{"ruleId":"231","severity":1,"message":"260","line":10,"column":3,"nodeType":"233","messageId":"234","endLine":10,"endColumn":7},{"ruleId":"231","severity":1,"message":"261","line":11,"column":3,"nodeType":"233","messageId":"234","endLine":11,"endColumn":10},{"ruleId":"231","severity":1,"message":"262","line":12,"column":3,"nodeType":"233","messageId":"234","endLine":12,"endColumn":7},{"ruleId":"231","severity":1,"message":"263","line":17,"column":3,"nodeType":"233","messageId":"234","endLine":17,"endColumn":8},{"ruleId":"231","severity":1,"message":"264","line":21,"column":7,"nodeType":"233","messageId":"234","endLine":21,"endColumn":26},{"ruleId":"231","severity":1,"message":"265","line":83,"column":11,"nodeType":"233","messageId":"234","endLine":83,"endColumn":20},"no-native-reassign",["266"],"no-negated-in-lhs",["267"],["266"],["267"],["266"],["267"],["266"],["267"],["266"],["267"],["266"],["267"],"no-unused-vars","'dispatch' is assigned a value but never used.","Identifier","unusedVar","'scaleBand' is defined but never used.","'Dimmer' is defined but never used.","no-useless-constructor","Useless constructor.","MethodDefinition","noUselessConstructor","'dotColor' is assigned a value but never used.","'xPoint' is assigned a value but never used.","'yPoint' is assigned a value but never used.","'Label' is defined but never used.","no-redeclare","'j' is already defined.","redeclared","'spotsBack' is already defined.","'time' is already defined.","default-case","Expected a default case.","SwitchStatement","missingDefaultCase","'exportTalkgroupSuccess' is defined but never used.","'exportTalkgroupError' is defined but never used.","'ReactDOM' is defined but never used.","'Container' is defined but never used.","'Header' is defined but never used.","'Grid' is defined but never used.","'Rail' is defined but never used.","'Segment' is defined but never used.","'List' is defined but never used.","'Table' is defined but never used.","'requestMessageStyle' is assigned a value but never used.","'railStyle' is assigned a value but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file +[{"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/features/counter/Counter.js":"1","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Navigation.js":"2","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-constants.js":"3","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/configureStore.js":"4","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-reducer.js":"5","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-reducer.js":"6","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/error-reducer.js":"7","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/index.js":"8","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/About.js":"9","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/NavigationContainer.js":"10","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-constants.js":"11","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-actions.js":"12","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemCard.js":"13","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/Restricted.js":"14","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-actions.js":"15","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/User/user-constants.js":"16","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-reducer.js":"17","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/App.js":"18","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-constants.js":"19","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ListSystems.js":"20","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-reducer.js":"21","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/redux-router/reducers.js":"22","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-constants.js":"23","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-constants.js":"24","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemForm.js":"25","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystemContainer.js":"26","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystem.js":"27","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModalContainer.js":"28","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CallChart.js":"29","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CreateSystemContainer.js":"30","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/System.js":"31","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ResponsiveCallChart.js":"32","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModal.js":"33","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModalContainer.js":"34","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ErrorChart.js":"35","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemContainer.js":"36","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-actions.js":"37","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-actions.js":"38","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-actions.js":"39","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModal.js":"40","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModalContainer.js":"41","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ListSystemsContainer.js":"42","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModal.js":"43","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/Message.js":"44"},{"size":1626,"mtime":499162500000,"results":"45","hashOfConfig":"46"},{"size":1498,"mtime":1611437670772,"results":"47","hashOfConfig":"46"},{"size":115,"mtime":1545362103836,"results":"48","hashOfConfig":"46"},{"size":759,"mtime":1609425817988,"results":"49","hashOfConfig":"46"},{"size":2037,"mtime":1545362103826,"results":"50","hashOfConfig":"46"},{"size":3029,"mtime":1609813173090,"results":"51","hashOfConfig":"46"},{"size":636,"mtime":1545362103837,"results":"52","hashOfConfig":"46"},{"size":1684,"mtime":1611441482755,"results":"53","hashOfConfig":"46"},{"size":1278,"mtime":1609812739781,"results":"54","hashOfConfig":"46"},{"size":570,"mtime":1609684078480,"results":"55","hashOfConfig":"46"},{"size":862,"mtime":1545362103839,"results":"56","hashOfConfig":"46"},{"size":1344,"mtime":1609686206535,"results":"57","hashOfConfig":"46"},{"size":1145,"mtime":1609813170344,"results":"58","hashOfConfig":"46"},{"size":1802,"mtime":1611541149541,"results":"59","hashOfConfig":"46"},{"size":5934,"mtime":1611515999167,"results":"60","hashOfConfig":"46"},{"size":320,"mtime":1546657322904,"results":"61","hashOfConfig":"46"},{"size":1045,"mtime":1609813166756,"results":"62","hashOfConfig":"46"},{"size":253,"mtime":1609814499873,"results":"63","hashOfConfig":"46"},{"size":688,"mtime":1545362103825,"results":"64","hashOfConfig":"46"},{"size":1156,"mtime":1609813188195,"results":"65","hashOfConfig":"46"},{"size":2292,"mtime":1611717610099,"results":"66","hashOfConfig":"46"},{"size":858,"mtime":1611513056121,"results":"67","hashOfConfig":"46"},{"size":848,"mtime":1545362103820,"results":"68","hashOfConfig":"46"},{"size":537,"mtime":1545362103845,"results":"69","hashOfConfig":"46"},{"size":13172,"mtime":1611716843392,"results":"70","hashOfConfig":"46"},{"size":381,"mtime":1609814717150,"results":"71","hashOfConfig":"46"},{"size":1137,"mtime":1609814723480,"results":"72","hashOfConfig":"46"},{"size":608,"mtime":1545362103822,"results":"73","hashOfConfig":"46"},{"size":3099,"mtime":1611496772792,"results":"74","hashOfConfig":"46"},{"size":277,"mtime":1546482642525,"results":"75","hashOfConfig":"46"},{"size":20432,"mtime":1611632708859,"results":"76","hashOfConfig":"46"},{"size":613,"mtime":1611443036463,"results":"77","hashOfConfig":"46"},{"size":8513,"mtime":1611632514289,"results":"78","hashOfConfig":"46"},{"size":617,"mtime":1545362103824,"results":"79","hashOfConfig":"46"},{"size":4201,"mtime":1611495367506,"results":"80","hashOfConfig":"46"},{"size":1677,"mtime":1611514031099,"results":"81","hashOfConfig":"46"},{"size":4540,"mtime":1611544564640,"results":"82","hashOfConfig":"46"},{"size":6184,"mtime":1611542098648,"results":"83","hashOfConfig":"46"},{"size":4578,"mtime":1611514663911,"results":"84","hashOfConfig":"46"},{"size":3357,"mtime":1611516085275,"results":"85","hashOfConfig":"46"},{"size":779,"mtime":1545362103818,"results":"86","hashOfConfig":"46"},{"size":277,"mtime":1545362103831,"results":"87","hashOfConfig":"46"},{"size":3155,"mtime":1545362103823,"results":"88","hashOfConfig":"46"},{"size":764,"mtime":1611441653333,"results":"89","hashOfConfig":"46"},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"108517c",{"filePath":"92","messages":"93","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"94","messages":"95","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"96"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"101"},{"filePath":"102","messages":"103","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"101"},{"filePath":"104","messages":"105","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"106"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"111"},{"filePath":"112","messages":"113","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"114"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"96"},{"filePath":"117","messages":"118","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"101"},{"filePath":"119","messages":"120","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"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":"101"},{"filePath":"125","messages":"126","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"127"},{"filePath":"128","messages":"129","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"96"},{"filePath":"130","messages":"131","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"132"},{"filePath":"133","messages":"134","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"127"},{"filePath":"135","messages":"136","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"114"},{"filePath":"137","messages":"138","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"141"},{"filePath":"142","messages":"143","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"144","messages":"145","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"101"},{"filePath":"146","messages":"147","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"148","messages":"149","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"141"},{"filePath":"150","messages":"151","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"152","messages":"153","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"132"},{"filePath":"154","messages":"155","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"156"},{"filePath":"157","messages":"158","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"159","messages":"160","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"161","messages":"162","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"163","usedDeprecatedRules":"164"},{"filePath":"165","messages":"166","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"167","messages":"168","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"96"},{"filePath":"169","messages":"170","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"171"},{"filePath":"172","messages":"173","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"174","messages":"175","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"176","messages":"177","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"127"},{"filePath":"178","messages":"179","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"180","messages":"181","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":"182","usedDeprecatedRules":"127"},{"filePath":"183","messages":"184","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"185","messages":"186","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"189","messages":"190","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"/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",[],["191","192"],"/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",[],["193","194"],"/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",[],["195","196"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/index.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/About.js",[],["197","198"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/App/NavigationContainer.js",[],["199","200"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/system-constants.js",[],"/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",[],["201","202"],"/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",[],["203","204"],"/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",[],["205","206"],"/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",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/UpdateSystem.js",["207"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CallChart.js",["208","209","210","211","212","213"],"import React, { Component } from \"react\";\nimport { Group } from '@visx/group';\nimport { curveStep} from '@visx/curve';\nimport { LinePath } from '@visx/shape';\nimport { scaleLinear, scaleBand, scaleTime } from '@visx/scale';\nimport { timeParse, timeFormat } from 'd3-time-format';\nimport { AxisBottom, AxisLeft } from '@visx/axis';\nimport { Dimmer, Loader } from \"semantic-ui-react\";\n\n\nclass CallChart extends Component {\nconstructor(props) {\n super(props);\n}\n\n render() {\n var callData = this.props.data;\n if (!callData) {\n return (\n\n Loading\n\n )\n }\n var callTotals = [];\n var errorTotals = [];\n\n // Define the graph dimensions and margins\n const width = this.props.width;\n const height = 500;\n const margin = { top: 20, bottom: 40, left: 40, right: 20 };\n const parseDate = timeParse(\"%Y%m%d\");\n const format = timeFormat(\"%b %d\");\n const formatDate = (date) => format(parseDate(date));\n\n // Then we'll create some bounds\n const xMax = width - margin.left - margin.right;\n const yMax = height - margin.top - margin.bottom;\n\n // accessors\n const x = d => d.x;\n const y = d => d.y;\n\n\n\n // Compose together the scale and accessor functions to get point functions\n const dotColor = n => {\n var colores_g = [\"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\", \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\", \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\", \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\", \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\"];\n return colores_g[n % colores_g.length];\n }\n\n const compose = (scale, accessor) => (data) => scale(accessor(data));\n var xScale, yScale, xPoint, yPoint;\n if (callData) {\n // We'll use some mock data from `@vx/mock-data` for this.\n callTotals = callData.callTotals;\n errorTotals = callData.errorTotals;\n // scales\n xScale = scaleTime({\n range: [0, xMax],\n domain: [callData.minDate, callData.maxDate],\n tickFormat: () => (val) => formatDate(val)\n });\n yScale = scaleLinear({\n range: [yMax, 0],\n domain: [0, callData.maxValue],\n });\n xPoint = compose(xScale, x);\n yPoint = compose(yScale, y);\n }\n\n return (\n\n\n 520 ? 10 : 5} />\n\n\n \n \n\n);\n}\n\n\n}\nexport default CallChart;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/CreateSystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/System.js",["214","215","216","217","218"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ResponsiveCallChart.js",["219"],"import React, { Component } from \"react\"\nimport CallChart from \"./CallChart\"\nimport { ParentSize } from \"@visx/responsive\";\n\nclass ResponsiveCallChart extends Component {\n constructor(props) {\n super(props);\n }\n\n\trender() {\n\t\treturn(\n \n {({ width: w, height: h }) => {\n return (\n \n );\n }}\n \n\t\t)\n\t}\n}\n\nexport default ResponsiveCallChart\n",["220","221"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ErrorChart.js",["222","223","224"],"import React, { Component } from \"react\";\nimport { Group } from '@visx/group';\nimport { GlyphCircle } from '@visx/glyph';\nimport { scaleLinear, scaleTime, scaleOrdinal } from '@visx/scale';\nimport { timeParse, timeFormat } from 'd3-time-format';\nimport { AxisBottom, AxisLeft } from '@visx/axis';\nimport { Loader } from \"semantic-ui-react\";\nimport { LegendOrdinal} from '@visx/legend';\nclass ErrorChart extends Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n var errorData = this.props.data;\n if (!errorData) {\n return (\n Loading\n )\n }\n var data = [];\n const parseDate = timeParse(\"%Y%m%d\");\n const format = timeFormat(\"%b %d\");\n const formatDate = (date) => format(parseDate(date));\n\n // Define the graph dimensions and margins\n const width = this.props.width;\n const height = 500;\n const margin = { top: 20, bottom: 40, left: 40, right: 20 };\n\n // Then we'll create some bounds\n const xMax = width - margin.left - margin.right;\n const yMax = height - margin.top - margin.bottom;\n\n // accessors\n const x = d => d.x;\n const y = d => d.y;\n\n\n\n // Compose together the scale and accessor functions to get point functions\n const dotColor = n => {\n var colores_g = [\"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\", \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\", \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\", \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\", \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\"];\n return colores_g[n % colores_g.length];\n }\n\n const compose = (scale, accessor) => (data) => scale(accessor(data));\n var zScale = scaleOrdinal({\n domain: errorData.legend,\n range: [\"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\", \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\", \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\", \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\", \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\"]\n });\n var xScale, yScale, xPoint, yPoint;\n if (errorData) {\n // We'll use some mock data from `@vx/mock-data` for this.\n data = errorData.data;\n // scales\n xScale = scaleTime({\n range: [0, xMax],\n domain: [errorData.minDate, errorData.maxDate],\n tickFormat: () => (val) => formatDate(val)\n });\n yScale = scaleLinear({\n range: [yMax, 0],\n domain: [0, errorData.maxValue],\n });\n zScale = scaleOrdinal({\n domain: errorData.legend,\n range: [\"#3366cc\", \"#dc3912\", \"#ff9900\", \"#109618\", \"#990099\", \"#0099c6\", \"#dd4477\", \"#66aa00\", \"#b82e2e\", \"#316395\", \"#994499\", \"#22aa99\", \"#aaaa11\", \"#6633cc\", \"#e67300\", \"#8b0707\", \"#651067\", \"#329262\", \"#5574a6\", \"#3b3eac\"]\n });\n xPoint = compose(xScale, x);\n yPoint = compose(yScale, y);\n\n }\n\n return (\n
\n \n \n 520 ? 10 : 5} />\n \n {data.map((band, i) => {\n return (\n \n {band.data.map((point, j) => {\n return (\n \n );\n })}\n \n );\n })}\n \n \n \n event => {\n console.log(\n `mouse over: ${data.text}`,\n `index: ${data.index}`,\n );\n }}\n />\n
\n \n\n\n\n );\n }\n\n\n}\nexport default ErrorChart;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/SystemContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Talkgroups/talkgroup-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/group-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/permission-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/AddPermissionModal.js",["225","226","227","228","229","230","231","232","233","234"],"import React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {\n Container,\n Checkbox,\n Header,\n Form,\n Grid,\n Modal,\n Rail,\n Segment,\n List,\n Input,\n Button,\n Message,\n Icon,\n Table\n} from \"semantic-ui-react\";\n\n// ----------------------------------------------------\nconst requestMessageStyle = {\n color: \"red\"\n};\n\n// ----------------------------------------------------\nclass AddPermissionModal extends Component {\n constructor(props) {\n super(props);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n // Set initial state\n this.state = {\n role: 5,\n email: \"\",\n error: \"\"\n };\n }\n\n componentDidMount() {\n\n }\n\n\n\n handleInputChange = (e, { name, value }) => this.setState({ [name]: value });\n handleChange = (e, { newRole }) => this.setState({ newRole })\n\n\n\n\n handleClose = () => {\n this.setState({\n error: \"\"\n });\n this.props.onClose(false);\n }\n handleSubmit() {\n //if (this.props.updatePermissionId) {\n const data = {email: this.state.email, shortName: this.props.shortName, role: this.state.role }\n\n this.props.permissionActions.addPermission(data).then(requestMessage => {\n if (requestMessage) {\n // report to the user is there was a problem during registration\n this.setState({\n error: requestMessage\n });\n //this.props.onClose(false);\n } else {\n this.setState({\n error: \"\"\n });\n this.props.onClose(true);\n }\n });\n\n\n //}\n }\n\n render() {\n\n const railStyle = {\n top: \"15px\",\n minHeight: \"200px\"\n };\n var errorMessage = \"\";\n\n if (this.state.error) {\n errorMessage = (\n \n That didn't work...\n

{this.state.error}

\n
\n )\n }\n\n return (\n \n Select Role\n \n \n
\n \n Add User Access to System: {this.props.shortName}\n \n \n \n \n \n = 0) && (this.state.role < 10)}\n onChange={this.handleInputChange}\n />\n \n \n = 10) && (this.state.role < 20)}\n onChange={this.handleInputChange}\n />\n \n
\n {errorMessage}\n
\n
\n \n \n \n \n
\n\n );\n }\n}\n\nexport default AddPermissionModal;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Group/GroupModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/System/ListSystemsContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Permission/UpdatePermissionModal.js",["235","236","237","238","239","240","241","242","243","244","245","246"],"/Users/luke/Projects/OpenMHz/trunk-server-public/admin/src/Components/Message.js",["247"],{"ruleId":"248","replacedBy":"249"},{"ruleId":"250","replacedBy":"251"},{"ruleId":"248","replacedBy":"252"},{"ruleId":"250","replacedBy":"253"},{"ruleId":"248","replacedBy":"254"},{"ruleId":"250","replacedBy":"255"},{"ruleId":"248","replacedBy":"256"},{"ruleId":"250","replacedBy":"257"},{"ruleId":"248","replacedBy":"258"},{"ruleId":"250","replacedBy":"259"},{"ruleId":"248","replacedBy":"260"},{"ruleId":"250","replacedBy":"261"},{"ruleId":"248","replacedBy":"262"},{"ruleId":"250","replacedBy":"263"},{"ruleId":"248","replacedBy":"264"},{"ruleId":"250","replacedBy":"265"},{"ruleId":"266","severity":1,"message":"267","line":19,"column":14,"nodeType":"268","messageId":"269","endLine":19,"endColumn":22},{"ruleId":"266","severity":1,"message":"270","line":5,"column":23,"nodeType":"268","messageId":"269","endLine":5,"endColumn":32},{"ruleId":"266","severity":1,"message":"271","line":8,"column":10,"nodeType":"268","messageId":"269","endLine":8,"endColumn":16},{"ruleId":"272","severity":1,"message":"273","line":12,"column":1,"nodeType":"274","messageId":"275","endLine":14,"endColumn":2},{"ruleId":"266","severity":1,"message":"276","line":47,"column":11,"nodeType":"268","messageId":"269","endLine":47,"endColumn":19},{"ruleId":"266","severity":1,"message":"277","line":68,"column":9,"nodeType":"268","messageId":"269","endLine":68,"endColumn":15},{"ruleId":"266","severity":1,"message":"278","line":69,"column":9,"nodeType":"268","messageId":"269","endLine":69,"endColumn":15},{"ruleId":"266","severity":1,"message":"279","line":24,"column":3,"nodeType":"268","messageId":"269","endLine":24,"endColumn":8},{"ruleId":"280","severity":1,"message":"281","line":133,"column":14,"nodeType":"268","messageId":"282","endLine":133,"endColumn":15},{"ruleId":"280","severity":1,"message":"283","line":134,"column":11,"nodeType":"268","messageId":"282","endLine":134,"endColumn":20},{"ruleId":"280","severity":1,"message":"284","line":135,"column":11,"nodeType":"268","messageId":"282","endLine":135,"endColumn":15},{"ruleId":"285","severity":1,"message":"286","line":351,"column":7,"nodeType":"287","messageId":"288","endLine":364,"endColumn":8},{"ruleId":"272","severity":1,"message":"273","line":6,"column":3,"nodeType":"274","messageId":"275","endLine":8,"endColumn":4},{"ruleId":"248","replacedBy":"289"},{"ruleId":"250","replacedBy":"290"},{"ruleId":"272","severity":1,"message":"273","line":10,"column":3,"nodeType":"274","messageId":"275","endLine":12,"endColumn":4},{"ruleId":"266","severity":1,"message":"277","line":70,"column":7,"nodeType":"268","messageId":"269","endLine":70,"endColumn":13},{"ruleId":"266","severity":1,"message":"278","line":71,"column":7,"nodeType":"268","messageId":"269","endLine":71,"endColumn":13},{"ruleId":"266","severity":1,"message":"291","line":2,"column":8,"nodeType":"268","messageId":"269","endLine":2,"endColumn":16},{"ruleId":"266","severity":1,"message":"292","line":4,"column":3,"nodeType":"268","messageId":"269","endLine":4,"endColumn":12},{"ruleId":"266","severity":1,"message":"293","line":6,"column":3,"nodeType":"268","messageId":"269","endLine":6,"endColumn":9},{"ruleId":"266","severity":1,"message":"294","line":8,"column":3,"nodeType":"268","messageId":"269","endLine":8,"endColumn":7},{"ruleId":"266","severity":1,"message":"295","line":10,"column":3,"nodeType":"268","messageId":"269","endLine":10,"endColumn":7},{"ruleId":"266","severity":1,"message":"296","line":11,"column":3,"nodeType":"268","messageId":"269","endLine":11,"endColumn":10},{"ruleId":"266","severity":1,"message":"297","line":12,"column":3,"nodeType":"268","messageId":"269","endLine":12,"endColumn":7},{"ruleId":"266","severity":1,"message":"298","line":17,"column":3,"nodeType":"268","messageId":"269","endLine":17,"endColumn":8},{"ruleId":"266","severity":1,"message":"299","line":21,"column":7,"nodeType":"268","messageId":"269","endLine":21,"endColumn":26},{"ruleId":"266","severity":1,"message":"300","line":83,"column":11,"nodeType":"268","messageId":"269","endLine":83,"endColumn":20},{"ruleId":"266","severity":1,"message":"291","line":2,"column":8,"nodeType":"268","messageId":"269","endLine":2,"endColumn":16},{"ruleId":"266","severity":1,"message":"292","line":4,"column":3,"nodeType":"268","messageId":"269","endLine":4,"endColumn":12},{"ruleId":"266","severity":1,"message":"293","line":6,"column":3,"nodeType":"268","messageId":"269","endLine":6,"endColumn":9},{"ruleId":"266","severity":1,"message":"294","line":8,"column":3,"nodeType":"268","messageId":"269","endLine":8,"endColumn":7},{"ruleId":"266","severity":1,"message":"295","line":10,"column":3,"nodeType":"268","messageId":"269","endLine":10,"endColumn":7},{"ruleId":"266","severity":1,"message":"296","line":11,"column":3,"nodeType":"268","messageId":"269","endLine":11,"endColumn":10},{"ruleId":"266","severity":1,"message":"297","line":12,"column":3,"nodeType":"268","messageId":"269","endLine":12,"endColumn":7},{"ruleId":"266","severity":1,"message":"301","line":13,"column":3,"nodeType":"268","messageId":"269","endLine":13,"endColumn":8},{"ruleId":"266","severity":1,"message":"302","line":15,"column":3,"nodeType":"268","messageId":"269","endLine":15,"endColumn":10},{"ruleId":"266","severity":1,"message":"298","line":17,"column":3,"nodeType":"268","messageId":"269","endLine":17,"endColumn":8},{"ruleId":"266","severity":1,"message":"299","line":21,"column":7,"nodeType":"268","messageId":"269","endLine":21,"endColumn":26},{"ruleId":"266","severity":1,"message":"300","line":82,"column":11,"nodeType":"268","messageId":"269","endLine":82,"endColumn":20},{"ruleId":"272","severity":1,"message":"273","line":5,"column":3,"nodeType":"274","messageId":"275","endLine":7,"endColumn":4},"no-native-reassign",["303"],"no-negated-in-lhs",["304"],["303"],["304"],["303"],["304"],["303"],["304"],["303"],["304"],["303"],["304"],["303"],["304"],["303"],["304"],"no-unused-vars","'dispatch' is assigned a value but never used.","Identifier","unusedVar","'scaleBand' is defined but never used.","'Dimmer' is defined but never used.","no-useless-constructor","Useless constructor.","MethodDefinition","noUselessConstructor","'dotColor' is assigned a value but never used.","'xPoint' is assigned a value but never used.","'yPoint' is assigned a value but never used.","'Label' is defined but never used.","no-redeclare","'j' is already defined.","redeclared","'spotsBack' is already defined.","'time' is already defined.","default-case","Expected a default case.","SwitchStatement","missingDefaultCase",["303"],["304"],"'ReactDOM' is defined but never used.","'Container' is defined but never used.","'Header' is defined but never used.","'Grid' is defined but never used.","'Rail' is defined but never used.","'Segment' is defined but never used.","'List' is defined but never used.","'Table' is defined but never used.","'requestMessageStyle' is assigned a value but never used.","'railStyle' is assigned a value but never used.","'Input' is defined but never used.","'Message' is defined but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index f48cd01..8dcdef1 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -22,22 +22,5 @@ RUN mkdir -p /home/app/upload && cp -a /tmp/node_modules /home/app WORKDIR $HOME/ COPY . $HOME/ -#ADD sweep.sh $HOME/sweep.sh -#RUN chmod +x $HOME/sweep.sh - -#ADD mycrontab $HOME/mycrontab -#RUN crontab $HOME/mycrontab -#RUN update-rc.d cron defaults - -# Add crontab file in the cron directory -#ADD mycrontab /etc/cron.d/sweep-cron - -#RUN touch /var/log/cron.log - -# Give execution rights on the cron job -#RUN chmod 0644 /etc/cron.d/sweep-cron - # Run the command on container startup -#CMD env > $HOME/env.txt && cron -#CMD cron && node index.js CMD node index.js diff --git a/backend/index.js b/backend/index.js index 587f830..dd9e2ff 100644 --- a/backend/index.js +++ b/backend/index.js @@ -90,14 +90,6 @@ function isUser(req, res, next) { } } -function isLoggedIn(req, res, next) { - if (req.isAuthenticated()) return next(); - res.status(401).send({ - success: false, - message: "Not Authenticated." - }); -}; - // ------------------------------------------- @@ -121,27 +113,11 @@ connect() mongoose.connection.on("error", console.error) mongoose.connection.on("disconnected", connect) -/* -const WebSocket = require('ws'); -const wss = new WebSocket.Server({ - server -});*/ - - var upload = multer({ dest: config.uploadDirectory }); -function isLoggedIn(req, res, next) { - if (req.isAuthenticated()) return next(); - res.status(401).send({ - success: false, - message: "Not Authenticated." - }); -}; - - var clients = []; function addSystemClients(req, res, next) { diff --git a/backend/support/mycrontab b/backend/support/mycrontab deleted file mode 100644 index 0e51be1..0000000 --- a/backend/support/mycrontab +++ /dev/null @@ -1,3 +0,0 @@ -# Jobs: -# m h dom mon dow command - 0 4 * * * root env - `cat /home/app/env.txt` /home/app/sweep.sh >> /var/log/cron.log 2>&1 diff --git a/backend/support/sweep.js b/backend/support/sweep.js deleted file mode 100644 index 4cf927f..0000000 --- a/backend/support/sweep.js +++ /dev/null @@ -1,81 +0,0 @@ -var fs = require('fs'); -var path = require('path'); -var config = require('./config/config.json'); -var mongo = require('mongodb'); -var ObjectID = require('mongodb').ObjectID; -mongo.BSONPure = require('bson').BSONPure; -var BSON = mongo.BSONPure; -var MongoClient = require('mongodb').MongoClient, - assert = require('assert'); -var db = require('./db'); -var findRemoveSync = require('./find-remove'); -var util = require('util'); - - -function sweep(){ - var base_path = config.mediaDirectory; - var total = 0; - var sysCount = 0; - db.get().collection('systems', function(err, sysCollection) { - var cursor = sysCollection.find(); - cursor.each(function(err, item) { - if (item) { - var date = new Date(); - var old; - if (item.shortName == "dcfd"){ - old = 60*60*24*30; - date.setMonth(date.getMonth() - 1); - - } else { - old = 60*60*24*5; - date.setDate(date.getDate() - 5); - } - var local_path = config.mediaDirectory + "/" + item.shortName + "/"; - console.log("Sytems: " + local_path + " Date: " + date + " Seconds: " + old); - try { - var result = findRemoveSync(local_path, { age: {seconds: old}, removeEmpty:true, files: "*.*"}); - if (result && result.totals) { - result.totals.date = date; - } else { - result = {totals:{fileSize: 0, deletedSize:0, files: 0, deleted:0, date: date}}; - } - db.get().collection('system_stats', function(err, statsCollection) { - statsCollection.update({ - shortName: item.shortName - }, { - $set: { - "sweep": result.totals - } - }, { - upsert: true - }, function(err, objects) { - if (err) console.warn("Problem adding system stats: " + err.message); - }); - }); - - } catch (e) { - console.log("Error trying to remove: "); - console.log(e); - } - console.log("Deleted: \n"); - console.log(util.inspect(result)); - sysCount++; - } else { - console.log("Clean Sweep - Systems Processed: " + sysCount); - db.get().close(); - } - - }); - }); - -} -// Connect to Mongo on start -db.connect(function(err) { - if (err) { - console.log('Unable to connect to Mongo.') - process.exit(1) - } else { - - sweep(); - } -}) diff --git a/backend/support/sweep.sh b/backend/support/sweep.sh deleted file mode 100644 index 982cbab..0000000 --- a/backend/support/sweep.sh +++ /dev/null @@ -1,2 +0,0 @@ - -node /home/app/sweep.js > /home/app/sweep.log diff --git a/frontend/.eslintcache b/frontend/.eslintcache index ef89f2a..c5dfe12 100644 --- a/frontend/.eslintcache +++ b/frontend/.eslintcache @@ -1 +1 @@ -[{"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/ListCalls.js":"1","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-actions.js":"2","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystemsContainer.js":"3","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallPlayer.js":"4","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-constants.js":"5","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/SupportModal.js":"6","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/FilterModal.js":"7","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/query-string.js":"8","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModal.js":"9","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/configureStore.js":"10","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-actions.js":"11","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-reducer.js":"12","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/MediaPlayer.js":"13","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/GroupModal.js":"14","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-actions.js":"15","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/reducers.js":"16","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/SystemCard.js":"17","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModalContainer.js":"18","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystems.js":"19","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-constants.js":"20","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallItem.js":"21"},{"size":1249,"mtime":1609596364896,"results":"22","hashOfConfig":"23"},{"size":9179,"mtime":1609597700043,"results":"24","hashOfConfig":"23"},{"size":277,"mtime":1545362103911,"results":"25","hashOfConfig":"23"},{"size":18156,"mtime":1609597871834,"results":"26","hashOfConfig":"23"},{"size":151,"mtime":1545362103908,"results":"27","hashOfConfig":"23"},{"size":1325,"mtime":1591209153088,"results":"28","hashOfConfig":"23"},{"size":4437,"mtime":1560856294173,"results":"29","hashOfConfig":"23"},{"size":362,"mtime":1609596675259,"results":"30","hashOfConfig":"23"},{"size":1778,"mtime":1609597248589,"results":"31","hashOfConfig":"23"},{"size":759,"mtime":1609425817988,"results":"32","hashOfConfig":"23"},{"size":2433,"mtime":1609597717050,"results":"33","hashOfConfig":"23"},{"size":1395,"mtime":1545362103908,"results":"34","hashOfConfig":"23"},{"size":4251,"mtime":1609599087987,"results":"35","hashOfConfig":"23"},{"size":2023,"mtime":1551754660116,"results":"36","hashOfConfig":"23"},{"size":1747,"mtime":1609597708479,"results":"37","hashOfConfig":"23"},{"size":595,"mtime":1609596047661,"results":"38","hashOfConfig":"23"},{"size":2045,"mtime":1609520570000,"results":"39","hashOfConfig":"23"},{"size":763,"mtime":1545362103896,"results":"40","hashOfConfig":"23"},{"size":1547,"mtime":1609520315634,"results":"41","hashOfConfig":"23"},{"size":537,"mtime":1545362103916,"results":"42","hashOfConfig":"23"},{"size":2865,"mtime":1560343858028,"results":"43","hashOfConfig":"23"},{"filePath":"44","messages":"45","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"46","usedDeprecatedRules":"47"},"1du4mf8",{"filePath":"48","messages":"49","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"50","usedDeprecatedRules":"47"},{"filePath":"51","messages":"52","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"47"},{"filePath":"53","messages":"54","errorCount":6,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"55","messages":"56","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"57","messages":"58","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"59","messages":"60","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"61"},{"filePath":"62","messages":"63","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"64","messages":"65","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"66"},{"filePath":"67","messages":"68","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"69"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"72","usedDeprecatedRules":"47"},{"filePath":"73","messages":"74","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"75","messages":"76","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"77","messages":"78","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"79","messages":"80","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"81"},{"filePath":"82","messages":"83","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"84"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"47"},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"93","messages":"94","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/ListCalls.js",["95","96"],"import React from \"react\";\nimport CallItem from \"./CallItem\";\nimport {\n Icon,\n Table,\n} from \"semantic-ui-react\";\nimport \"./CallPlayer.css\";\n\n// ----------------------------------------------------\nclass ListCalls extends React.Component {\n\n constructor(props) {\n super(props);\n\n }\n\n //https://stackoverflow.com/questions/36559661/how-can-i-dispatch-from-child-components-in-react-redux\n //https://stackoverflow.com/questions/42597602/react-onclick-pass-event-with-parameter\n render() {\n return (\n\n \n \n \n Len\n Talkgroup\n Time\n \n \n \n \n\n {this.props.callsAllIds.map((callId, index) => )}\n\n \n
\n\n\n );\n }\n}\n\nexport default ListCalls;\n",["97","98"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-actions.js",["99","100","101"],"import axios from \"axios\";\n\nimport * as types from \"./call-constants\";\nimport { push } from 'connected-react-router';\n\nconst FETCH_SUCCESS_STATISTIC = \"FETCH_SUCCESS_STATISTIC\"\n\nfunction beginFetchCallInfo() {\n return { type: types.FETCH_CALL_INFO };\n}\n\nfunction fetchCallInfoSuccess(data) {\n return { type: types.FETCH_SUCCESS_CALL_INFO,\n data };\n}\n\nfunction fetchCallInfoError(data) {\n return { type: types.FETCH_ERROR_CALL_INFO,\n data };\n}\n\nfunction prependCall() {\n return { type: types.PREPEND_CALL };\n}\n\nfunction beginAddStar() {\n return { type: types.ADD_STAR };\n}\n\nfunction addStarSuccess(data) {\n return { type: types.ADD_STAR_SUCCESS, data };\n}\n\nfunction addStarError(data) {\n return { type: types.ADD_STAR_ERROR, data };\n}\n\nfunction beginFetchCall() {\n return { type: types.FETCH_CALL };\n}\n\nfunction fetchCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_CALL,\n data };\n}\n\n\n\nfunction fetchOlderCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_OLDER_CALL,\n data };\n}\n\nfunction fetchNewerCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_NEWER_CALL,\n data };\n}\n\nfunction fetchCallError(data) {\n return { type: types.FETCH_ERROR_CALL,\n data };\n}\n\n\nexport function changeUrl(url) {\n return dispatch => {\n dispatch(push(url));\n };\n}\n\n// Example of an Async Action Creator\n// http://redux.js.org/docs/advanced/AsyncActions.html\n\nfunction shouldFetchCalls(state, subreddit) {\n return true;\n if ((!state.call.items) || (state.call.items.length <1)) {\n return true\n } else if (state.call.isWaiting) {\n return false\n } else {\n return false\n }\n}\n\n\n\n\nfunction buildUrlParams(a) {\n return Object.keys(a).map(function(k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(a[k])\n }).join('&')\n}\n\nfunction buildCallUrl(state, date, direction) {\n var params = {};\n var url = \"\";\n\n\n if ((typeof direction === 'string') && (typeof date === 'number')) {\n url = url + '/' + direction;\n params[\"time\"] = date;\n } else {\n if (state.call.filterDate){\n url = url + '/older'\n params[\"time\"] = state.call.filterDate;\n }\n }\n if (state.call.filterStarred) {\n params[\"filter-starred\"] = true;\n }\n switch(state.call.filterType) {\n case 1:\n params[\"filter-type\"] = \"group\";\n params[\"filter-code\"] = state.call.filterGroupId;\n break;\n case 2:\n params[\"filter-type\"] = \"talkgroup\";\n params[\"filter-code\"] = state.call.filterTalkgroups;\n break;\n default:\n case 0:\n }\n/*\n\n if (this.filterCode != \"\") {\n params[\"filter-code\"] = this.filterCode;\n }\n\n if (this.filterType == this.FilterType.Group) {\n params[\"filter-type\"] = \"group\";\n params[\"filter-name\"] = this.filterName;\n }\n\n if (this.filterType == this.FilterType.Talkgroup) {\n params[\"filter-type\"] = \"talkgroup\";\n }\n\n if (this.filterType == this.FilterType.Unit) {\n params[\"filter-type\"] = \"unit\";\n }\n\n*/\n // url = startUp.backend_server + \"/\" + startUp.shortName.toLowerCase() + \"/calls\" + url + '?' + buildUrlParams(params);\n url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName + \"/calls\" + url + '?' + buildUrlParams(params);\n console.log(\"Trying to fetch data from this url: \" + url);\n return url;\n}\n\nexport function fetchNewerCalls( timestamp) {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url = buildCallUrl(state, timestamp, \"newer\")\n return axios\n .get(url)\n .then(response => {\n if ((response.data) && (response.data.calls.length >0)) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchNewerCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\n\nexport function fetchOlderCalls( timestamp) {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url = buildCallUrl(state, timestamp, \"older\")\n return axios\n .get(url)\n .then(response => {\n if (response.data) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchOlderCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\n\nexport function addStar( callId) {\n return (dispatch, getState) => {\n const state = getState();\n dispatch(beginAddStar());\n\n const url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName.toLowerCase() + \"/star/\" + callId\n return axios\n .post(url,{}, {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).then(response => {\n if (response.data.success) {\n dispatch(addStarSuccess(response.data.call));\n } else {\n dispatch(addStarError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n\n\n\nexport function fetchCallInfo( callId) {\n return (dispatch, getState) => {\n const state = getState();\n dispatch(beginFetchCallInfo());\n\n const url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName.toLowerCase() + \"/call/\" + callId\n return axios\n .get(url)\n .then(response => {\n if (response.data.success) {\n dispatch(fetchCallInfoSuccess(response.data.call));\n } else {\n dispatch(fetchCallInfoError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n\nexport function fetchCalls() {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url=buildCallUrl(state);\n return axios\n .get(url)\n .then(response => {\n if (response.data) {\n // check to make sure you actually got some calls back.\n if (response.data.calls.length > 0) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n }\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\nexport function addCall(call) {\n return (dispatch, getState) => {\n dispatch({ type: types.UPSERT_CALL, data: call});\n };\n}\n\nexport function setStarred(starred) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_STARRED_FILTER, data: starred});\n };\n}\n\nexport function setLive(live) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_LIVE, data: live});\n };\n}\n\nexport function setCurrentCallId(callId) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_CURRENT_CALL_ID, data: callId});\n };\n}\n\n// should be as a unix timestamp\nexport function setDateFilter(date) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_DATE_FILTER, date: date});\n };\n}\n\nexport function setAllFilter() {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_ALL_FILTER});\n };\n}\n\nexport function setTalkgroupFilter(tgs) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_TALKGROUP_FILTER, talkgroups: tgs});\n };\n}\n\nexport function setGroupFilter(groupId) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_GROUP_FILTER, groupId: groupId});\n };\n}\n\nexport function setShortName(shortName) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_SHORT_NAME, data: shortName});\n };\n}\n\nexport function setFilter(filter) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_FILTER, data: filter});\n };\n}\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystemsContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallPlayer.js",["102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/SupportModal.js",["121"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/FilterModal.js",["122","123","124"],"import React, { Component } from \"react\";\nimport {\n Modal,\n Button,\n Icon,\n Tab,\n Header,\n Dropdown,\n Checkbox,\n Divider\n} from \"semantic-ui-react\";\nimport \"./FilterModal.css\";\n\n\nclass FilterModal extends Component {\n constructor(props) {\n super(props)\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleTabChange = this.handleTabChange.bind(this);\n this.toggleStarred = this.toggleStarred.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleClose = this.handleClose.bind(this);\n\n this.state = {\n open: false,\n selectedTalkgroup: this.props.selectedTalkgroups,\n selectedGroup: this.props.selectedGroup,\n filterStarred: this.props.filterStarred,\n activeTab: this.props.activeTab\n }\n}\n\n\nhandleTabChange = (e, data) => this.setState({activeTab: data.activeIndex});\nhandleInputChange = (e, { name, value }) => this.setState({ [name]: value });\ntoggleStarred = () => this.setState(prevState => ({ filterStarred: !prevState.filterStarred }));\nhandleClose = () => this.props.onClose(false);\nhandleDone(event) {\n switch(this.state.activeTab) {\n case 0:\n this.props.callActions.setAllFilter();\n this.props.onClose(true);\n break;\n case 1:\n if (this.state.selectedGroup) {\n this.props.callActions.setGroupFilter(this.state.selectedGroup);\n this.props.onClose(true);\n } else {\n this.props.onClose(false);\n }\n break;\n case 2:\n if (this.state.selectedTalkgroup) {\n this.props.callActions.setTalkgroupFilter(this.state.selectedTalkgroup);\n this.props.onClose(true);\n } else {\n this.props.onClose(false);\n }\n break;\n }\n if (this.state.filterStarred != this.props.filterStarred) {\n this.props.callActions.setStarred(this.state.filterStarred);\n this.props.onClose(true);\n }\n \n}\ncomponentWillUpdate(nextProps) {\n\n const filterChanged = ((nextProps.selectedTalkgroups !== this.props.selectedTalkgroups) || (nextProps.selectedGroup !== this.props.selectedGroup));\n if (filterChanged) {\n this.setState({selectedTalkgroup: nextProps.selectedTalkgroups, selectedGroup: nextProps.selectedGroup, activeTab: nextProps.activeTab});\n }\n}\n\n render() {\n\n var talkgroupList = [];\n if (this.props.talkgroups) {\n for (const num in this.props.talkgroups) {\n const talkgroup = this.props.talkgroups[num];\n var obj = {\n key: talkgroup.num,\n value: talkgroup.num,\n text: talkgroup.description\n }\n talkgroupList.push(obj);\n }\n }\n var groupList = [];\n if (this.props.groups) {\n for (const num in this.props.groups) {\n const group = this.props.groups[num];\n var obj = {\n key: group._id,\n value: group._id,\n text: group.groupName\n }\n groupList.push(obj);\n }\n }\n const panes = [\n { menuItem: 'All', render: () =>\n { return (\n \n
All Calls
\n

Dispaly all of the calls.

\n
\n )}},\n { menuItem: 'Groups', render: () =>\n { return (\n \n \n\n \n )} },\n { menuItem: 'Talkgroups', render: () =>\n { return (\n \n \n \n )} },\n]\n return (\n\n \n Select a Filter\n \n \n \n \n \n \n \n \n \n \n \n\n )\n }\n}\n\nexport default FilterModal;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/query-string.js",["125"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModal.js",["126"],"import React, { Component } from \"react\";\nimport {\n Modal,\n Button,\n Icon,\n Header\n} from \"semantic-ui-react\";\nimport \"./CalendarModal.css\";\nimport DatePicker from 'react-datepicker';\nimport { subDays } from 'date-fns'\nimport 'react-datepicker/dist/react-datepicker.css';\n\nclass CalendarModal extends Component {\n constructor(props) {\n super(props)\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleClose = this.handleClose.bind(this);\n\n this.state = {\n open: false,\n startDate: new Date()\n }\n}\n\nhandleDateChange = (date) => {\n this.setState({\n startDate: date\n });\n }\n\nhandleClose = () => this.props.onClose(false);\nhandleDone(event) {\n this.props.callActions.setDateFilter(this.state.startDate.getTime());\n this.props.onClose(true);\n}\n\n\n render() {\n \n return (\n\n \n Select a Date & Time\n \n \n \n \n \n \n \n \n \n\n )\n }\n}\n\nexport default CalendarModal;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/configureStore.js",[],["127","128"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-actions.js",["129","130","131","132","133","134","135"],"import axios from 'axios';\n//import { browserHistory } from \"react-router\"\nimport * as types from \"./talkgroup-constants\";\nimport { push } from 'connected-react-router';\n\n// \"Log In\" action creators\nfunction beginImportTalkgroup() {\n return { type: types.IMPORT_TALKGROUP };\n}\n\nfunction importTalkgroupSuccess(data) {\n return {\n type: types.IMPORT_SUCCESS_TALKGROUP,\n data\n };\n}\n\nfunction importTalkgroupError(data) {\n return {\n type: types.IMPORT_ERROR_TALKGROUP,\n data\n };\n}\n\nfunction beginExportTalkgroup() {\n return { type: types.EXPORT_TALKGROUP };\n}\n\nfunction exportTalkgroupSuccess() {\n return { type: types.EXPORT_SUCCESS_TALKGROUP };\n}\n\nfunction exportTalkgroupError() {\n return { type: types.EXPORT_ERROR_TALKGROUP };\n}\n\n\nfunction beginFetchTalkgroup() {\n return { type: types.FETCH_TALKGROUP };\n}\n\nfunction fetchTalkgroupSuccess(data) {\n return { type: types.FETCH_SUCCESS_TALKGROUP,\n data };\n}\n\nfunction fetchTalkgroupError(data) {\n return { type: types.FETCH_ERROR_TALKGROUP,\n data };\n}\n\n\nfunction makeUserRequest(method, data, api) {\n // returns a Promise\n return axios({\n method: method,\n url: api,\n data: data\n });\n}\n\nexport function changeUrl(url) {\n return dispatch => {\n dispatch(push(url));\n };\n}\n\n\n// https://stackoverflow.com/questions/41878838/how-do-i-set-multipart-in-axios-with-react\n\n\n\nfunction shouldFetchTalkgroups(state, shortName) {\n if (!state.talkgroup.items.hasOwnProperty(shortName)) {\n return true\n } else if (state.talkgroup.isWaiting) {\n return false\n } else {\n return false\n }\n}\n\nexport function fetchTalkgroups(shortName) {\n return (dispatch, getState) => {\n if (shouldFetchTalkgroups(getState(), shortName)) {\n dispatch(beginFetchTalkgroup());\n\n return axios\n .get(process.env.REACT_APP_BACKEND_SERVER + \"/\" + shortName + \"/talkgroups\")\n .then(response => {\n if (response.data) {\n var data = {shortName: shortName, talkgroups: response.data.talkgroups}\n dispatch(fetchTalkgroupSuccess( data));\n } else {\n dispatch(fetchTalkgroupError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-reducer.js",["136","137"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/MediaPlayer.js",["138","139"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/GroupModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-actions.js",[],["140","141"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/reducers.js",[],["142","143"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/SystemCard.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystems.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallItem.js",["144","145"],{"ruleId":"146","severity":1,"message":"147","line":12,"column":3,"nodeType":"148","messageId":"149","endLine":15,"endColumn":4},{"ruleId":"150","severity":1,"message":"151","line":33,"column":89,"nodeType":"152","messageId":"153","endLine":33,"endColumn":91},{"ruleId":"154","replacedBy":"155"},{"ruleId":"156","replacedBy":"157"},{"ruleId":"158","severity":1,"message":"159","line":6,"column":7,"nodeType":"160","messageId":"161","endLine":6,"endColumn":30},{"ruleId":"158","severity":1,"message":"162","line":22,"column":10,"nodeType":"160","messageId":"161","endLine":22,"endColumn":21},{"ruleId":"163","severity":1,"message":"164","line":76,"column":3,"nodeType":"165","messageId":"166","endLine":82,"endColumn":4},{"ruleId":"158","severity":1,"message":"167","line":3,"column":8,"nodeType":"160","messageId":"161","endLine":3,"endColumn":16},{"ruleId":"158","severity":1,"message":"168","line":18,"column":3,"nodeType":"160","messageId":"161","endLine":18,"endColumn":8},{"ruleId":"169","severity":1,"message":"170","line":123,"column":5,"nodeType":"171","messageId":"172","endLine":132,"endColumn":6},{"ruleId":"173","severity":2,"message":"174","line":137,"column":5,"nodeType":"160","messageId":"175","endLine":137,"endColumn":11},{"ruleId":"173","severity":2,"message":"174","line":138,"column":5,"nodeType":"160","messageId":"175","endLine":138,"endColumn":11},{"ruleId":"173","severity":2,"message":"174","line":141,"column":5,"nodeType":"160","messageId":"175","endLine":141,"endColumn":11},{"ruleId":"173","severity":2,"message":"174","line":142,"column":5,"nodeType":"160","messageId":"175","endLine":142,"endColumn":11},{"ruleId":"173","severity":2,"message":"174","line":151,"column":5,"nodeType":"160","messageId":"175","endLine":151,"endColumn":11},{"ruleId":"173","severity":2,"message":"174","line":160,"column":5,"nodeType":"160","messageId":"175","endLine":160,"endColumn":11},{"ruleId":"169","severity":1,"message":"170","line":177,"column":5,"nodeType":"171","messageId":"172","endLine":185,"endColumn":6},{"ruleId":"150","severity":1,"message":"176","line":187,"column":24,"nodeType":"152","messageId":"153","endLine":187,"endColumn":26},{"ruleId":"150","severity":1,"message":"176","line":194,"column":24,"nodeType":"152","messageId":"153","endLine":194,"endColumn":26},{"ruleId":"158","severity":1,"message":"177","line":276,"column":15,"nodeType":"160","messageId":"161","endLine":276,"endColumn":19},{"ruleId":"150","severity":1,"message":"151","line":307,"column":38,"nodeType":"152","messageId":"153","endLine":307,"endColumn":40},{"ruleId":"150","severity":1,"message":"151","line":341,"column":30,"nodeType":"152","messageId":"153","endLine":341,"endColumn":32},{"ruleId":"150","severity":1,"message":"151","line":349,"column":30,"nodeType":"152","messageId":"153","endLine":349,"endColumn":32},{"ruleId":"169","severity":1,"message":"170","line":392,"column":7,"nodeType":"171","messageId":"172","endLine":402,"endColumn":8},{"ruleId":"158","severity":1,"message":"178","line":448,"column":12,"nodeType":"160","messageId":"161","endLine":448,"endColumn":26},{"ruleId":"169","severity":1,"message":"170","line":465,"column":5,"nodeType":"171","messageId":"172","endLine":472,"endColumn":6},{"ruleId":"158","severity":1,"message":"179","line":6,"column":3,"nodeType":"160","messageId":"161","endLine":6,"endColumn":11},{"ruleId":"169","severity":1,"message":"170","line":39,"column":3,"nodeType":"171","messageId":"172","endLine":60,"endColumn":4},{"ruleId":"150","severity":1,"message":"176","line":61,"column":32,"nodeType":"152","messageId":"153","endLine":61,"endColumn":34},{"ruleId":"180","severity":1,"message":"181","line":93,"column":13,"nodeType":"160","messageId":"182","endLine":93,"endColumn":16},{"ruleId":"183","severity":1,"message":"184","line":1,"column":1,"nodeType":"185","endLine":11,"endColumn":2},{"ruleId":"158","severity":1,"message":"186","line":6,"column":3,"nodeType":"160","messageId":"161","endLine":6,"endColumn":9},{"ruleId":"154","replacedBy":"187"},{"ruleId":"156","replacedBy":"188"},{"ruleId":"158","severity":1,"message":"189","line":7,"column":10,"nodeType":"160","messageId":"161","endLine":7,"endColumn":30},{"ruleId":"158","severity":1,"message":"190","line":11,"column":10,"nodeType":"160","messageId":"161","endLine":11,"endColumn":32},{"ruleId":"158","severity":1,"message":"191","line":18,"column":10,"nodeType":"160","messageId":"161","endLine":18,"endColumn":30},{"ruleId":"158","severity":1,"message":"192","line":25,"column":10,"nodeType":"160","messageId":"161","endLine":25,"endColumn":30},{"ruleId":"158","severity":1,"message":"193","line":29,"column":10,"nodeType":"160","messageId":"161","endLine":29,"endColumn":32},{"ruleId":"158","severity":1,"message":"194","line":33,"column":10,"nodeType":"160","messageId":"161","endLine":33,"endColumn":30},{"ruleId":"158","severity":1,"message":"195","line":53,"column":10,"nodeType":"160","messageId":"161","endLine":53,"endColumn":25},{"ruleId":"158","severity":1,"message":"196","line":7,"column":10,"nodeType":"160","messageId":"161","endLine":7,"endColumn":22},{"ruleId":"158","severity":1,"message":"197","line":13,"column":10,"nodeType":"160","messageId":"161","endLine":13,"endColumn":27},{"ruleId":"150","severity":1,"message":"176","line":69,"column":41,"nodeType":"152","messageId":"153","endLine":69,"endColumn":43},{"ruleId":"158","severity":1,"message":"198","line":89,"column":5,"nodeType":"160","messageId":"161","endLine":89,"endColumn":16},{"ruleId":"154","replacedBy":"199"},{"ruleId":"156","replacedBy":"200"},{"ruleId":"154","replacedBy":"201"},{"ruleId":"156","replacedBy":"202"},{"ruleId":"158","severity":1,"message":"203","line":41,"column":18,"nodeType":"160","messageId":"161","endLine":41,"endColumn":21},{"ruleId":"158","severity":1,"message":"204","line":74,"column":9,"nodeType":"160","messageId":"161","endLine":74,"endColumn":16},"no-useless-constructor","Useless constructor.","MethodDefinition","noUselessConstructor","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","no-native-reassign",["205"],"no-negated-in-lhs",["206"],"no-unused-vars","'FETCH_SUCCESS_STATISTIC' is assigned a value but never used.","Identifier","unusedVar","'prependCall' is defined but never used.","no-unreachable","Unreachable code.","IfStatement","unreachableCode","'CallItem' is defined but never used.","'Table' is defined but never used.","default-case","Expected a default case.","SwitchStatement","missingDefaultCase","no-undef","'socket' is not defined.","undef","Expected '!==' and instead saw '!='.","'refs' is assigned a value but never used.","'sidebarVisible' is assigned a value but never used.","'Dropdown' is defined but never used.","no-redeclare","'obj' is already defined.","redeclared","import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration","'Header' is defined but never used.",["205"],["206"],"'beginImportTalkgroup' is defined but never used.","'importTalkgroupSuccess' is defined but never used.","'importTalkgroupError' is defined but never used.","'beginExportTalkgroup' is defined but never used.","'exportTalkgroupSuccess' is defined but never used.","'exportTalkgroupError' is defined but never used.","'makeUserRequest' is defined but never used.","'updateObject' is defined but never used.","'updateItemInArray' is defined but never used.","'playEnabled' is assigned a value but never used.",["205"],["206"],["205"],["206"],"'src' is assigned a value but never used.","'current' is assigned a value but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file +[{"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/ListCalls.js":"1","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-actions.js":"2","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystemsContainer.js":"3","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallPlayer.js":"4","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-constants.js":"5","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/SupportModal.js":"6","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/FilterModal.js":"7","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/query-string.js":"8","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModal.js":"9","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/configureStore.js":"10","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-actions.js":"11","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-reducer.js":"12","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/MediaPlayer.js":"13","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/GroupModal.js":"14","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-actions.js":"15","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/reducers.js":"16","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/SystemCard.js":"17","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModalContainer.js":"18","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystems.js":"19","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-constants.js":"20","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallItem.js":"21","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/system-actions.js":"22","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-reducer.js":"23","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Main/MainContainer.js":"24","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-reducer.js":"25","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-constants.js":"26"},{"size":2078,"mtime":1613098367816,"results":"27","hashOfConfig":"28"},{"size":9179,"mtime":1609597700043,"results":"29","hashOfConfig":"28"},{"size":277,"mtime":1545362103911,"results":"30","hashOfConfig":"28"},{"size":18569,"mtime":1613012570071,"results":"31","hashOfConfig":"28"},{"size":151,"mtime":1545362103908,"results":"32","hashOfConfig":"28"},{"size":1313,"mtime":1610678127937,"results":"33","hashOfConfig":"28"},{"size":4455,"mtime":1612233941171,"results":"34","hashOfConfig":"28"},{"size":362,"mtime":1610678313030,"results":"35","hashOfConfig":"28"},{"size":1778,"mtime":1609597248589,"results":"36","hashOfConfig":"28"},{"size":854,"mtime":1611803272298,"results":"37","hashOfConfig":"28"},{"size":2433,"mtime":1609597717050,"results":"38","hashOfConfig":"28"},{"size":1395,"mtime":1545362103908,"results":"39","hashOfConfig":"28"},{"size":4252,"mtime":1612317546527,"results":"40","hashOfConfig":"28"},{"size":2023,"mtime":1612233431556,"results":"41","hashOfConfig":"28"},{"size":1747,"mtime":1609597708479,"results":"42","hashOfConfig":"28"},{"size":595,"mtime":1609596047661,"results":"43","hashOfConfig":"28"},{"size":2045,"mtime":1609520570000,"results":"44","hashOfConfig":"28"},{"size":763,"mtime":1545362103896,"results":"45","hashOfConfig":"28"},{"size":1547,"mtime":1609520315634,"results":"46","hashOfConfig":"28"},{"size":537,"mtime":1545362103916,"results":"47","hashOfConfig":"28"},{"size":2909,"mtime":1613011408389,"results":"48","hashOfConfig":"28"},{"size":1575,"mtime":1610678224214,"results":"49","hashOfConfig":"28"},{"size":1045,"mtime":1610678295131,"results":"50","hashOfConfig":"28"},{"size":264,"mtime":1545362103910,"results":"51","hashOfConfig":"28"},{"size":7019,"mtime":1560857753468,"results":"52","hashOfConfig":"28"},{"size":1109,"mtime":1560828045933,"results":"53","hashOfConfig":"28"},{"filePath":"54","messages":"55","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"1du4mf8",{"filePath":"56","messages":"57","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"58","usedDeprecatedRules":"59"},{"filePath":"60","messages":"61","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"62"},{"filePath":"63","messages":"64","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"65","messages":"66","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"67"},{"filePath":"68","messages":"69","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"70","messages":"71","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"72","messages":"73","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"74","usedDeprecatedRules":"75"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"78"},{"filePath":"79","messages":"80","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"81","messages":"82","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"83","usedDeprecatedRules":"59"},{"filePath":"84","messages":"85","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"86","messages":"87","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"88","messages":"89","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"90","messages":"91","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"92"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"96","messages":"97","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"98","messages":"99","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"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":"62"},{"filePath":"104","messages":"105","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"106"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"67"},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"95"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"113","messages":"114","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"115","usedDeprecatedRules":"95"},{"filePath":"116","messages":"117","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/ListCalls.js",["118"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-actions.js",["119","120","121"],"import axios from \"axios\";\n\nimport * as types from \"./call-constants\";\nimport { push } from 'connected-react-router';\n\nconst FETCH_SUCCESS_STATISTIC = \"FETCH_SUCCESS_STATISTIC\"\n\nfunction beginFetchCallInfo() {\n return { type: types.FETCH_CALL_INFO };\n}\n\nfunction fetchCallInfoSuccess(data) {\n return { type: types.FETCH_SUCCESS_CALL_INFO,\n data };\n}\n\nfunction fetchCallInfoError(data) {\n return { type: types.FETCH_ERROR_CALL_INFO,\n data };\n}\n\nfunction prependCall() {\n return { type: types.PREPEND_CALL };\n}\n\nfunction beginAddStar() {\n return { type: types.ADD_STAR };\n}\n\nfunction addStarSuccess(data) {\n return { type: types.ADD_STAR_SUCCESS, data };\n}\n\nfunction addStarError(data) {\n return { type: types.ADD_STAR_ERROR, data };\n}\n\nfunction beginFetchCall() {\n return { type: types.FETCH_CALL };\n}\n\nfunction fetchCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_CALL,\n data };\n}\n\n\n\nfunction fetchOlderCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_OLDER_CALL,\n data };\n}\n\nfunction fetchNewerCallSuccess(data) {\n return { type: types.FETCH_SUCCESS_NEWER_CALL,\n data };\n}\n\nfunction fetchCallError(data) {\n return { type: types.FETCH_ERROR_CALL,\n data };\n}\n\n\nexport function changeUrl(url) {\n return dispatch => {\n dispatch(push(url));\n };\n}\n\n// Example of an Async Action Creator\n// http://redux.js.org/docs/advanced/AsyncActions.html\n\nfunction shouldFetchCalls(state, subreddit) {\n return true;\n if ((!state.call.items) || (state.call.items.length <1)) {\n return true\n } else if (state.call.isWaiting) {\n return false\n } else {\n return false\n }\n}\n\n\n\n\nfunction buildUrlParams(a) {\n return Object.keys(a).map(function(k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(a[k])\n }).join('&')\n}\n\nfunction buildCallUrl(state, date, direction) {\n var params = {};\n var url = \"\";\n\n\n if ((typeof direction === 'string') && (typeof date === 'number')) {\n url = url + '/' + direction;\n params[\"time\"] = date;\n } else {\n if (state.call.filterDate){\n url = url + '/older'\n params[\"time\"] = state.call.filterDate;\n }\n }\n if (state.call.filterStarred) {\n params[\"filter-starred\"] = true;\n }\n switch(state.call.filterType) {\n case 1:\n params[\"filter-type\"] = \"group\";\n params[\"filter-code\"] = state.call.filterGroupId;\n break;\n case 2:\n params[\"filter-type\"] = \"talkgroup\";\n params[\"filter-code\"] = state.call.filterTalkgroups;\n break;\n default:\n case 0:\n }\n/*\n\n if (this.filterCode != \"\") {\n params[\"filter-code\"] = this.filterCode;\n }\n\n if (this.filterType == this.FilterType.Group) {\n params[\"filter-type\"] = \"group\";\n params[\"filter-name\"] = this.filterName;\n }\n\n if (this.filterType == this.FilterType.Talkgroup) {\n params[\"filter-type\"] = \"talkgroup\";\n }\n\n if (this.filterType == this.FilterType.Unit) {\n params[\"filter-type\"] = \"unit\";\n }\n\n*/\n // url = startUp.backend_server + \"/\" + startUp.shortName.toLowerCase() + \"/calls\" + url + '?' + buildUrlParams(params);\n url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName + \"/calls\" + url + '?' + buildUrlParams(params);\n console.log(\"Trying to fetch data from this url: \" + url);\n return url;\n}\n\nexport function fetchNewerCalls( timestamp) {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url = buildCallUrl(state, timestamp, \"newer\")\n return axios\n .get(url)\n .then(response => {\n if ((response.data) && (response.data.calls.length >0)) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchNewerCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\n\nexport function fetchOlderCalls( timestamp) {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url = buildCallUrl(state, timestamp, \"older\")\n return axios\n .get(url)\n .then(response => {\n if (response.data) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchOlderCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\n\nexport function addStar( callId) {\n return (dispatch, getState) => {\n const state = getState();\n dispatch(beginAddStar());\n\n const url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName.toLowerCase() + \"/star/\" + callId\n return axios\n .post(url,{}, {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }).then(response => {\n if (response.data.success) {\n dispatch(addStarSuccess(response.data.call));\n } else {\n dispatch(addStarError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n\n\n\nexport function fetchCallInfo( callId) {\n return (dispatch, getState) => {\n const state = getState();\n dispatch(beginFetchCallInfo());\n\n const url = process.env.REACT_APP_BACKEND_SERVER + \"/\" + state.call.shortName.toLowerCase() + \"/call/\" + callId\n return axios\n .get(url)\n .then(response => {\n if (response.data.success) {\n dispatch(fetchCallInfoSuccess(response.data.call));\n } else {\n dispatch(fetchCallInfoError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n\nexport function fetchCalls() {\n return (dispatch, getState) => {\n const state = getState();\n if (shouldFetchCalls(state)) {\n dispatch(beginFetchCall());\n const url=buildCallUrl(state);\n return axios\n .get(url)\n .then(response => {\n if (response.data) {\n // check to make sure you actually got some calls back.\n if (response.data.calls.length > 0) {\n var data = {shortName: state.call.shortName, calls: response.data.calls}\n dispatch(fetchCallSuccess(data));\n } else {\n dispatch(fetchCallError());\n }\n } else {\n dispatch(fetchCallError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n\nexport function addCall(call) {\n return (dispatch, getState) => {\n dispatch({ type: types.UPSERT_CALL, data: call});\n };\n}\n\nexport function setStarred(starred) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_STARRED_FILTER, data: starred});\n };\n}\n\nexport function setLive(live) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_LIVE, data: live});\n };\n}\n\nexport function setCurrentCallId(callId) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_CURRENT_CALL_ID, data: callId});\n };\n}\n\n// should be as a unix timestamp\nexport function setDateFilter(date) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_DATE_FILTER, date: date});\n };\n}\n\nexport function setAllFilter() {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_ALL_FILTER});\n };\n}\n\nexport function setTalkgroupFilter(tgs) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_TALKGROUP_FILTER, talkgroups: tgs});\n };\n}\n\nexport function setGroupFilter(groupId) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_GROUP_FILTER, groupId: groupId});\n };\n}\n\nexport function setShortName(shortName) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_SHORT_NAME, data: shortName});\n };\n}\n\nexport function setFilter(filter) {\n return (dispatch, getState) => {\n dispatch({ type: types.SET_FILTER, data: filter});\n };\n}\n",["122","123"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystemsContainer.js",[],["124","125"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallPlayer.js",["126","127"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-constants.js",[],["128","129"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/SupportModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/FilterModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/query-string.js",["130"],"export default {\n parse: function parse(queryString) {\n var query = {};\n var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i].split('=');\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');\n }\n return query;\n }\n}\n",["131","132"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModal.js",["133"],"import React, { Component } from \"react\";\nimport {\n Modal,\n Button,\n Icon,\n Header\n} from \"semantic-ui-react\";\nimport \"./CalendarModal.css\";\nimport DatePicker from 'react-datepicker';\nimport { subDays } from 'date-fns'\nimport 'react-datepicker/dist/react-datepicker.css';\n\nclass CalendarModal extends Component {\n constructor(props) {\n super(props)\n this.handleDateChange = this.handleDateChange.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleClose = this.handleClose.bind(this);\n\n this.state = {\n open: false,\n startDate: new Date()\n }\n}\n\nhandleDateChange = (date) => {\n this.setState({\n startDate: date\n });\n }\n\nhandleClose = () => this.props.onClose(false);\nhandleDone(event) {\n this.props.callActions.setDateFilter(this.state.startDate.getTime());\n this.props.onClose(true);\n}\n\n\n render() {\n \n return (\n\n \n Select a Date & Time\n \n \n \n \n \n \n \n \n \n\n )\n }\n}\n\nexport default CalendarModal;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/configureStore.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-actions.js",["134","135","136","137","138","139","140"],"import axios from 'axios';\n//import { browserHistory } from \"react-router\"\nimport * as types from \"./talkgroup-constants\";\nimport { push } from 'connected-react-router';\n\n// \"Log In\" action creators\nfunction beginImportTalkgroup() {\n return { type: types.IMPORT_TALKGROUP };\n}\n\nfunction importTalkgroupSuccess(data) {\n return {\n type: types.IMPORT_SUCCESS_TALKGROUP,\n data\n };\n}\n\nfunction importTalkgroupError(data) {\n return {\n type: types.IMPORT_ERROR_TALKGROUP,\n data\n };\n}\n\nfunction beginExportTalkgroup() {\n return { type: types.EXPORT_TALKGROUP };\n}\n\nfunction exportTalkgroupSuccess() {\n return { type: types.EXPORT_SUCCESS_TALKGROUP };\n}\n\nfunction exportTalkgroupError() {\n return { type: types.EXPORT_ERROR_TALKGROUP };\n}\n\n\nfunction beginFetchTalkgroup() {\n return { type: types.FETCH_TALKGROUP };\n}\n\nfunction fetchTalkgroupSuccess(data) {\n return { type: types.FETCH_SUCCESS_TALKGROUP,\n data };\n}\n\nfunction fetchTalkgroupError(data) {\n return { type: types.FETCH_ERROR_TALKGROUP,\n data };\n}\n\n\nfunction makeUserRequest(method, data, api) {\n // returns a Promise\n return axios({\n method: method,\n url: api,\n data: data\n });\n}\n\nexport function changeUrl(url) {\n return dispatch => {\n dispatch(push(url));\n };\n}\n\n\n// https://stackoverflow.com/questions/41878838/how-do-i-set-multipart-in-axios-with-react\n\n\n\nfunction shouldFetchTalkgroups(state, shortName) {\n if (!state.talkgroup.items.hasOwnProperty(shortName)) {\n return true\n } else if (state.talkgroup.isWaiting) {\n return false\n } else {\n return false\n }\n}\n\nexport function fetchTalkgroups(shortName) {\n return (dispatch, getState) => {\n if (shouldFetchTalkgroups(getState(), shortName)) {\n dispatch(beginFetchTalkgroup());\n\n return axios\n .get(process.env.REACT_APP_BACKEND_SERVER + \"/\" + shortName + \"/talkgroups\")\n .then(response => {\n if (response.data) {\n var data = {shortName: shortName, talkgroups: response.data.talkgroups}\n dispatch(fetchTalkgroupSuccess( data));\n } else {\n dispatch(fetchTalkgroupError());\n let registerMessage = response.data.message;\n return registerMessage;\n }\n })\n .catch(response => {\n if (response instanceof Error) {\n // Something happened in setting up the request that triggered an Error\n console.log(\"Error\", response.message);\n }\n });\n };\n};\n}\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-reducer.js",["141","142"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/MediaPlayer.js",["143","144"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/GroupModal.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Group/group-actions.js",[],["145","146"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/redux-router/reducers.js",[],["147","148"],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/SystemCard.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CalendarModalContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/ListSystems.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-constants.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/CallItem.js",["149"],"\nimport React, { Component } from \"react\";\nimport {\n Table,\n Icon,\n Label\n} from \"semantic-ui-react\";\nimport { connect } from \"react-redux\"\nimport { bindActionCreators } from 'redux'\nimport * as callActionCreators from \"./call-actions\"\n\n\nfunction mapStateToProps(state, props) {\n return {\n shortName: props.shortName\n\n\t}\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n callActions: bindActionCreators(callActionCreators, dispatch)\n }\n}\n\n\nclass CallItem extends Component {\nconstructor(props) {\n super(props);\n this.hideStar = this.hideStar.bind(this);\n this.showStar = this.showStar.bind(this);\n this.addStar = this.addStar.bind(this);\n this.state = {\n starVisible: false,\n starClicked: false\n }\n}\nsourceString(call) {\n var srcString = \"\";\n if (call.srcList) {\n for (var src in call.srcList) {\n /* srcNum = call.srcList[src].src;\n if (sources.hasOwnProperty(srcNum)) {\n srcString = srcString + sources[srcNum].codeName + \", \";\n }*/\n }\n }\n\n return srcString;\n}\n\ncomponentDidUpdate(){\n if (this.props.activeCall) {\n console.log(\"Active call mounted\")\n }\n}\naddStar(e) {\n e.preventDefault();\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n if (!this.state.starClicked) {\n \n this.props.callActions.addStar(this.props.call._id);\n this.setState({starClicked: true});\n }\n}\n\nhideStar() {\n this.setState({ starVisible: false })\n}\n\nshowStar() {\n this.setState({ starVisible: true })\n}\n\nrender() {\n const call = this.props.call;\n const time = new Date(call.time);\n var rowSelected={};\n let starButton;\n var starClickable = {};\n if (!this.state.starClicked) {\n starClickable = {link: true };\n }\n if (!call.star && this.state.starVisible) {\n starButton = \n }\n\n if (call.star) {\n starButton = \n }\n if (call.star && call.star > 1) {\n starButton = (\n \n \n )\n }\n\n if (this.props.activeCall) {\n rowSelected={positive: true}\n }\n var talkgroup;\n if ((typeof this.props.talkgroups == 'undefined') || (typeof this.props.talkgroups[call.talkgroupNum] == 'undefined')) {\n talkgroup = call.talkgroupNum;\n } else {\n talkgroup = this.props.talkgroups[call.talkgroupNum].description;\n }\n return (\n this.props.onClick({call: call}, e)} {...rowSelected}>\n {call.len} \n {talkgroup} \n {time.toLocaleTimeString()} \n {starButton}\n \n\n\n );\n}\n}\n\nexport default connect(\n\tmapStateToProps,\n\tmapDispatchToProps\n)(CallItem)\n\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/System/system-actions.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Talkgroups/talkgroup-reducer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Main/MainContainer.js",[],"/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-reducer.js",["150","151"],"import {\n FETCH_CALL_INFO,\n FETCH_SUCCESS_CALL_INFO,\n FETCH_ERROR_CALL_INFO,\n FETCH_CALL,\n PREPEND_CALL,\n UPSERT_CALL,\n FETCH_SUCCESS_CALL,\n FETCH_SUCCESS_OLDER_CALL,\n FETCH_SUCCESS_NEWER_CALL,\n FETCH_ERROR_CALL,\n SET_SHORT_NAME,\n SET_ALL_FILTER,\n SET_GROUP_FILTER,\n SET_TALKGROUP_FILTER,\n SET_DATE_FILTER,\n SET_STARRED_FILTER,\n SET_FILTER,\n SET_CURRENT_CALL_ID,\n SET_LIVE,\n ADD_STAR_SUCCESS\n} from \"./call-constants\";\n\nfunction updateObject(oldObject, newValues) {\n // Encapsulate the idea of passing a new object as the first parameter\n // to Object.assign to ensure we correctly copy data instead of mutating\n return Object.assign({}, oldObject, newValues);\n}\n\nfunction updateCallInItems(calls, action) {\nreturn calls.map( (item) => {\n if (item._id !== action.data._id) {\n // This isn't the item we care about - keep it as-is\n return item;\n }\n\n // Otherwise, this is the one we want - return an updated value\n return {\n ...action.data\n };\n });\n}\n/*\nfunction updateObjectInArray(array, action) {\n return array.map((item, index) => {\n if (index !== action.index) {\n // This isn't the item we care about - keep it as-is\n return item\n }\n\n // Otherwise, this is the one we want - return an updated value\n return {\n ...item,\n ...action.item\n }\n })\n}\n\nfunction updateObjectInArray(array, shortName, updatedItem) {\n return array.map( item => {\n if(item.shortName !== shortName) {\n // This isn't the item we care about - keep it as-is\n return item;\n }\n\n // Otherwise, this is the one we want - return an updated value\n return {\n ...item,\n ...updatedItem\n };\n });\n}\n*/\nconst now = new Date();\nconst call = (\n state = {\n isWaiting: false,\n shortName: \"\",\n byId: {},\n allIds: [],\n oldestCallTime: now,\n newestCallTime: now,\n filterType: 0,\n filterTalkgroups: [],\n filterGroupId: false,\n filterDate: false,\n filterStarred: false,\n currentCallId: false,\n live: false\n },\n action\n) => {\n switch (action.type) {\n\n case SET_CURRENT_CALL_ID:\n return Object.assign({}, state, {currentCallId: action.data});\n \n case SET_FILTER:\n {\n var filter={};\n filter.live = !action.data.live ? state.live : action.data.live;\n filter.filterStarred = !action.data.filterStarred ? false : action.data.filterStarred;\n filter.filterType = !action.data.filterType ? 0 : action.data.filterType;\n filter.filterTalkgroups = !action.data.filterTalkgroups ? [] : action.data.filterTalkgroups;\n filter.filterGroupId = !action.data.filterGroupId ? false : action.data.filterGroupId;\n filter.filterDate = !action.data.filterDate ? 0 : action.data.filterDate;\n return Object.assign({}, state, {\n live: action.data.live,\n filterType: action.data.filterType,\n filterTalkgroups: action.data.filterTalkgroups,\n filterGroupId: action.data.filterGroupId,\n filterDate: action.data.filterDate,\n filterStarred: action.data.filterStarred\n });\n }\n\n case SET_LIVE:\n return Object.assign({}, state, {live: action.data});\n \n case SET_SHORT_NAME:\n return Object.assign({}, state, {shortName: action.data});\n\n case SET_DATE_FILTER:\n return Object.assign({}, state, {filterDate: action.date});\n\n case SET_STARRED_FILTER:\n return Object.assign({}, state, {filterStarred: action.data});\n\n case SET_ALL_FILTER:\n return Object.assign({}, state, {filterType: 0, filterTalkgroups:[], filterGroupId: false});\n\n case SET_GROUP_FILTER:\n return Object.assign({}, state, {filterType: 1, filterTalkgroups:[], filterGroupId: action.groupId});\n\n case SET_TALKGROUP_FILTER:\n return Object.assign({}, state, {filterType: 2, filterTalkgroups: action.talkgroups, filterGroupId: false});\n\n case FETCH_CALL_INFO:\n case FETCH_CALL:\n return Object.assign({}, state, { isWaiting: true});\n\n case FETCH_SUCCESS_CALL_INFO:\n return Object.assign({}, state, {\n byId: {...state.byId, [action.data._id]: action.data },\n isWaiting: false\n\n });\n\n case ADD_STAR_SUCCESS:\n return Object.assign({}, state,{\n byId: {...state.byId, [action.data._id]: action.data },\n isWaiting: false\n\n });\n // This will set the items to the rx data\n case FETCH_SUCCESS_CALL:\n {\n const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {});\n const allIds = action.data.calls.map(call => call._id);\n return Object.assign({}, state, {\n isWaiting: false,\n shortName: action.data.shortName,\n newestCallTime: new Date(action.data.calls[0].time),\n oldestCallTime: new Date(action.data.calls[action.data.calls.length-1].time),\n byId: { ...byId},\n allIds: [...allIds]\n });\n }\n\n case UPSERT_CALL:\n if (typeof state.byId[action.data._id] !== \"undefined\") {\n return Object.assign({}, state, {\n byId: {...state.byId, [action.data._id]: action.data },\n });\n } else {\n return Object.assign({}, state, {\n newestCallTime: new Date(action.data.time),\n byId: {[action.data._id]: action.data, ...state.byId},\n allIds: [action.data._id, ...state.allIds]\n }); \n }\n\n case PREPEND_CALL:\n return Object.assign({}, state, {\n isWaiting: false,\n newestCallTime: new Date(action.data.time),\n byId: {[action.data._id]: action.data, ...state.byId},\n allIds: [action.data._id, ...state.allIds]\n });\n\n// This will add the array of Calls in the data to the beginning of the existing array of Calls\n case FETCH_SUCCESS_NEWER_CALL:\n const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {});\n const allIds = action.data.calls.map(call => call._id).reverse();\n return Object.assign({}, state, {\n isWaiting: false,\n shortName: action.data.shortName,\n newestCallTime: new Date(action.data.calls[action.data.calls.length-1].time),\n byId: {...state.byId, ...byId},\n allIds: [...allIds, ...state.allIds]\n });\n\n// This will add the array of Calls in the data to the end of the existing array of Calls\n case FETCH_SUCCESS_OLDER_CALL:\n {\n const byId = action.data.calls.reduce((acc, call) => ({ ...acc, [call._id]: call }), {});\n const allIds = action.data.calls.map(call => call._id);\n return Object.assign({}, state, {\n isWaiting: false,\n shortName: action.data.shortName,\n oldestCallTime: new Date(action.data.calls[action.data.calls.length-1].time),\n byId: {...state.byId, ...byId},\n allIds: [ ...state.allIds, ...allIds]\n });\n }\n case FETCH_ERROR_CALL_INFO:\n case FETCH_ERROR_CALL:\n return Object.assign({}, state, {\n isWaiting: false\n });\n\n default:\n return state;\n }\n};\n\nexport default call;\n","/Users/luke/Projects/OpenMHz/trunk-server-public/frontend/src/Call/call-constants.js",[],{"ruleId":"152","severity":1,"message":"153","line":23,"column":84,"nodeType":"154","messageId":"155","endLine":23,"endColumn":86},{"ruleId":"156","severity":1,"message":"157","line":6,"column":7,"nodeType":"158","messageId":"159","endLine":6,"endColumn":30},{"ruleId":"156","severity":1,"message":"160","line":22,"column":10,"nodeType":"158","messageId":"159","endLine":22,"endColumn":21},{"ruleId":"161","severity":1,"message":"162","line":76,"column":3,"nodeType":"163","messageId":"164","endLine":82,"endColumn":4},{"ruleId":"165","replacedBy":"166"},{"ruleId":"167","replacedBy":"168"},{"ruleId":"165","replacedBy":"169"},{"ruleId":"167","replacedBy":"170"},{"ruleId":"156","severity":1,"message":"171","line":277,"column":15,"nodeType":"158","messageId":"159","endLine":277,"endColumn":19},{"ruleId":"152","severity":1,"message":"153","line":438,"column":27,"nodeType":"154","messageId":"155","endLine":438,"endColumn":29},{"ruleId":"165","replacedBy":"172"},{"ruleId":"167","replacedBy":"173"},{"ruleId":"174","severity":1,"message":"175","line":1,"column":1,"nodeType":"176","endLine":11,"endColumn":2},{"ruleId":"165","replacedBy":"177"},{"ruleId":"167","replacedBy":"178"},{"ruleId":"156","severity":1,"message":"179","line":6,"column":3,"nodeType":"158","messageId":"159","endLine":6,"endColumn":9},{"ruleId":"156","severity":1,"message":"180","line":7,"column":10,"nodeType":"158","messageId":"159","endLine":7,"endColumn":30},{"ruleId":"156","severity":1,"message":"181","line":11,"column":10,"nodeType":"158","messageId":"159","endLine":11,"endColumn":32},{"ruleId":"156","severity":1,"message":"182","line":18,"column":10,"nodeType":"158","messageId":"159","endLine":18,"endColumn":30},{"ruleId":"156","severity":1,"message":"183","line":25,"column":10,"nodeType":"158","messageId":"159","endLine":25,"endColumn":30},{"ruleId":"156","severity":1,"message":"184","line":29,"column":10,"nodeType":"158","messageId":"159","endLine":29,"endColumn":32},{"ruleId":"156","severity":1,"message":"185","line":33,"column":10,"nodeType":"158","messageId":"159","endLine":33,"endColumn":30},{"ruleId":"156","severity":1,"message":"186","line":53,"column":10,"nodeType":"158","messageId":"159","endLine":53,"endColumn":25},{"ruleId":"156","severity":1,"message":"187","line":7,"column":10,"nodeType":"158","messageId":"159","endLine":7,"endColumn":22},{"ruleId":"156","severity":1,"message":"188","line":13,"column":10,"nodeType":"158","messageId":"159","endLine":13,"endColumn":27},{"ruleId":"189","severity":1,"message":"190","line":77,"column":3,"nodeType":"191","messageId":"155","endLine":78,"endColumn":4},{"ruleId":"156","severity":1,"message":"192","line":89,"column":5,"nodeType":"158","messageId":"159","endLine":89,"endColumn":16},{"ruleId":"165","replacedBy":"193"},{"ruleId":"167","replacedBy":"194"},{"ruleId":"165","replacedBy":"195"},{"ruleId":"167","replacedBy":"196"},{"ruleId":"156","severity":1,"message":"197","line":41,"column":18,"nodeType":"158","messageId":"159","endLine":41,"endColumn":21},{"ruleId":"156","severity":1,"message":"187","line":24,"column":10,"nodeType":"158","messageId":"159","endLine":24,"endColumn":22},{"ruleId":"156","severity":1,"message":"198","line":30,"column":10,"nodeType":"158","messageId":"159","endLine":30,"endColumn":27},"eqeqeq","Expected '!==' and instead saw '!='.","BinaryExpression","unexpected","no-unused-vars","'FETCH_SUCCESS_STATISTIC' is assigned a value but never used.","Identifier","unusedVar","'prependCall' is defined but never used.","no-unreachable","Unreachable code.","IfStatement","unreachableCode","no-native-reassign",["199"],"no-negated-in-lhs",["200"],["199"],["200"],"'refs' is assigned a value but never used.",["199"],["200"],"import/no-anonymous-default-export","Assign object to a variable before exporting as module default","ExportDefaultDeclaration",["199"],["200"],"'Header' is defined but never used.","'beginImportTalkgroup' is defined but never used.","'importTalkgroupSuccess' is defined but never used.","'importTalkgroupError' is defined but never used.","'beginExportTalkgroup' is defined but never used.","'exportTalkgroupSuccess' is defined but never used.","'exportTalkgroupError' is defined but never used.","'makeUserRequest' is defined but never used.","'updateObject' is defined but never used.","'updateItemInArray' is defined but never used.","no-dupe-class-members","Duplicate name 'componentDidUpdate'.","MethodDefinition","'playEnabled' is assigned a value but never used.",["199"],["200"],["199"],["200"],"'src' is assigned a value but never used.","'updateCallInItems' is defined but never used.","no-global-assign","no-unsafe-negation"] \ No newline at end of file diff --git a/frontend/public/index.html b/frontend/public/index.html index cf3a044..d0ae633 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -26,7 +26,7 @@ --> React Redux App diff --git a/frontend/src/Call/CallItem.js b/frontend/src/Call/CallItem.js index 3d5e4f6..7e67240 100644 --- a/frontend/src/Call/CallItem.js +++ b/frontend/src/Call/CallItem.js @@ -49,6 +49,11 @@ sourceString(call) { return srcString; } +componentDidUpdate(){ + if (this.props.activeCall) { + console.log("Active call mounted") + } +} addStar(e) { e.preventDefault(); e.stopPropagation(); @@ -103,7 +108,7 @@ render() { talkgroup = this.props.talkgroups[call.talkgroupNum].description; } return ( - this.props.onClick({call: call}, e)} {...rowSelected}> + this.props.onClick({call: call}, e)} {...rowSelected}> {call.len} {talkgroup} {time.toLocaleTimeString()} diff --git a/frontend/src/Call/CallPlayer.js b/frontend/src/Call/CallPlayer.js index 899aae2..ff302b8 100644 --- a/frontend/src/Call/CallPlayer.js +++ b/frontend/src/Call/CallPlayer.js @@ -48,12 +48,10 @@ class CallPlayer extends React.Component { this.handleCalendarClose = this.handleCalendarClose.bind(this); this.handleLiveToggle = this.handleLiveToggle.bind(this); this.getFilter = this.getFilter.bind(this); - this.callList = React.createRef(); this.socket = window.socket; this.setupSocket = this.setupSocket.bind(this); this.endSocket = this.endSocket.bind(this); this.changeUrl = this.changeUrl.bind(this); - this.currentCallRef = React.createRef(); this.audioRef = React.createRef(); this.state = { requestMessage: "", @@ -69,7 +67,6 @@ class CallPlayer extends React.Component { groupVisible: false, calendarVisible: false, supportVisible: false - } } @@ -124,11 +121,14 @@ class CallPlayer extends React.Component { filter.type = "group"; filter.code = this.props.filterGroupId; break; - default: case 2: filter.type = "talkgroup"; filter.code = this.props.filterTalkgroups; break; + default: + case 0: + filter.type = "all"; + filter.code = "" } filter.filterStarred = this.props.filterStarred; return filter; @@ -167,8 +167,6 @@ class CallPlayer extends React.Component { this.props.callActions.fetchCalls(); var filter = this.getFilter(); this.startSocket(this.props.shortName, filter.type, filter.code, filter.filterStarred); - //this.socket = setupSocket(this.addCall, this.props.shortName); - } } @@ -179,10 +177,13 @@ class CallPlayer extends React.Component { case 1: search = search + `filter-type=group&filter-code=${props.filterGroupId}`; break; - default: case 2: search = search + `filter-type=talkgroup&filter-code=${props.filterTalkgroups}`; break; + default: + case 0: + break; + } if (props.filterDate) { if (search.length!==1) { @@ -250,7 +251,6 @@ class CallPlayer extends React.Component { const nextCall = this.props.callsById[nextCallId]; var callUrl = nextCall.url; - this.setState({callUrl: callUrl, callId: nextCallId, sourceIndex: 0, isPlaying: true}, () => { audio.playSource(callUrl)}); //scrollToComponent(this.currentCallRef.current); this.props.callActions.fetchCallInfo( nextCallId); } else { @@ -294,7 +294,7 @@ class CallPlayer extends React.Component { this.props.callActions.setShortName(this.props.shortName); var filter = { filterDate: false, - filterType: "all", + filterType: 0, // this is "all" filterTalkgroups: [], filterGroupId: false, filterStarred: false, @@ -375,6 +375,7 @@ class CallPlayer extends React.Component { } return true } + componentWillUpdate(nextProps) { if (!this.props.groups && nextProps.groups) { if (!this.state.urlOptions && (nextProps.groups.length > 0 )) { @@ -384,8 +385,6 @@ class CallPlayer extends React.Component { } } - - const filterChanged = (nextProps.filterType !== this.props.filterType) || !this.compareArray(nextProps.filterTalkgroups, this.props.filterTalkgroups) || (nextProps.filterGroupId !== this.props.filterGroupId) || (nextProps.filterDate !== this.props.filterDate) || (nextProps.filterStarred !== this.props.filterStarred); if (filterChanged) { var typeString = 'all'; @@ -396,11 +395,15 @@ class CallPlayer extends React.Component { typeString = 'group'; filterCode = nextProps.filterGroupId; break; - default: case 2: typeString = 'talkgroup'; filterCode = nextProps.filterTalkgroups; break; + default: + case 0: + typeString = "all"; + filterCode = ''; + break; } this.updateUri(nextProps); @@ -423,17 +426,22 @@ class CallPlayer extends React.Component { this.setState({callUrl: call.url }); } } - } - componentDidUpdate() { + + componentDidUpdate(prevProps, prevState) { const {contextRef} = this.state //console.log( contextRef.clientHeight - this.prevHeight ); if (this.autoScroll) { this.autoScroll = false; window.scrollBy(0, contextRef.clientHeight - this.prevHeight); } - - } + if (this.state.callId != prevState.callId) { + /*this.currentCallRef.current.scrollIntoView({ + behavior: "smooth", + block: "start", + });*/ + } + } //https://stackoverflow.com/questions/36559661/how-can-i-dispatch-from-child-components-in-react-redux //https://stackoverflow.com/questions/42597602/react-onclick-pass-event-with-parameter @@ -467,10 +475,13 @@ class CallPlayer extends React.Component { case 1: filterLabel = "Group" break; - default: + case 2: filterLabel = "Talkgroups" break; + default: + case 0: + filterLabel = "All" } /* if (this.props.calls) { var callRows = calls.map((call) => @@ -484,10 +495,10 @@ class CallPlayer extends React.Component { - - - Home + onClick={this.handlePusherClick} duration={50} width='thin'> + + + Home Systems About @@ -535,7 +546,7 @@ class CallPlayer extends React.Component { - + diff --git a/frontend/src/Call/FilterModal.js b/frontend/src/Call/FilterModal.js index 0cbf72e..a8df8d3 100644 --- a/frontend/src/Call/FilterModal.js +++ b/frontend/src/Call/FilterModal.js @@ -66,11 +66,11 @@ handleDone(event) { } } -componentWillUpdate(nextProps) { +componentDidUpdate(prevProps) { - const filterChanged = ((nextProps.selectedTalkgroups !== this.props.selectedTalkgroups) || (nextProps.selectedGroup !== this.props.selectedGroup)); + const filterChanged = ((prevProps.selectedTalkgroups !== this.props.selectedTalkgroups) || (prevProps.selectedGroup !== this.props.selectedGroup)); if (filterChanged) { - this.setState({selectedTalkgroup: nextProps.selectedTalkgroups, selectedGroup: nextProps.selectedGroup, activeTab: nextProps.activeTab}); + this.setState({selectedTalkgroup: prevProps.selectedTalkgroups, selectedGroup: prevProps.selectedGroup, activeTab: prevProps.activeTab}); } } diff --git a/frontend/src/Call/GroupModal.js b/frontend/src/Call/GroupModal.js index 55c4c3b..328fbd5 100644 --- a/frontend/src/Call/GroupModal.js +++ b/frontend/src/Call/GroupModal.js @@ -35,11 +35,11 @@ handleDone(event) { } } -componentWillUpdate(nextProps) { +componentDidUpdate(prevProps) { - const filterChanged = (nextProps.selectedGroup !== this.props.selectedGroup); + const filterChanged = (prevProps.selectedGroup !== this.props.selectedGroup); if (filterChanged) { - this.setState({ selectedGroup: nextProps.selectedGroup}); + this.setState({ selectedGroup: this.props.selectedGroup}); } } diff --git a/frontend/src/Call/ListCalls.js b/frontend/src/Call/ListCalls.js index 2752668..5d931ec 100644 --- a/frontend/src/Call/ListCalls.js +++ b/frontend/src/Call/ListCalls.js @@ -3,19 +3,38 @@ import CallItem from "./CallItem"; import { Icon, Table, + Ref } from "semantic-ui-react"; import "./CallPlayer.css"; // ---------------------------------------------------- class ListCalls extends React.Component { + constructor(props) { + super(props); + this.handleCurrentCallRef = this.handleCurrentCallRef.bind(this); + //this.currentCallRef = React.createRef(); + } + handleCurrentCallRef(ref) { + this.currentCallRef = ref + console.log("Setting it") + } + componentDidUpdate(prevProps, prevState) { + if (this.currentCallRef && this.props.activeCallId && (this.props.activeCallId != prevProps.activeCallId)) { + this.currentCallRef.scrollIntoView({ + behavior: "smooth", + + block: "center", + }); + } + } //https://stackoverflow.com/questions/36559661/how-can-i-dispatch-from-child-components-in-react-redux //https://stackoverflow.com/questions/42597602/react-onclick-pass-event-with-parameter render() { return ( - +
Len @@ -24,9 +43,16 @@ class ListCalls extends React.Component { - - - {this.props.callsAllIds.map((callId, index) => )} + + + {this.props.callsAllIds.map((callId, index) => { + if (callId === this.props.activeCallId) { + return () + } else { + return + } + }) + }
diff --git a/frontend/src/Call/MediaPlayer.js b/frontend/src/Call/MediaPlayer.js index e1b1bf9..2610e06 100644 --- a/frontend/src/Call/MediaPlayer.js +++ b/frontend/src/Call/MediaPlayer.js @@ -65,8 +65,8 @@ class MediaPlayer extends React.Component { }); } -componentWillUpdate(nextProps) { - if (nextProps.call && (nextProps.call !== this.props.call)) { +componentDidUpdate(prevProps) { + if (this.props.call && (prevProps.call !== this.props.call)) { this.setState({ sourceIndex: 0 }); diff --git a/frontend/src/redux-router/configureStore.js b/frontend/src/redux-router/configureStore.js index 8b6f2c8..8982424 100644 --- a/frontend/src/redux-router/configureStore.js +++ b/frontend/src/redux-router/configureStore.js @@ -10,10 +10,11 @@ import thunk from 'redux-thunk'; export const history = createBrowserHistory() export default function configureStore(preloadedState) { + const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const store = createStore( createRootReducer(history), // root reducer with router state - preloadedState, - compose( + preloadedState, + composeEnhancers( applyMiddleware( routerMiddleware(history), // for dispatching history actions thunk, diff --git a/mongo/Dockerfile b/mongo/Dockerfile index e9d9424..cb6cf20 100644 --- a/mongo/Dockerfile +++ b/mongo/Dockerfile @@ -17,7 +17,6 @@ MAINTAINER Luke Berndt # Add main NGINX config RUN mkdir -p /app -ADD trim.js /app ADD totals.js /app ADD init_test_db.js /app ADD upgrade_db_admin.js /app diff --git a/mongo/trim.js b/mongo/trim.js deleted file mode 100644 index 9fa6725..0000000 --- a/mongo/trim.js +++ /dev/null @@ -1,25 +0,0 @@ -db = db.getMongo().getDB( "scanner" ); - -var bulkRemove = db.calls.initializeUnorderedBulkOp() -var short_date = new Date(); - -db.systems.find().forEach( - function(system){ - var date = new Date(); - var total =0; - if (system.planType == 10){ - date.setMonth(date.getDate() - 30); - - } else { - date.setDate(date.getDate() - 7); - } - print(system.shortName); - - bulkRemove.find({"time":{$lt: date}, "shortName": system.shortName}).remove(); - - -}); - -//bulkInsert.execute() -var results = bulkRemove.execute(); -print("Removed: " + results.nRemoved);