openc3-tool-dataextractor 5.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +727 -0
- data/README.md +28 -0
- data/Rakefile +40 -0
- data/plugin.txt +3 -0
- data/tools/dataextractor/index.html +4 -0
- data/tools/dataextractor/js/719.js +4 -0
- data/tools/dataextractor/js/719.js.map +1 -0
- data/tools/dataextractor/js/847.js +2 -0
- data/tools/dataextractor/js/847.js.map +1 -0
- data/tools/dataextractor/js/app.js +2 -0
- data/tools/dataextractor/js/app.js.map +1 -0
- metadata +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/847.js","mappings":"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","sources":["webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/DataExtractor.vue?7cb0","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/services/axios.js","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/services/openc3-api.js","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/OpenConfigDialog.vue?33ed","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/OpenConfigDialog.vue","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/OpenConfigDialog.vue?15fa","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/OpenConfigDialog.vue?22a0","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/SaveConfigDialog.vue?282a","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/SaveConfigDialog.vue","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/SaveConfigDialog.vue?eb28","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/SaveConfigDialog.vue?5010","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TargetPacketItemChooser.vue?6dbd","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TargetPacketItemChooser.vue","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TargetPacketItemChooser.vue?9bd0","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TargetPacketItemChooser.vue?766a","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/services/cable.js","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue?79bd","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue?231a","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue?d9e2","webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/Filters/timeFilters.js","webpack://@openc3/tool-dataextractor/src/tools/DataExtractor/DataExtractor.vue","webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/DataExtractor.vue?ed88","webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/DataExtractor.vue","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue?bfe1","webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/DataExtractor.vue?028e","webpack://@openc3/tool-dataextractor/../openc3-tool-common/src/components/TopBar.vue?1e7c","webpack://@openc3/tool-dataextractor/./src/tools/DataExtractor/DataExtractor.vue?a5db"],"sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('top-bar',{attrs:{\"menus\":_vm.menus,\"title\":_vm.title}}),_c('v-container',[_c('v-row',[_c('v-col',[_vm._v(\" Oldest found log data: \")]),_c('v-col',[_vm._v(\" \"+_vm._s(_vm._f(\"dateTime\")(_vm.oldestLogDate,_vm.utcOrLocal))+\" \")])],1),_c('v-row',[_c('v-col',[_c('v-text-field',{attrs:{\"label\":\"Start Date\",\"type\":\"date\",\"min\":_vm.oldestLogDateStr,\"max\":_vm.todaysDate,\"rules\":[_vm.rules.required],\"data-test\":\"start-date\"},model:{value:(_vm.startDate),callback:function ($$v) {_vm.startDate=$$v},expression:\"startDate\"}}),_c('v-text-field',{attrs:{\"label\":\"End Date\",\"type\":\"date\",\"min\":_vm.oldestLogDateStr,\"max\":_vm.todaysDate,\"rules\":[_vm.rules.required],\"data-test\":\"end-date\"},model:{value:(_vm.endDate),callback:function ($$v) {_vm.endDate=$$v},expression:\"endDate\"}})],1),_c('v-col',[_c('v-text-field',{attrs:{\"label\":\"Start Time\",\"type\":\"time\",\"step\":\"1\",\"rules\":[_vm.rules.required],\"data-test\":\"start-time\"},model:{value:(_vm.startTime),callback:function ($$v) {_vm.startTime=$$v},expression:\"startTime\"}}),_c('v-text-field',{attrs:{\"label\":\"End Time\",\"type\":\"time\",\"step\":\"1\",\"rules\":[_vm.rules.required],\"data-test\":\"end-time\"},model:{value:(_vm.endTime),callback:function ($$v) {_vm.endTime=$$v},expression:\"endTime\"}})],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_c('v-radio-group',{staticClass:\"mt-0\",attrs:{\"row\":\"\",\"hide-details\":\"\"},model:{value:(_vm.cmdOrTlm),callback:function ($$v) {_vm.cmdOrTlm=$$v},expression:\"cmdOrTlm\"}},[_c('v-radio',{attrs:{\"label\":\"Command\",\"value\":\"cmd\",\"data-test\":\"cmd-radio\"}}),_c('v-radio',{attrs:{\"label\":\"Telemetry\",\"value\":\"tlm\",\"data-test\":\"tlm-radio\"}})],1)],1),_c('v-col',[_c('v-radio-group',{staticClass:\"mt-0\",attrs:{\"row\":\"\",\"hide-details\":\"\"},model:{value:(_vm.utcOrLocal),callback:function ($$v) {_vm.utcOrLocal=$$v},expression:\"utcOrLocal\"}},[_c('v-radio',{attrs:{\"label\":\"LST\",\"value\":\"loc\",\"data-test\":\"lst-radio\"}}),_c('v-radio',{attrs:{\"label\":\"UTC\",\"value\":\"utc\",\"data-test\":\"utc-radio\"}})],1)],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',[_c('v-radio-group',{attrs:{\"row\":\"\",\"hide-details\":\"\"},model:{value:(_vm.reduced),callback:function ($$v) {_vm.reduced=$$v},expression:\"reduced\"}},[_c('span',{staticClass:\"mr-5\"},[_vm._v(\"Data Reduction:\")]),_c('v-radio',{attrs:{\"label\":\"None\",\"value\":\"DECOM\",\"data-test\":\"not-reduced\"}}),_c('v-radio',{attrs:{\"label\":\"Minute\",\"value\":\"REDUCED_MINUTE\",\"data-test\":\"min-reduced\"}}),_c('v-radio',{attrs:{\"label\":\"Hour\",\"value\":\"REDUCED_HOUR\",\"data-test\":\"hour-reduced\"}}),_c('v-radio',{attrs:{\"label\":\"Day\",\"value\":\"REDUCED_DAY\",\"data-test\":\"day-reduced\"}})],1)],1)],1),_c('v-row',[_c('v-col',[_c('target-packet-item-chooser',{attrs:{\"button-text\":\"Add Item\",\"mode\":_vm.cmdOrTlm,\"reduced\":_vm.reduced,\"choose-item\":\"\",\"allow-all\":\"\"},on:{\"click\":function($event){return _vm.addItem($event)}}})],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-toolbar',[_c('v-progress-circular',{attrs:{\"value\":_vm.progress}}),_vm._v(\" Received: \"+_vm._s(_vm.totalBytesReceived)+\" bytes \"),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(\" Items \")]),_c('v-spacer'),_c('v-btn',{staticClass:\"primary mr-4\",attrs:{\"disabled\":_vm.items.length < 1},on:{\"click\":_vm.processItems}},[_vm._v(_vm._s(_vm.processButtonText))]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"icon\":\"\",\"disabled\":_vm.items.length < 1,\"data-test\":\"editAll\"},on:{\"click\":function($event){_vm.editAll = true}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\"Edit All Items\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"icon\":\"\",\"disabled\":_vm.items.length < 1,\"data-test\":\"delete-all\"},on:{\"click\":_vm.deleteAll}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])},[_c('span',[_vm._v(\"Delete All Items\")])])],1)],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-list',{attrs:{\"data-test\":\"item-list\",\"width\":\"100%\"}},_vm._l((_vm.items),function(item,i){return _c('div',{key:i},[_c('v-list-item',[_c('v-list-item-icon',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-icon',_vm._g(_vm._b({on:{\"click\":function($event){$event.stopPropagation();item.edit = true}}},'v-icon',attrs,false),on),[_vm._v(\" mdi-pencil \")])]}}],null,true)},[_c('span',[_vm._v(\"Edit Item\")])]),_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }item.edit = false}},model:{value:(item.edit),callback:function ($$v) {_vm.$set(item, \"edit\", $$v)},expression:\"item.edit\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" DataExtractor: Edit Item Mode \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(_vm._s(_vm.getItemLabel(item)))]),_c('v-card-text',[_c('v-col',[_c('v-select',{attrs:{\"hide-details\":\"\",\"items\":_vm.valueTypes,\"label\":\"Value Type\",\"outlined\":\"\"},model:{value:(item.valueType),callback:function ($$v) {_vm.$set(item, \"valueType\", $$v)},expression:\"item.valueType\"}})],1)],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){item.edit = false}}},[_vm._v(\" Close \")])],1)],1)],1)],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.getItemLabel(item)))])],1),_c('v-list-item-icon',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-icon',_vm._g(_vm._b({on:{\"click\":function($event){return _vm.deleteItem(item)}}},'v-icon',attrs,false),on),[_vm._v(\" mdi-delete \")])]}}],null,true)},[_c('span',[_vm._v(\"Delete Item\")])])],1)],1),_c('v-divider')],1)}),0)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancelEditAll.apply(null, arguments)}},model:{value:(_vm.editAll),callback:function ($$v) {_vm.editAll=$$v},expression:\"editAll\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" DataExtractor: Edit All Items\")]),_c('v-spacer')],1),_c('v-card-text',{staticClass:\"mt-2\"},[_vm._v(\" This will change all items to the following data type! \"),_c('v-col',[_c('v-select',{attrs:{\"hide-details\":\"\",\"items\":_vm.valueTypes,\"label\":\"Value Type\",\"outlined\":\"\"},model:{value:(_vm.allItemValueType),callback:function ($$v) {_vm.allItemValueType=$$v},expression:\"allItemValueType\"}})],1)],1),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\"},on:{\"click\":function($event){_vm.editAll = !_vm.editAll}}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"disabled\":!_vm.allItemValueType,\"color\":\"primary\"},on:{\"click\":function($event){return _vm.editAllValueTypes()}}},[_vm._v(\" Ok \")])],1)],1)],1),(_vm.openConfig)?_c('open-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":function($event){return _vm.openConfiguration($event)}},model:{value:(_vm.openConfig),callback:function ($$v) {_vm.openConfig=$$v},expression:\"openConfig\"}}):_vm._e(),(_vm.saveConfig)?_c('save-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":function($event){return _vm.saveConfiguration($event)}},model:{value:(_vm.saveConfig),callback:function ($$v) {_vm.saveConfig=$$v},expression:\"saveConfig\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n delete localStorage.openc3Token\n OpenC3Auth.login(location.href)\n } else {\n // Individual tools can set axiosIgnoreResponse to an error code\n // they potentially expect, e.g. '404', in which case we ignore it\n // Since localStorage only supports strings call toString on the status\n if (\n localStorage.axiosIgnoreResponse === error.response.status.toString()\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport axios from './axios.js'\n\nexport class OpenC3Api {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity)\n } catch (error) {\n OpenC3Auth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/openc3-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.openc3Token,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_openc3_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_openc3_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_tlm_cnts(target_commands) {\n return this.exec('get_tlm_cnts', [target_commands])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n get_all_telemetry_names(target_name) {\n return this.exec('get_all_telemetry_names', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by OpenC3ScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_openc3_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_openc3_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_all_command_names(target_name) {\n return this.exec('get_all_command_names', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_cnts(target_commands) {\n return this.exec('get_cmd_cnts', [target_commands])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_openc3_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Open Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"autofocus\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"data-test\":\"item-delete\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-btn',{attrs:{\"type\":\"submit\",\"color\":\"success\",\"data-test\":\"open-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"data-test\":\"open-config-cancel-btn\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Open Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n class=\"mt-1\"\n data-test=\"item-delete\"\n icon\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"success\"\n data-test=\"open-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n <v-spacer />\n <v-btn\n @click=\"cancel\"\n color=\"primary\"\n data-test=\"open-config-cancel-btn\"\n >\n Cancel\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '../services/openc3-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.selectedItem === '' || this.selectedItem === null) {\n return 'Must select a config'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new OpenC3Api()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to OpenC3. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n } else {\n this.selectedItem = null\n }\n },\n success: function () {\n this.$emit('success', this.selectedItem.config)\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.selectedItem.config === item.config) {\n this.selectedItem = null\n }\n this.configs.splice(this.configs.indexOf(item), 1)\n new OpenC3Api().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n\n<style scoped></style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OpenConfigDialog.vue?vue&type=template&id=db42aa32&scoped=true&\"\nimport script from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"db42aa32\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Save Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"icon\":\"\",\"data-test\":\"item-delete\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"autofocus\":\"\",\"disabled\":!!_vm.selectedItem,\"label\":\"Configuration Name\",\"data-test\":\"name-input-save-config-dialog\"},model:{value:(_vm.configName),callback:function ($$v) {_vm.configName=$$v},expression:\"configName\"}})],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"type\":\"submit\",\"color\":\"primary\",\"data-test\":\"save-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Save Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n icon\n class=\"mt-1\"\n data-test=\"item-delete\"\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <v-text-field\n v-model=\"configName\"\n hide-details\n autofocus\n :disabled=\"!!selectedItem\"\n label=\"Configuration Name\"\n data-test=\"name-input-save-config-dialog\"\n />\n </v-row>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn outlined class=\"mx-2\" @click=\"cancel\"> Cancel </v-btn>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"save-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '../services/openc3-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configName: '',\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.configName === '') {\n return 'Config must have a name'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new OpenC3Api()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to OpenC3. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n this.configName = item.item.config\n } else {\n this.selectedItem = null\n this.configName = ''\n }\n },\n success: function () {\n this.$emit('success', this.configName)\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.configName === item.config) {\n this.selectedItem = null\n this.configName = ''\n }\n this.configs.splice(this.configs.indexOf(item.config), 1)\n new OpenC3Api().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveConfigDialog.vue?vue&type=template&id=d7576030&\"\nimport script from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"c-chooser px-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-target\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Target\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.targetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.targetNameChanged},model:{value:(_vm.selectedTargetName),callback:function ($$v) {_vm.selectedTargetName=$$v},expression:\"selectedTargetName\"}})],1),_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-packet\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Packet\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.packetsDisabled || _vm.buttonDisabled,\"items\":_vm.packetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.packetNameChanged},model:{value:(_vm.selectedPacketName),callback:function ($$v) {_vm.selectedPacketName=$$v},expression:\"selectedPacketName\"}})],1),(_vm.chooseItem && !_vm.buttonDisabled)?_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-item\"}},[_c('v-autocomplete',{attrs:{\"label\":\"Select Item\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.itemsDisabled || _vm.buttonDisabled,\"items\":_vm.itemNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":function($event){return _vm.itemNameChanged($event)}},model:{value:(_vm.selectedItemName),callback:function ($$v) {_vm.selectedItemName=$$v},expression:\"selectedItemName\"}})],1):_vm._e(),(_vm.buttonText)?_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_c('v-btn',{attrs:{\"disabled\":_vm.buttonDisabled,\"block\":\"\",\"color\":\"primary\",\"data-test\":\"select-send\"},on:{\"click\":_vm.buttonPressed}},[_vm._v(\" \"+_vm._s(_vm.actualButtonText)+\" \")])],1):_vm._e()],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_vm._v(\"Description: \"+_vm._s(_vm.description))])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <v-container class=\"c-chooser px-0\">\n <v-row>\n <v-col :cols=\"colSize\" data-test=\"select-target\">\n <v-autocomplete\n label=\"Select Target\"\n hide-details\n dense\n @change=\"targetNameChanged\"\n :items=\"targetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedTargetName\"\n />\n </v-col>\n <v-col :cols=\"colSize\" data-test=\"select-packet\">\n <v-autocomplete\n label=\"Select Packet\"\n hide-details\n dense\n @change=\"packetNameChanged\"\n :disabled=\"packetsDisabled || buttonDisabled\"\n :items=\"packetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedPacketName\"\n />\n </v-col>\n <v-col\n v-if=\"chooseItem && !buttonDisabled\"\n :cols=\"colSize\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n label=\"Select Item\"\n hide-details\n dense\n @change=\"itemNameChanged($event)\"\n :disabled=\"itemsDisabled || buttonDisabled\"\n :items=\"itemNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedItemName\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\">\n <v-btn\n :disabled=\"buttonDisabled\"\n block\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col :cols=\"colSize\">Description: {{ description }}</v-col>\n </v-row>\n </v-container>\n</template>\n\n<script>\nimport { OpenC3Api } from '../services/openc3-api'\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n reduced: {\n type: String,\n default: 'DECOM',\n validator: (propValue) => {\n return [\n 'REDUCED_DAY',\n 'REDUCED_HOUR',\n 'REDUCED_MINUTE',\n 'DECOM',\n ].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n targetNames: [],\n packetNames: [],\n itemNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n selectedItemName: this.initialItemName?.toUpperCase(),\n description: '',\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n created() {\n this.internalDisabled = true\n this.api = new OpenC3Api()\n this.api.get_target_list().then((result) => {\n this.targetNames = result.map((target) => {\n return { label: target, value: target }\n })\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n }\n this.updatePackets()\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n buttonDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n targetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '49%', float: 'left' }\n }\n },\n packetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '50%', float: 'right' }\n }\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n },\n watch: {\n mode: function (newVal, oldVal) {\n this.updatePackets()\n this.itemNames = []\n },\n reduced: function (newVal, oldVal) {\n this.updateItems()\n },\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n this.internalDisabled = true\n const cmd =\n this.mode === 'tlm'\n ? 'get_all_telemetry_names'\n : 'get_all_command_names'\n this.api[cmd](this.selectedTargetName).then((names) => {\n this.packetNames = names.map((name) => {\n return {\n label: name,\n value: name,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n this.selectedPacketName = this.packetNames[0].value\n }\n this.packetNameChanged(this.selectedPacketName)\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n if (this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items\n .map((item) => {\n if (this.reduced === 'DECOM') {\n return [\n {\n label: item.name,\n value: item.name,\n description: item.description,\n },\n ]\n } else {\n return this.makeReducedItems(item)\n }\n })\n .reduce((result, item) => {\n return result.concat(item)\n }, [])\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.internalDisabled = false\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n }\n )\n },\n\n makeReducedItems: function (item) {\n const reducedOptions = !item.array_size && !item.states\n if (reducedOptions && ['UINT', 'INT', 'FLOAT'].includes(item.data_type)) {\n return ['MIN', 'MAX', 'AVG', 'STDDEV'].map((ext) => {\n return {\n label: `${item.name}_${ext}`,\n value: `${item.name}_${ext}`,\n description: `${ext} ${item.description}`,\n }\n })\n }\n return []\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n this.updatePackets()\n },\n\n packetNameChanged: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n this.selectedPacketName = packet.value\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.description = packet.description\n }\n )\n }\n if (this.chooseItem) {\n this.selectedItemName = ''\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n } else {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n reduced: this.reduced,\n })\n })\n }\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n reduced: this.reduced,\n })\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TargetPacketItemChooser.vue?vue&type=template&id=08088b8d&\"\nimport script from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport * as ActionCable from '@rails/actioncable'\n//ActionCable.logger.enabled = true\nActionCable.ConnectionMonitor.staleThreshold = 60\n\nexport default class Cable {\n constructor(url = '/openc3-api/cable') {\n this._cable = ActionCable.createConsumer(url)\n }\n disconnect() {\n this._cable.disconnect()\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n return this._cable.subscriptions.create(\n {\n channel,\n scope,\n token: localStorage.openc3Token,\n ...additionalOptions,\n },\n callbacks\n )\n })\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#openc3-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider'):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled}},[_vm._v(_vm._s(option.icon))])],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : ''))},[_vm._v(_vm._s(option.label))]):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <mounting-portal mount-to=\"#openc3-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n :key=\"j\"\n >\n <v-list-item-action v-if=\"option.radio\">\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action v-if=\"option.checkbox\">\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon :disabled=\"option.disabled\">{{ option.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n >{{ option.label }}</v-list-item-title\n >\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title>{{ title }}</v-toolbar-title>\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function (string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n },\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=3237297b&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=3237297b&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3237297b\",\n null\n \n)\n\nexport default component.exports","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nexport default {\n filters: {\n dateTime: function (val, utcOrLocal) {\n if (utcOrLocal === 'utc') {\n return val.toISOString()\n } else {\n return val.toLocaleString() // TODO: support other locales besides en-US\n }\n },\n },\n methods: {},\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <div>\n <top-bar :menus=\"menus\" :title=\"title\" />\n <v-container>\n <v-row>\n <v-col> Oldest found log data: </v-col>\n <v-col>\n {{ oldestLogDate | dateTime(utcOrLocal) }}\n </v-col>\n </v-row>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n type=\"date\"\n :min=\"oldestLogDateStr\"\n :max=\"todaysDate\"\n :rules=\"[rules.required]\"\n data-test=\"start-date\"\n />\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n type=\"date\"\n :min=\"oldestLogDateStr\"\n :max=\"todaysDate\"\n :rules=\"[rules.required]\"\n data-test=\"end-date\"\n />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n type=\"time\"\n step=\"1\"\n :rules=\"[rules.required]\"\n data-test=\"start-time\"\n >\n </v-text-field>\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n type=\"time\"\n step=\"1\"\n :rules=\"[rules.required]\"\n data-test=\"end-time\"\n >\n </v-text-field>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col>\n <v-radio-group v-model=\"cmdOrTlm\" row hide-details class=\"mt-0\">\n <v-radio label=\"Command\" value=\"cmd\" data-test=\"cmd-radio\" />\n <v-radio label=\"Telemetry\" value=\"tlm\" data-test=\"tlm-radio\" />\n </v-radio-group>\n </v-col>\n <v-col>\n <v-radio-group v-model=\"utcOrLocal\" row hide-details class=\"mt-0\">\n <v-radio label=\"LST\" value=\"loc\" data-test=\"lst-radio\" />\n <v-radio label=\"UTC\" value=\"utc\" data-test=\"utc-radio\" />\n </v-radio-group>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col>\n <v-radio-group v-model=\"reduced\" row hide-details>\n <span class=\"mr-5\">Data Reduction:</span>\n <v-radio label=\"None\" value=\"DECOM\" data-test=\"not-reduced\" />\n <v-radio\n label=\"Minute\"\n value=\"REDUCED_MINUTE\"\n data-test=\"min-reduced\"\n />\n <v-radio\n label=\"Hour\"\n value=\"REDUCED_HOUR\"\n data-test=\"hour-reduced\"\n />\n <v-radio label=\"Day\" value=\"REDUCED_DAY\" data-test=\"day-reduced\" />\n </v-radio-group>\n </v-col>\n </v-row>\n <v-row>\n <v-col>\n <target-packet-item-chooser\n @click=\"addItem($event)\"\n button-text=\"Add Item\"\n :mode=\"cmdOrTlm\"\n :reduced=\"reduced\"\n choose-item\n allow-all\n />\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-toolbar>\n <v-progress-circular :value=\"progress\" />\n Received: {{ totalBytesReceived }} bytes\n <v-spacer />\n <v-toolbar-title> Items </v-toolbar-title>\n <v-spacer />\n <v-btn\n class=\"primary mr-4\"\n @click=\"processItems\"\n :disabled=\"items.length < 1\"\n >{{ processButtonText }}</v-btn\n >\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n @click=\"editAll = true\"\n v-bind=\"attrs\"\n v-on=\"on\"\n :disabled=\"items.length < 1\"\n data-test=\"editAll\"\n >\n <v-icon> mdi-pencil </v-icon>\n </v-btn>\n </template>\n <span>Edit All Items</span>\n </v-tooltip>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n @click=\"deleteAll\"\n v-bind=\"attrs\"\n v-on=\"on\"\n :disabled=\"items.length < 1\"\n data-test=\"delete-all\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n <span>Delete All Items</span>\n </v-tooltip>\n </v-toolbar>\n </v-row>\n <v-row no-gutters>\n <v-list data-test=\"item-list\" width=\"100%\">\n <div v-for=\"(item, i) in items\" :key=\"i\">\n <v-list-item>\n <v-list-item-icon>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-icon\n @click.stop=\"item.edit = true\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n mdi-pencil\n </v-icon>\n </template>\n <span>Edit Item</span>\n </v-tooltip>\n <v-dialog\n v-model=\"item.edit\"\n @keydown.esc=\"item.edit = false\"\n max-width=\"600\"\n >\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> DataExtractor: Edit Item Mode </span>\n <v-spacer />\n </v-system-bar>\n <v-card-title>{{ getItemLabel(item) }}</v-card-title>\n <v-card-text>\n <v-col>\n <v-select\n hide-details\n :items=\"valueTypes\"\n label=\"Value Type\"\n outlined\n v-model=\"item.valueType\"\n />\n </v-col>\n <!-- v-col v-if=\"uniqueOnly\">\n <v-select\n :items=\"uniqueIgnoreOptions\"\n label=\"Add to Unique Ignore List?:\"\n outlined\n v-model=\"item.uniqueIgnoreAdd\"\n />\n </v-col -->\n </v-card-text>\n <v-card-actions>\n <v-spacer />\n <v-btn color=\"primary\" @click=\"item.edit = false\">\n Close\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ getItemLabel(item) }}</v-list-item-title>\n </v-list-item-content>\n <v-list-item-icon>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-icon @click=\"deleteItem(item)\" v-bind=\"attrs\" v-on=\"on\">\n mdi-delete\n </v-icon>\n </template>\n <span>Delete Item</span>\n </v-tooltip>\n </v-list-item-icon>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n </v-row>\n </v-container>\n <v-dialog v-model=\"editAll\" @keydown.esc=\"cancelEditAll\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> DataExtractor: Edit All Items</span>\n <v-spacer />\n </v-system-bar>\n <v-card-text class=\"mt-2\">\n This will change all items to the following data type!\n <v-col>\n <v-select\n hide-details\n :items=\"valueTypes\"\n label=\"Value Type\"\n outlined\n v-model=\"allItemValueType\"\n />\n </v-col>\n </v-card-text>\n <v-card-actions>\n <v-spacer />\n <v-btn outlined class=\"mx-2\" @click=\"editAll = !editAll\">\n Cancel\n </v-btn>\n <v-btn\n :disabled=\"!allItemValueType\"\n color=\"primary\"\n class=\"mx-2\"\n @click=\"editAllValueTypes()\"\n >\n Ok\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n <!-- Note we're using v-if here so it gets re-created each time and refreshes the list -->\n <open-config-dialog\n v-if=\"openConfig\"\n v-model=\"openConfig\"\n :tool=\"toolName\"\n @success=\"openConfiguration($event)\"\n />\n <!-- Note we're using v-if here so it gets re-created each time and refreshes the list -->\n <save-config-dialog\n v-if=\"saveConfig\"\n v-model=\"saveConfig\"\n :tool=\"toolName\"\n @success=\"saveConfiguration($event)\"\n />\n </div>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/tool-common/src/services/openc3-api'\nimport OpenConfigDialog from '@openc3/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@openc3/tool-common/src/components/SaveConfigDialog'\nimport TargetPacketItemChooser from '@openc3/tool-common/src/components/TargetPacketItemChooser'\nimport Cable from '@openc3/tool-common/src/services/cable.js'\nimport { format, getTime } from 'date-fns'\nimport TopBar from '@openc3/tool-common/src/components/TopBar'\nimport TimeFilters from '@/tools/DataExtractor/Filters/timeFilters.js'\n\nexport default {\n components: {\n OpenConfigDialog,\n SaveConfigDialog,\n TargetPacketItemChooser,\n TopBar,\n },\n mixins: [TimeFilters],\n data() {\n return {\n api: null,\n title: 'Data Extractor',\n toolName: 'data-exporter',\n openConfig: false,\n saveConfig: false,\n progress: 0,\n bytesReceived: 0,\n totalBytesReceived: 0,\n processButtonText: 'Process',\n oldestLogDate: new Date(),\n todaysDate: format(new Date(), 'yyyy-MM-dd'),\n startDate: format(new Date(), 'yyyy-MM-dd'),\n startTime: format(new Date(), 'HH:mm:ss'),\n endTime: format(new Date(), 'HH:mm:ss'),\n endDate: format(new Date(), 'yyyy-MM-dd'),\n startDateTime: null,\n endDateTime: null,\n startDateTimeFilename: '',\n rules: {\n required: (value) => !!value || 'Required',\n },\n cmdOrTlm: 'tlm',\n utcOrLocal: 'loc',\n reduced: 'DECOM',\n items: [],\n rawData: [],\n columnMap: {},\n delimiter: ',',\n columnMode: 'normal',\n fileCount: 0,\n matlabHeader: false,\n skipIgnored: true,\n fillDown: false,\n uniqueOnly: false,\n valueTypes: ['CONVERTED', 'RAW', 'FORMATTED', 'WITH_UNITS'],\n editAll: false,\n allItemValueType: null,\n // uniqueIgnoreOptions: ['NO', 'YES'],\n cable: new Cable(),\n subscription: null,\n menus: [\n {\n label: 'File',\n radioGroup: 'Comma Delimited', // Default radio selected\n items: [\n {\n label: 'Open Configuration',\n icon: 'mdi-folder-open',\n command: () => {\n this.openConfig = true\n },\n },\n {\n label: 'Save Configuration',\n icon: 'mdi-content-save',\n command: () => {\n this.saveConfig = true\n },\n },\n {\n divider: true,\n },\n {\n label: 'Comma Delimited',\n radio: true,\n command: () => {\n this.delimiter = ','\n },\n },\n {\n label: 'Tab Delimited',\n radio: true,\n command: () => {\n this.delimiter = '\\t'\n },\n },\n ],\n },\n {\n label: 'Mode',\n radioGroup: 'Normal Columns', // Default radio selected\n items: [\n // TODO: Currently unimplemented\n // {\n // label: 'Skip Ignored on Add',\n // checkbox: true,\n // checked: true, // Skip Ignored is the default\n // command: () => {\n // this.skipIgnored = !this.skipIgnored\n // },\n // },\n // {\n // divider: true,\n // },\n {\n label: 'Fill Down',\n checkbox: true,\n command: () => {\n this.fillDown = !this.fillDown\n },\n },\n {\n label: 'Matlab Header',\n checkbox: true,\n command: () => {\n this.matlabHeader = !this.matlabHeader\n },\n },\n {\n label: 'Unique Only',\n checkbox: true,\n command: () => {\n this.uniqueOnly = !this.uniqueOnly\n },\n },\n {\n divider: true,\n },\n {\n label: 'Normal Columns',\n radio: true,\n command: () => {\n this.columnMode = 'normal'\n },\n },\n {\n label: 'Full Column Names',\n radio: true,\n command: () => {\n this.columnMode = 'full'\n },\n },\n ],\n },\n ],\n }\n },\n computed: {\n oldestLogDateStr: function () {\n // Set the start date / time to the earliest data found\n return format(this.oldestLogDate, 'yyyy-MM-dd')\n },\n },\n created: function () {\n this.api = new OpenC3Api()\n this.api\n .get_oldest_logfile({ params: { scope: localStorage.scope } })\n .then((response) => {\n // Server returns time as UTC so create date with 'Z'\n this.oldestLogDate = new Date(response + 'Z')\n })\n },\n mounted: function () {\n const previousConfig = localStorage['lastconfig__data_exporter']\n if (previousConfig) {\n this.openConfiguration(previousConfig)\n }\n },\n destroyed: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n },\n methods: {\n openConfiguration: function (name) {\n localStorage['lastconfig__data_exporter'] = name\n this.api\n .load_config(this.toolName, name)\n .then((response) => {\n if (response) {\n this.items = JSON.parse(response)\n this.$notify.normal({\n title: 'Loading configuartion',\n body: name,\n })\n }\n })\n .catch((error) => {\n if (error) {\n this.$notify.serious({\n title: `Failed to open configuration ${name}`,\n body: error,\n })\n localStorage['lastconfig__data_exporter'] = null\n }\n })\n },\n saveConfiguration: function (name) {\n localStorage['lastconfig__data_exporter'] = name\n this.api\n .save_config(this.toolName, name, JSON.stringify(this.items))\n .then((response) => {\n this.$notify.normal({\n title: 'Saved configuration',\n body: name,\n })\n })\n .catch((error) => {\n if (error) {\n this.$notify.serious({\n title: `Failed to save configuration: ${name}`,\n body: error,\n })\n }\n })\n },\n addItem: function (item) {\n // Traditional for loop so we can return if we find a match\n for (const listItem of this.items) {\n if (\n listItem.itemName === item.itemName &&\n listItem.packetName === item.packetName &&\n listItem.targetName === item.targetName &&\n listItem.valueType === 'CONVERTED'\n ) {\n this.$notify.caution({\n body: 'This item has already been added!',\n })\n return\n }\n }\n item.cmdOrTlm = this.cmdOrTlm.toUpperCase()\n item.edit = false\n item.valueType = 'CONVERTED'\n // item.uniqueIgnoreAdd = 'NO'\n this.items.push(item)\n },\n deleteItem: function (item) {\n var index = this.items.indexOf(item)\n this.items.splice(index, 1)\n },\n deleteAll: function () {\n this.items = []\n },\n editAllValueTypes: function () {\n this.editAll = false\n for (let item of this.items) {\n item.valueType = this.allItemValueType\n }\n },\n getItemLabel: function (item) {\n let label = [`${item.targetName} - ${item.packetName} - ${item.itemName}`]\n if (item.valueType !== 'CONVERTED') {\n label.push(`+ ( ${item.valueType} )`)\n }\n if (item.reduced !== 'DECOM') {\n label.push(`[ ${item.reduced} ]`)\n }\n return label.join(' ')\n },\n setTimestamps: function () {\n this.startDateTimeFilename = this.startDate + '_' + this.startTime\n // Replace the colons and dashes with underscores in the filename\n this.startDateTimeFilename = this.startDateTimeFilename.replace(\n /(:|-)\\s*/g,\n '_'\n )\n let startTemp\n let endTemp\n try {\n if (this.utcOrLocal === 'utc') {\n startTemp = new Date(this.startDate + ' ' + this.startTime + 'Z')\n endTemp = new Date(this.endDate + ' ' + this.endTime + 'Z')\n } else {\n startTemp = new Date(this.startDate + ' ' + this.startTime)\n endTemp = new Date(this.endDate + ' ' + this.endTime)\n }\n } catch (e) {\n return\n }\n this.startDateTime = startTemp.getTime() * 1_000_000\n this.endDateTime = endTemp.getTime() * 1_000_000\n },\n processItems: function () {\n // Check for a process in progress\n if (this.processButtonText === 'Cancel') {\n this.finished()\n return\n }\n // Check for an empty time period\n this.setTimestamps()\n if (!this.startDateTime || !this.endDateTime) {\n this.$notify.caution({\n body: 'Invalid date/time selected!',\n })\n return\n }\n if (this.startDateTime === this.endDateTime) {\n this.$notify.caution({\n body: 'Start date/time is equal to end date/time!',\n })\n return\n }\n if (this.endDateTime - this.startDateTime < 0) {\n this.$notify.caution({\n body: 'Start date/time is greater then end date/time!',\n })\n return\n }\n // Check for a future End Time\n if (new Date(this.endDateTime / 1_000_000) > Date.now()) {\n this.$notify.caution({\n title: 'Note',\n body: `End date/time is greater than current date/time. Data will\n continue to stream in real-time until\n ${new Date(\n this.endDateTime / 1_000_000\n ).toISOString()} is reached.`,\n })\n }\n\n this.progress = 0\n this.processButtonText = 'Cancel'\n this.cable\n .createSubscription('StreamingChannel', localStorage.scope, {\n received: (data) => this.received(data),\n connected: () => this.onConnected(),\n disconnected: () => {\n this.$notify.caution({\n body: 'OpenC3 backend connection disconnected.',\n })\n },\n rejected: () => {\n this.$notify.caution({\n body: 'OpenC3 backend connection rejected.',\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n resetVars: function () {\n this.foundKeys = []\n this.columnHeaders = []\n this.columnMap = {}\n this.rawData = []\n this.bytesReceived = 0\n },\n onConnected: function () {\n this.fileCount = 0\n this.totalBytesReceived = 0\n this.resetVars()\n var items = []\n this.items.forEach((item, index) => {\n items.push(\n `${item.cmdOrTlm}__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n )\n })\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n this.subscription.perform('add', {\n scope: localStorage.scope,\n mode: this.reduced,\n token: localStorage.openc3Token,\n items: items,\n start_time: this.startDateTime,\n end_time: this.endDateTime,\n })\n })\n },\n buildHeaders: function (itemKeys) {\n if (\n this.foundKeys.includes(itemKeys[0]) &&\n this.foundKeys.includes(itemKeys[1])\n ) {\n return\n }\n this.foundKeys = this.foundKeys.concat(itemKeys)\n\n // Normal column mode has the target and packet listed for each item\n if (this.columnHeaders.length === 0 && this.columnMode === 'normal') {\n this.columnHeaders.push('TARGET')\n this.columnHeaders.push('PACKET')\n }\n itemKeys.forEach((item) => {\n if (item === 'time') return\n this.columnMap[item] = Object.keys(this.columnMap).length\n const [cmdTlm, targetName, packetName, itemName, valueType] =\n item.split('__')\n if (this.columnMode === 'full') {\n this.columnHeaders.push(\n targetName + ' ' + packetName + ' ' + itemName\n )\n } else {\n if (valueType && valueType !== 'CONVERTED') {\n this.columnHeaders.push(itemName + ' (' + valueType + ')')\n } else {\n this.columnHeaders.push(itemName)\n }\n }\n })\n },\n received: function (json_data) {\n if (json_data.error) {\n this.$notify.serious({\n body: json_data.error,\n })\n return\n }\n this.bytesReceived += json_data.length\n this.totalBytesReceived += json_data.length\n const data = JSON.parse(json_data)\n // Initially we just build up the list of data\n if (data.length > 0) {\n // Get all the items present in the data to pass to buildHeaders\n let keys = new Set()\n for (var item of data) {\n Object.keys(item).forEach(keys.add, keys)\n }\n this.buildHeaders([...keys])\n this.rawData = this.rawData.concat(data)\n this.progress = Math.ceil(\n (100 * (data[0]['time'] - this.startDateTime)) /\n (this.endDateTime - this.startDateTime)\n )\n\n if (this.bytesReceived > 200000000) {\n this.bytesReceived = 0\n this.createFile()\n }\n } else {\n this.finished()\n }\n },\n createFile: function () {\n let rawData = this.rawData\n let foundKeys = this.foundKeys\n let columnHeaders = this.columnHeaders\n let columnMap = this.columnMap\n let outputFile = []\n this.resetVars()\n\n let headers = ''\n if (this.matlabHeader) {\n headers += '% '\n }\n headers += columnHeaders.join(this.delimiter)\n outputFile.push(headers)\n\n // Sort everything by time so we can output in order\n rawData.sort((a, b) => a.time - b.time)\n var currentValues = []\n var row = []\n var previousRow = null\n rawData.forEach((packet) => {\n var changed = false\n if (this.fillDown && previousRow) {\n row = [...previousRow] // Copy the previous\n } else {\n row = []\n }\n // This pulls out the attributes we requested\n const keys = Object.keys(packet)\n keys.forEach((key) => {\n if (key === 'time' || key === 'packet') return // Skip time and packet fields\n // Get the value and put it into the correct column\n if (typeof packet[key] === 'object') {\n row[columnMap[key]] = '\"' + packet[key]['raw'] + '\"'\n } else {\n row[columnMap[key]] = packet[key]\n }\n if (\n this.uniqueOnly &&\n currentValues[columnMap[key]] !== row[columnMap[key]]\n ) {\n changed = true\n }\n currentValues[columnMap[key]] = row[columnMap[key]]\n })\n // Copy row before pushing on target / packet names\n previousRow = [...row]\n\n if (!this.uniqueOnly || changed) {\n // Normal column mode means each row has target / packet name\n if (this.columnMode === 'normal') {\n var [, tgt, pkt] = keys[0].split('__')\n row.unshift(pkt)\n row.unshift(tgt)\n }\n outputFile.push(row.join(this.delimiter))\n }\n })\n\n let downloadFileExtension = '.csv'\n let type = 'text/csv'\n if (this.delimiter === '\\t') {\n downloadFileExtension = '.txt'\n type = 'text/tab-separated-values'\n }\n const blob = new Blob([outputFile.join('\\n')], {\n type: type,\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n this.startDateTimeFilename +\n '.' +\n this.fileCount +\n downloadFileExtension\n )\n link.click()\n\n this.fileCount += 1\n },\n finished: function () {\n this.progress = 95 // Indicate we're almost done\n this.subscription.unsubscribe()\n\n if (this.rawData.length !== 0) {\n this.createFile()\n } else if (this.fileCount === 0) {\n let start = new Date(this.startDateTime / 1_000_000).toISOString()\n let end = new Date(this.endDateTime / 1_000_000).toISOString()\n this.$notify.caution({\n body: `No data found for the items in the requested time range of ${start} to ${end}`,\n })\n }\n\n this.progress = 100\n this.processButtonText = 'Process'\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Disable transition animations to allow bar to grow faster\n.v-progress-linear__determinate {\n transition: none !important;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DataExtractor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DataExtractor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DataExtractor.vue?vue&type=template&id=570a1c5c&scoped=true&\"\nimport script from \"./DataExtractor.vue?vue&type=script&lang=js&\"\nexport * from \"./DataExtractor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DataExtractor.vue?vue&type=style&index=0&id=570a1c5c&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"570a1c5c\",\n null\n \n)\n\nexport default component.exports","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-list[data-v-3237297b] .v-label{margin-left:5px}.v-list-item__icon[data-v-3237297b]{margin-right:15px!important}.v-list-item__title[data-v-3237297b]{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-progress-linear__determinate[data-v-570a1c5c]{transition:none!important}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=style&index=0&id=3237297b&prod&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"9f637652\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DataExtractor.vue?vue&type=style&index=0&id=570a1c5c&prod&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0a61eb4c\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","_v","_s","_f","oldestLogDate","utcOrLocal","oldestLogDateStr","todaysDate","rules","required","model","value","callback","$$v","startDate","expression","endDate","startTime","endTime","staticClass","cmdOrTlm","reduced","on","$event","addItem","progress","totalBytesReceived","items","length","processItems","processButtonText","scopedSlots","_u","key","fn","ref","_g","_b","editAll","deleteAll","_l","item","i","stopPropagation","edit","type","indexOf","_k","keyCode","$set","getItemLabel","valueTypes","deleteItem","cancelEditAll","apply","arguments","allItemValueType","editAllValueTypes","toolName","openConfiguration","openConfig","_e","saveConfiguration","saveConfig","staticRenderFns","vueInstance","Vue","axiosInstance","axios","baseURL","location","origin","timeout","params","interceptors","response","use","error","status","localStorage","openc3Token","OpenC3Auth","login","href","axiosIgnoreResponse","toString","Promise","reject","body","statusText","config","data","message","exception","class","$notify","serious","OpenC3Api","method","kwparams","updateToken","defaultMinValidity","id","scope","jsonrpc","keyword_params","headers","Authorization","result","err","Error","name","request","val","json_class","raw","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","target_commands","target","packet","log_writer_name","limits_set","target_name","packet_name","value_type","len","converted","decode_openc3_type","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_openc3_type","undefined","_cmd","tool","ignored","array","string","window","isSecureContext","arrayBuffer","TextEncoder","encode","crypto","subtle","digest","hashAsArrayBuffer","uint8ViewOfHash","Uint8Array","Array","from","map","b","padStart","join","cancel","show","preventDefault","success","search","configs","itemSelected","slot","select","deleteConfig","directives","rawName","domProps","props","text","align","sortable","selectedItem","computed","get","set","mounted","list_configs","then","configId","catch","methods","confirm","okText","cancelText","component","configName","colSize","targetNames","targetNameChanged","selectedTargetName","packetsDisabled","buttonDisabled","packetNames","packetNameChanged","selectedPacketName","chooseItem","itemsDisabled","itemNames","itemNameChanged","selectedItemName","buttonPressed","actualButtonText","description","allowAll","default","buttonText","disabled","initialTargetName","initialPacketName","initialItemName","mode","validator","includes","propValue","unknown","vertical","internalDisabled","api","ALL","label","UNKNOWN","created","targetChooserStyle","width","float","packetChooserStyle","watch","updatePackets","updateItems","reduce","targetName","packetName","itemName","makeReducedItems","allTargetPacketItems","allPacketItems","ActionCable","Cable","url","_cable","disconnect","channel","callbacks","additionalOptions","subscriptions","create","token","menu","formatDT","radioGroup","option","j","command","checked","icon","radio","checkbox","style","filters","dateTime","toISOString","toLocaleString","components","OpenConfigDialog","SaveConfigDialog","TargetPacketItemChooser","TopBar","mixins","bytesReceived","startDateTime","endDateTime","startDateTimeFilename","rawData","columnMap","delimiter","columnMode","fileCount","matlabHeader","skipIgnored","fillDown","uniqueOnly","cable","subscription","divider","get_oldest_logfile","destroyed","load_config","save_config","JSON","listItem","setTimestamps","startTemp","endTemp","createSubscription","received","connected","disconnected","rejected","resetVars","onConnected","start_time","end_time","buildHeaders","itemKeys","createFile","outputFile","row","keys","currentValues","changed","previousRow","downloadFileExtension","link","finished","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}
|