{"version":3,"sources":["webpack:///./src/components/devices/PortField.vue?37aa","webpack:///./src/views/Devices.vue?b1fa","webpack:///./src/views/Devices.vue?f102","webpack:///./src/components/devices/DeviceList.vue?0e16","webpack:///./src/components/devices/DeviceList.vue?1214","webpack:///./src/components/devices/DeviceList.vue?5ef6","webpack:///./src/components/devices/DeviceList.vue","webpack:///./src/components/devices/ExtraValueField.vue?71c6","webpack:///./src/components/devices/ExtraValueField.vue?d2ae","webpack:///./src/components/devices/ExtraValueField.vue?2d37","webpack:///./src/components/devices/ExtraValueField.vue","webpack:///./src/components/devices/PortField.vue?5d04","webpack:///./src/components/devices/PortField.vue?6742","webpack:///./src/components/devices/PortField.vue?e8ab","webpack:///./src/components/devices/PortField.vue","webpack:///./src/views/Devices.vue?5bce","webpack:///./src/views/Devices.vue?134a","webpack:///./src/views/Devices.vue","webpack:///./src/components/devices/DeviceList.vue?27ee","webpack:///./src/components/devices/ExtraValueField.vue?2513"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","updateData","model","value","callback","$$v","isAddingWithOpsLink","expression","ref","onSave","onDelete","onAddNew","onModalOpen","columns","ModalItems","serverList","isLoading","totalRecords","scopedSlots","_u","key","fn","$event","_v","proxy","slotProps","row","staticRenderFns","_e","_m","_l","deviceID","$set","errors","input1","class","isCameraPreviewEnabled","isCameraEnabled","rowHasChanges","showOrUpdateCameraPreview","applianceOfflineNotification","removeDevice","isValid","addDevice","cameraUsageDifference","_s","subscription","limitedSubscription","cameras","camerasLimit","devicePreviewDetails","handleCameraPreviewHidden","Subscription","GenericTable","SiteMonitor","deviceList","cameraUsage","isCameraPreviewShown","mounted","isBillingEnabled","fetchSubscription","updateFromValue","isAddingNew","Array","from","length","numCameras","pollApplianceServerAndDeviceServerDetails","beforeDestroy","stopPollingApplianceServerAndDeviceServerDetails","valueChanged","updateDeviceList","$emit","parentTitleHandler","parentTitle","oldParentTitle","hasPreventRenaming","renameCameraNameByParentTitle","addDefaultCameras","splice","renameCameraNameByTitle","map","device","number","title","match","serverTypeID","Math","abs","inputs","currentNumber","max","push","input2","deviceTypeID","deviceId","index","findIndex","d","featuresList","numAudioInputs","numAudioOutputs","validationFilteredDeviceList","filteredDeviceList","name","reduce","acc","cur","undefined","Object","values","every","v","filter","validate","type","Boolean","default","String","State","Action","Getter","deep","DeviceList","components","CameraPreview","VuePerfectScrollbar","component","extraValueName","localValue","localValueChanged","isShowFieldChanged","prev","isShowField","immediate","ExtraValueField","placeholder","readonly","setLocalValue","extraValueNameChanged","currentLocalValue","isEmptyLocalValue","PortField","GenericTableStore","Areas","serverTypes","order","sortOrder","sortOrderReversed","description","searchable","visible","dataType","sortable","sortKey","isTermLabel","isSortedByDefault","isCameraDetectionAvailable","readOnly","maxLength","required","data","AreaTreeSelect","props","clearable","a","defaultValue","usersTenantGroupId","t","filteredDeviceTypes","isApplianceEnabled","ApplianceList","isApplianceOnly","isApplianceSelected","newOnly","allowsCameras","componentHasValidation","usesExtraCameraIds","usesExtraCameraId","usesDeviceExtraValue","currentTitle","deviceTypes","isDevicesEnabled","ShowCameraDevicesOnly","sort","b","sortedDeviceTypes","hidden","isShowCameraDevicesOnly","getModalRow","selectedServerType","modalRowTitle","isExtraValueName","find","usesExtraCameraIDs","toString","toLowerCase","filterCameraOnlyServers","servers","currentType","getServerTypeId","id","paginatedSearchQueryParams","cancellableQuery","generateNewPaginatedSearchRequest","Promise","all","getServers","getServerTypes","serversResult","isCameraOnly","formattedServerList","console","log","server","isReadOnly","syncSystemId","getPermissions","canOverrideGroupSync","isSystemAdmin","serverType","groupName","getAreaTitle","groupID","deviceTypeTitle","readOnlyMessage","serverToDelete","deleteServer","serverID","mostRecentSearchParams","serverToAdd","newServer","host","port","username","password","extraValue","applianceId","addServer","devices","onAddDevice","serverToUpdate","updatedDevices","updatedServer","updateServer","$refs","genericTable","openModel","getDevices","oldDevices","updateOldDevices","addNewDevices","oldDevice","updatedDevice","isDeviceModified","updateDevice","deleteDevice","newDevice","setDataNewDevice","response","status","prototype","$notify","text","deviceTypeId","SettingsMeta","Constants","DEFAULT_CAMERA_SETTINGS_META","modalItem","set","indexOf","modalRowApplianceId","$router","go","isSuiteEnabled","reloadSubscription","areaDictionary","size","fetchAreaDictionary","checkCameraDetectionAvailability","isFeatureEnabled","getApplianceList","availableDetectors","DevicesPage","NavHeader","OpsLinkCameraImport","PaginatedSearch"],"mappings":"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","file":"js/chunk-3a9d77e2.fe700ef5.js","sourcesContent":["import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PortField.vue?vue&type=style&index=0&id=98feda9e&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PortField.vue?vue&type=style&index=0&id=98feda9e&lang=scss&scoped=true&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Devices.vue?vue&type=style&index=0&id=6c1fa2cc&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Devices.vue?vue&type=style&index=0&id=6c1fa2cc&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card card-secondary\",attrs:{\"id\":\"setup-container\"}},[_c('nav-header',{attrs:{\"title\":\"Devices\"}}),_c('ops-link-camera-import',{on:{\"import-complete\":_vm.updateData},model:{value:(_vm.isAddingWithOpsLink),callback:function ($$v) {_vm.isAddingWithOpsLink=$$v},expression:\"isAddingWithOpsLink\"}}),(_vm.isDevicesEnabled)?_c('generic-table',{ref:\"genericTable\",attrs:{\"id\":\"devicesTable\",\"onSave\":_vm.onSave,\"onDelete\":_vm.onDelete,\"onAddNew\":_vm.onAddNew,\"onModalOpen\":_vm.onModalOpen,\"term\":\"Device\",\"columns\":_vm.columns,\"modalItems\":_vm.ModalItems,\"dataList\":_vm.serverList,\"isLoading\":_vm.isLoading,\"closeOnSave\":false,\"idColumn\":\"serverID\",\"totalAvailableRows\":_vm.totalRecords},on:{\"search-filter-updated\":_vm.updateData},scopedSlots:_vm._u([(_vm.isCameraDetectionAvailable)?{key:\"custom-button\",fn:function(){return [_c('b-button',{attrs:{\"data-cy\":\"manage-contact-roles\",\"variant\":\"primary\"},on:{\"click\":function($event){_vm.isAddingWithOpsLink = true}}},[_vm._v(\"Camera Detection\")])]},proxy:true}:null,{key:\"isRaiseIndividual\",fn:function(slotProps){return [(slotProps.row.isRaiseIndividual)?_c('i',{staticClass:\"fas fa-check\"}):_c('i',{staticClass:\"fas fa-times\"})]}},{key:\"isRaiseGrouped\",fn:function(slotProps){return [(slotProps.row.isRaiseGrouped)?_c('i',{staticClass:\"fas fa-check\"}):_c('i',{staticClass:\"fas fa-times\"})]}}],null,true)}):_c('h4',{attrs:{\"id\":\"featureDisabledContainer\"}},[_vm._v(\"You are not licenced to view this page\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('table',{staticClass:\"table table-striped table-hover table-sortable generic-table\"},[_c('thead',[_c('tr',[_c('th',[_vm._v(\"Camera Name\")]),_c('th',[_vm._v(\"Input\")]),(_vm.usesDeviceExtraValue)?_c('th',[_vm._v(\"Camera Extra Value\")]):_vm._e(),(_vm.deviceSupportsAudio)?[_vm._m(0),_vm._m(1)]:_vm._e(),_c('th',{staticClass:\"actions-column\"})],2)]),_c('tbody',_vm._l((_vm.filteredDeviceList),function(row){return _c('tr',{key:row.deviceID},[_c('td',[_c('b-form-input',{model:{value:(row.title),callback:function ($$v) {_vm.$set(row, \"title\", $$v)},expression:\"row.title\"}})],1),_c('td',[_c('b-form-input',{attrs:{\"type\":\"number\"},model:{value:(row.input1),callback:function ($$v) {_vm.$set(row, \"input1\", $$v)},expression:\"row.input1\"}}),(_vm.errors[row.input1])?_c('span',{staticClass:\"text-danger\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\tDuplicate camera number\\n\\t\\t\\t\\t\\t\\t\")]):_vm._e()],1),(_vm.usesDeviceExtraValue)?_c('td',[_c('b-form-input',{model:{value:(row.extraValue),callback:function ($$v) {_vm.$set(row, \"extraValue\", $$v)},expression:\"row.extraValue\"}})],1):_vm._e(),(_vm.deviceSupportsAudio)?[_c('td',{staticClass:\"text-center p-0\"},[_c('b-form-checkbox',{attrs:{\"data-cy\":\"audio-receive-input\"},model:{value:(row.receivesAudio),callback:function ($$v) {_vm.$set(row, \"receivesAudio\", $$v)},expression:\"row.receivesAudio\"}})],1),_c('td',{staticClass:\"text-center p-0\"},[_c('b-form-checkbox',{attrs:{\"data-cy\":\"audio-transmit-input\"},model:{value:(row.transmitsAudio),callback:function ($$v) {_vm.$set(row, \"transmitsAudio\", $$v)},expression:\"row.transmitsAudio\"}})],1)]:_vm._e(),_c('td',{class:_vm.isCameraPreviewEnabled ? 'actions-column-double' : 'actions-column-single'},[(_vm.isCameraEnabled(row.deviceID))?_c('span',[(_vm.isCameraPreviewEnabled && row.deviceID && !_vm.rowHasChanges)?_c('i',{staticClass:\"hover-icon fas fa-cctv single-action-icon p-2\",attrs:{\"title\":\"Preview Camera\",\"data-cy\":\"camera-preview-icon\"},on:{\"click\":function($event){return _vm.showOrUpdateCameraPreview(row)}}}):_c('i',{staticClass:\"fal fa-cctv p-2\",attrs:{\"title\":\"Changes must be saved before camera can be previewed.\"}})]):_c('span',[_c('i',{staticClass:\"fal fa-cctv p-2\",attrs:{\"title\":_vm.applianceOfflineNotification(row.deviceID)}})]),_c('i',{staticClass:\"hover-icon fas fa-trash p-2\",on:{\"click\":function($event){return _vm.removeDevice(row.deviceID)}}})])],2)}),0)]),_c('b-button',{staticClass:\"btn btn-primary btn-right\",attrs:{\"variant\":\"primary\",\"disabled\":!_vm.isValid},on:{\"click\":function($event){return _vm.addDevice()}}},[_vm._v(\"Add Camera\")]),(_vm.isBillingEnabled)?_c('div',{staticClass:\"p-t-10\",attrs:{\"data-cy\":\"camera-count-changed-notification\"}},[_c('b-alert',{attrs:{\"variant\":\"info\",\"show\":_vm.cameraUsageDifference !== 0 && _vm.isValid}},[_vm._v(\"\\n\\t\\t\\t\\tThis action will change camera subscription usage from \"+_vm._s(_vm.subscription.limitedSubscription ? _vm.subscription.cameras + \"/\" + _vm.subscription.camerasLimit : _vm.subscription.cameras)+\"\\n\\t\\t\\t\\tto \"+_vm._s(_vm.subscription.cameras + _vm.cameraUsageDifference)+_vm._s(_vm.subscription.limitedSubscription ? \"/\" + _vm.subscription.camerasLimit : \"\")+\"\\n\\t\\t\\t\")]),_c('b-alert',{staticClass:\"mb-0\",attrs:{\"variant\":\"danger\",\"show\":!_vm.isValid}},[_vm._v(\"\\n\\t\\t\\t\\tCamera usage limit of \"+_vm._s(this.subscription.camerasLimit)+\" will be exceeded\\n\\t\\t\\t\")])],1):_vm._e(),(_vm.isCameraPreviewShown)?_c('camera-preview',{attrs:{\"previewDetails\":_vm.devicePreviewDetails},on:{\"hidden\":_vm.handleCameraPreviewHidden}}):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('th',{staticClass:\"checkbox-row-header\",attrs:{\"data-cy\":\"audio-receive-heading\"}},[_c('i',{staticClass:\"fa fa-volume\",attrs:{\"title\":\"Audio Receive\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('th',{staticClass:\"checkbox-row-header\",attrs:{\"data-cy\":\"audio-transmit-heading\"}},[_c('i',{staticClass:\"fa fa-microphone\",attrs:{\"title\":\"Audio Transmit\"}})])}]\n\nexport { render, staticRenderFns }","\r\nimport { Component, Vue, Prop, Watch } from \"vue-property-decorator\";\r\nimport { Getter, namespace } from \"vuex-class\";\r\nimport VuePerfectScrollbar from \"vue-perfect-scrollbar\";\r\nimport { SubscriptionDto } from \"@/store/subscription/types.ts\";\r\nimport { FeaturesList } from \"@/store/types\";\r\nimport { get, debounce } from \"lodash\";\r\nimport { ServerType, CameraPreviewDeviceDetails } from \"@/store/devices/types\";\r\nimport CameraPreview from '../device-setup/CameraPreview.vue';\r\n\r\nconst Subscription = namespace(\"subscription\");\r\nconst GenericTable = namespace(\"GenericTable\");\r\nconst Session = namespace(\"sessions\");\r\nconst SiteMonitor = namespace(\"siteMonitor\");\r\n\r\ninterface DeviceRow {\r\n\tdeviceID?: number\r\n\ttitle: string,\r\n\tinput1: number,\r\n\tinput2: number,\r\n\tdeviceTypeID: number,\r\n\ttransmitsAudio?: boolean,\r\n\treceivesAudio?: boolean,\r\n\textraValue?: string\r\n}\r\n\r\n@Component({\r\n\tcomponents: {\r\n\t\t\"camera-preview\": CameraPreview,\r\n\t\tVuePerfectScrollbar: VuePerfectScrollbar\r\n\t}\r\n})\r\nexport default class DeviceList extends Vue {\r\n\r\n\t@Prop({ type: Boolean, default: false }) readonly: boolean;\r\n\r\n\t@Prop({ type: Boolean, default: true }) usesExtraCameraIds: boolean;\r\n\r\n\t@Prop({ type: Boolean, default: false }) usesDeviceExtraValue: boolean;\r\n\r\n\t@Prop({ type: String, default: \"Camera\" }) parentTitle: String;\r\n\r\n\t@Prop()\r\n\tpublic value: any;\r\n\r\n\t@Prop( { type: Boolean, default: false }) isAddingNew: boolean;\r\n\r\n\t@Prop() public model: any;\r\n\r\n\t@Prop({ default: [] }) public deviceTypes: ServerType[];\r\n\r\n\t@Getter(\"getFeaturesList\") featuresList: FeaturesList;\r\n\r\n @GenericTable.State rowHasChanges: boolean;\r\n\r\n\t@Subscription.State subscription: SubscriptionDto;\r\n\t@Subscription.Action fetchSubscription: any;\r\n\r\n\t@SiteMonitor.Action private pollApplianceServerAndDeviceServerDetails: () => Promise;\r\n\t@SiteMonitor.Action private stopPollingApplianceServerAndDeviceServerDetails: () => void;\r\n\t@SiteMonitor.Getter(\"getIsCameraEnabled\") isCameraEnabled: (deviceId: number, test: string) => boolean;\r\n\t@SiteMonitor.Getter(\"getApplianceOfflineNotification\") private applianceOfflineNotification: (deviceId: number) => string;\r\n\r\n\tpublic deviceList: DeviceRow [] = [];\r\n\tprivate devicePreviewDetails: CameraPreviewDeviceDetails;\r\n\r\n\tprivate cameraUsage: number = 0;\r\n\tprivate cameraUsageDifference: number = 0;\r\n\tprivate isCameraPreviewShown: boolean = false;\r\n\tprivate errors = {};\r\n\r\n\tpublic async mounted() {\r\n\t\tif (this.isBillingEnabled) {\r\n\t\t\tawait this.fetchSubscription();\r\n\t\t}\r\n\r\n\t this.cameraUsage = this.subscription?.cameras;\r\n\t\tif (this.value) {\r\n\t\t\tthis.updateFromValue();\r\n\t\t}\r\n\r\n\t\tif(this.isAddingNew) {\r\n\t\t\tArray.from({ length: this.numCameras}, () => this.addDevice())\r\n\t\t}\r\n\r\n\t\tawait this.pollApplianceServerAndDeviceServerDetails();\r\n\t}\r\n\r\n\tpublic beforeDestroy() {\r\n\t\tthis.stopPollingApplianceServerAndDeviceServerDetails();\r\n\t}\r\n\r\n\t@Watch(\"value\")\r\n\tvalueChanged(value: any) {\r\n\t\tif (value) {\r\n\t\t\tthis.updateFromValue();\r\n\t\t}\r\n\t}\r\n\r\n\t@Watch(\"deviceList\", { deep: true })\r\n\tpublic updateDeviceList(deviceList): void {\r\n\t\tif (deviceList) {\r\n\t\t\tthis.$emit(\"input\", deviceList);\r\n\t\t}\r\n\t}\r\n\r\n\t@Watch(\"parentTitle\")\r\n\tpublic parentTitleHandler(parentTitle, oldParentTitle) {\r\n\t\tconst hasPreventRenaming = !parentTitle || oldParentTitle === parentTitle\r\n\t\tif(hasPreventRenaming) return\r\n\t\tthis.renameCameraNameByParentTitle(parentTitle)\r\n\t}\r\n\r\n\t@Watch(\"numCameras\")\r\n\tpublic addDefaultCameras() {\r\n\t\tif(!this.isAddingNew) return\r\n\r\n\t\tconst { length } = this.deviceList\r\n\t\tthis.deviceList.splice(0, length)\r\n\r\n\t\tArray.from({ length: this.numCameras}, () => this.addDevice())\r\n\t}\r\n\r\n\tpublic get renameCameraNameByParentTitle() {\r\n\t\treturn debounce(this.renameCameraNameByTitle, 500)\r\n\t}\r\n\r\n\tpublic renameCameraNameByTitle(parentTitle): void {\r\n\t\tthis.$emit(\"input\",this.deviceList.map(device => {\r\n\t\t\tconst number = device.title.match(/\\d+$/)\r\n\r\n\t\t\treturn {\r\n\t\t\t\t...device,\r\n\t\t\t\ttitle: `${parentTitle} ${(number && number[0]) || ''}`\r\n\t\t\t}\r\n\t\t}))\r\n\t}\r\n\r\n\tpublic get serverTypeID() {\r\n\t\treturn get(this.model, 'serverTypeID');\r\n\t}\r\n\r\n\tpublic get extraValueName() {\r\n\t\treturn get(this.serverTypeID, 'extraValueName');\r\n\t}\r\n\r\n\tpublic get numCameras() {\r\n\t\treturn Math.abs(get(this.serverTypeID, 'numCameras') || 0);\r\n\t}\r\n\r\n\tprivate async addDevice() {\r\n\t\tif (this.isBillingEnabled) {\r\n\t\t\tawait this.fetchSubscription();\r\n\t\t\tthis.cameraUsage = this.subscription.cameras;\r\n\t\t}\r\n\r\n\t\tlet inputs = this.deviceList.map(device => device.input1);\r\n\r\n\t\tlet currentNumber = Math.max(...inputs) + 1;\r\n\t\tif (inputs.length == 0) {\r\n\t\t\tcurrentNumber = 1;\r\n\t\t}\r\n\r\n\t\tthis.deviceList.push({ title: this.parentTitle + \" \" + currentNumber, input1: currentNumber, input2: -1, deviceTypeID: 1 });\r\n\r\n\t\tthis.cameraUsageDifference++;\r\n\t}\r\n\r\n\tprivate async removeDevice(deviceId: any) {\r\n\t\tif (this.isBillingEnabled) {\r\n\t\t\tawait this.fetchSubscription();\r\n\t\t\tthis.cameraUsage = this.subscription.cameras;\r\n\t\t}\r\n\t\tlet index = this.deviceList.findIndex(d => d.deviceID === deviceId);\r\n\t\tthis.deviceList.splice(index, 1);\r\n\t\tthis.cameraUsageDifference--;\r\n\t}\r\n\t/**\r\n\t * Update selected groups list based on model change\r\n\t */\r\n\tprivate updateFromValue() {\r\n\t\tthis.deviceList = this.value;\r\n\t}\r\n\r\n\tprivate get isBillingEnabled(): boolean {\r\n\t\treturn !!get(this.featuresList, [\"Billing\"]) || !!get(this.featuresList, [\"Suite\"]);\r\n\t}\r\n\r\n private get isCameraPreviewEnabled() {\r\n return get(this.featuresList, [\"Devices\", \"CameraPreview\"]);\r\n }\r\n\r\n\tprivate showOrUpdateCameraPreview(device: DeviceRow) {\r\n this.devicePreviewDetails = {\r\n title: device.title,\r\n\t\t\tdeviceId: device.deviceID\r\n };\r\n this.isCameraPreviewShown = true;\r\n }\r\n\r\n private get deviceSupportsAudio(): boolean {\r\n\t\tif (!get(this.featuresList, [\"Devices\", \"CameraAudio\"])) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this.serverTypeID) {\r\n\t\t\treturn this.serverTypeID.numAudioInputs !== 0 && this.serverTypeID.numAudioOutputs;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t@Watch('filteredDeviceList', { deep: true })\r\n\tvalidationFilteredDeviceList() {\r\n\t\tif(!this.filteredDeviceList.length) return this.$emit('isValid', { isValid: true, name: 'DeviceList' })\r\n\r\n\t\tthis.errors = this.filteredDeviceList.reduce((acc, cur) => {\r\n\t\t\tconst key = cur.input1\r\n\r\n\t\t\tif(acc[key] !== undefined) {\r\n\t\t\t\tacc[key] += 1\r\n\r\n\t\t\t\treturn acc\r\n\t\t\t}\r\n\r\n\t\t\tacc[key] = 0\r\n\t\t\treturn acc\r\n\t\t}, {})\r\n\r\n\t\tthis.$emit('isValid', {\r\n\t\t\tisValid: Object.values(this.errors).every(v => !v),\r\n\t\t\tname: 'DeviceList'\r\n\t\t})\r\n\t}\r\n\r\n\tprivate get filteredDeviceList() {\r\n\t\treturn this.deviceList.filter(d => d.deviceTypeID === 1);\r\n\t}\r\n\r\n\tpublic validate(): boolean {\r\n return this.isValid;\r\n }\r\n\r\n private get isValid(): boolean {\r\n if(this.subscription && this.subscription.limitedSubscription) {\r\n if((this.subscription.cameras + this.cameraUsageDifference) > this.subscription.camerasLimit) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n\tprivate handleCameraPreviewHidden(): void {\r\n\t\tthis.isCameraPreviewShown = false;\r\n\t\tthis.devicePreviewDetails = null;\r\n\t}\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeviceList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeviceList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./DeviceList.vue?vue&type=template&id=7eec92e1&scoped=true&\"\nimport script from \"./DeviceList.vue?vue&type=script&lang=ts&\"\nexport * from \"./DeviceList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./DeviceList.vue?vue&type=style&index=0&id=7eec92e1&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7eec92e1\",\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 (_vm.isShowField)?_c('b-form-group',[_c('label',[_vm._v(\"\\n\\t\\tExtra Value:\\n\\t\\t\"),_c('p',{staticClass:\"m-0\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.extraValueName)+\"\\n\\t\\t\")])]),_c('b-form-group',{staticClass:\"form-group\"},[_c('b-form-input',{attrs:{\"id\":'extraValue',\"required\":false,\"maxlength\":8000,\"data-cy\":'gmi-extraValue',\"placeholder\":\"\",\"type\":\"text\"},model:{value:(_vm.localValue),callback:function ($$v) {_vm.localValue=$$v},expression:\"localValue\"}})],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop, Watch } from \"vue-property-decorator\";\r\n\r\n@Component\r\nexport default class ExtraValueField extends Vue {\r\n\t\t@Prop() public value: any;\r\n\t @Prop() public title: string;\r\n\t\t@Prop() public model: any\r\n\r\n\t\tpublic localValue: any = null;\r\n\r\n\t\t@Watch('localValue')\r\n\t\tpublic localValueChanged() {\r\n\t\t\tthis.$emit('input', this.localValue)\r\n\t\t}\r\n\r\n\t\t@Watch('value', { immediate: true })\r\n\t\tpublic valueChanged() {\r\n\t\t\tif(this.value === null) return\r\n\t\t\tthis.localValue = this.value\r\n\t\t}\r\n\r\n\t\t@Watch('isShowField', { immediate: true })\r\n\t\tpublic isShowFieldChanged(cur, prev) {\r\n\t\t\t this.$emit('input', this.isShowField ? this.localValue : null)\r\n\t\t}\r\n\r\n\t\tpublic get serverTypeID() {\r\n\t\t\treturn this.model && this.model.serverTypeID\r\n\t\t}\r\n\r\n\t\tpublic get isShowField() {\r\n\t\t\treturn this.extraValueName !== null\r\n\t\t}\r\n\r\n\t\tpublic get extraValueName() {\r\n\t\t\treturn this.serverTypeID && this.serverTypeID.extraValueName\r\n\t\t}\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExtraValueField.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExtraValueField.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ExtraValueField.vue?vue&type=template&id=49e39ba0&scoped=true&\"\nimport script from \"./ExtraValueField.vue?vue&type=script&lang=ts&\"\nexport * from \"./ExtraValueField.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ExtraValueField.vue?vue&type=style&index=0&id=49e39ba0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49e39ba0\",\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('b-form-group',[_c('label',[_vm._v(\"\\n\\t\\tPort:\\n\\t\")]),_c('b-form-group',{staticClass:\"form-group\"},[_c('b-form-input',{attrs:{\"id\":'port',\"required\":false,\"maxlength\":8000,\"data-cy\":'gmi-extraValue',\"placeholder\":_vm.placeholder,\"type\":\"number\",\"disabled\":_vm.readonly},model:{value:(_vm.localValue),callback:function ($$v) {_vm.localValue=$$v},expression:\"localValue\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop, Watch } from \"vue-property-decorator\";\r\nimport { get } from 'lodash'\r\n\r\n@Component\r\nexport default class PortField extends Vue {\r\n\t@Prop() public value: any;\r\n\t@Prop() public title: string;\r\n\t@Prop() public placeholder: string;\r\n\t@Prop() public readonly: boolean;\r\n\t@Prop() public isAddingNew: boolean;\r\n\t@Prop() public model: any\r\n\r\n\tpublic localValue: any = null;\r\n\r\n\t@Watch('value', { immediate: true })\r\n\tpublic setLocalValue(value) {\r\n\t\tif(this.localValue === value) return\r\n\t\tthis.localValue = value\r\n\t}\r\n\r\n\t@Watch('defaultPort')\r\n\tpublic extraValueNameChanged(cur, prev) {\r\n\t\tif(cur === prev) return\r\n\t\tthis.localValue = cur\r\n\t}\r\n\r\n\t@Watch('localValue')\r\n\tpublic valueChanged() {\r\n\t\tthis.$emit('input', this.currentLocalValue)\r\n\t}\r\n\r\n\tpublic get currentLocalValue() {\r\n\t\treturn this.isEmptyLocalValue ? null : this.localValue\r\n\t}\r\n\r\n\tpublic get isEmptyLocalValue() {\r\n\t\treturn this.localValue === '' || this.localValue === null || this.localValue === undefined\r\n\t}\r\n\r\n\tpublic get serverTypeID() {\r\n\t\treturn get(this.model, 'serverTypeID')\r\n\t}\r\n\r\n\tpublic get defaultPort() {\r\n\t\treturn get(this.serverTypeID, 'defaultPort')\r\n\t}\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PortField.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PortField.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PortField.vue?vue&type=template&id=98feda9e&scoped=true&\"\nimport script from \"./PortField.vue?vue&type=script&lang=ts&\"\nexport * from \"./PortField.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./PortField.vue?vue&type=style&index=0&id=98feda9e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"98feda9e\",\n null\n \n)\n\nexport default component.exports","\r\nimport { Component, Mixins, Vue } from \"vue-property-decorator\";\r\nimport { namespace, Getter } from \"vuex-class\";\r\nimport { get, isEqual } from \"lodash\";\r\n\r\nimport { ServerDetails, ServerType } from \"@/store/devices/types\";\r\nimport { UserPermissions, FeaturesList, CancellableQuery, PaginatedSearchQueryParams } from \"@/store/types\";\r\nimport NavHeader from \"@/components/NavHeader.vue\";\r\nimport GenericTable, { TableHeader } from \"@/components/table/generic-table.vue\";\r\nimport DeviceList from \"@/components/devices/DeviceList.vue\";\r\nimport ApplianceList from \"@/components/devices/ApplianceList.vue\";\r\nimport ExtraValueField from '@/components/devices/ExtraValueField.vue'\r\nimport PortField from \"@/components/devices/PortField.vue\";\r\nimport OpsLinkCameraImport from \"@/components/OpsLinkCameraImport.vue\";\r\nimport AreaTreeSelect from \"@/components/form/AreaTreeSelect.vue\";\r\nimport api from \"@/services/api.service\";\r\nimport { ModalItem } from \"@/components/table/generic-update-modal.vue\";\r\nimport { Constants } from \"@/types/sv-data/devices/Constants\";\r\nimport PaginatedSearch from \"@/mixins/PaginatedSearch\";\r\n\r\nconst GenericTableStore = namespace(\"GenericTable\");\r\nconst Areas = namespace(\"areas\");\r\nconst Subscription = namespace(\"subscription\");\r\n\r\nexport interface ServerRow extends ServerDetails {\r\n\tserverType: ServerType;\r\n\tgroupName: string;\r\n\textraValueName: string;\r\n\tdeviceTypeTitle: string;\r\n}\r\n\r\n@Component({\r\n\tcomponents: {\r\n\t\t\"nav-header\": NavHeader,\r\n\t\t\"generic-table\": GenericTable,\r\n\t\t\"ops-link-camera-import\": OpsLinkCameraImport,\r\n\t}\r\n})\r\nexport default class DevicesPage extends Mixins(PaginatedSearch) {\r\n\t$refs!: {\r\n\t\tgenericTable: any;\r\n\t};\r\n\r\n\t@Getter getPermissions: UserPermissions;\r\n\t@Getter(\"getFeaturesList\") private featuresList: FeaturesList;\r\n\t@Getter(\"getUserId\") private currentUserId!: number;\r\n\t@Getter(\"getUserTenantGroupId\") private usersTenantGroupId: number;\r\n\t@GenericTableStore.Getter private getModalRow: any\r\n\t@Areas.Getter private getAreaTitle: (id) => string;\r\n\t@Areas.Action fetchAreaDictionary: () => Promise;\r\n\t@Areas.State areaDictionary: Map;\r\n\r\n\t@Subscription.Action reloadSubscription: () => Promise;\r\n\r\n\r\n\tprivate serverList: ServerRow[] = [];\r\n\tprivate serverTypes: ServerType[] = [];\r\n\tprivate isLoading: boolean = false;\r\n\r\n\tprivate columns: TableHeader[] = [\r\n\t\t{\r\n\t\t\ttitle: \"Device ID\",\r\n\t\t\tkey: \"serverID\",\r\n\t\t\torder: 1,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The Device ID\",\r\n\t\t\tsearchable: false,\r\n\t\t\tvisible: false,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tsortable: true,\r\n\t\t\tsortKey: \"serverId\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Device Name\",\r\n\t\t\tkey: \"title\",\r\n\t\t\torder: 2,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The device title\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tisTermLabel: true,\r\n\t\t\tsortable: true,\r\n\t\t\tisSortedByDefault: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Area Name\",\r\n\t\t\tkey: \"groupName\",\r\n\t\t\torder: 3,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The name of the area that the device belongs to\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tsortable: true,\r\n\t\t\tsortKey: \"Area\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Device Type\",\r\n\t\t\tkey: \"deviceTypeTitle\",\r\n\t\t\torder: 4,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The device type\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tsortable: true,\r\n\t\t\tsortKey: \"Type\",\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Host\",\r\n\t\t\tkey: \"host\",\r\n\t\t\torder: 5,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The device host\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tsortable: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Port\",\r\n\t\t\tkey: \"port\",\r\n\t\t\torder: 6,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The device port\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"number\",\r\n\t\t\tsortable: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\ttitle: \"Username\",\r\n\t\t\tkey: \"username\",\r\n\t\t\torder: 7,\r\n\t\t\tsortOrder: 0,\r\n\t\t\tsortOrderReversed: false,\r\n\t\t\tdescription: \"The device username\",\r\n\t\t\tsearchable: true,\r\n\t\t\tvisible: true,\r\n\t\t\tdataType: \"input\",\r\n\t\t\tsortable: true,\r\n\t\t},\r\n\t];\r\n\r\n\tprivate get ModalItems() {\r\n\t\treturn [\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Device Name\",\r\n\t\t\t\tkey: \"title\",\r\n\t\t\t\tdataType: \"text\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\tplaceholder: \"Device\",\r\n\t\t\t\torder: 1,\r\n\t\t\t\tmaxLength: 250,\r\n\t\t\t\trequired: true,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Area\",\r\n\t\t\t\tkey: \"groupID\",\r\n\t\t\t\tdataType: \"component\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\tdata: AreaTreeSelect,\r\n\t\t\t\tprops: {\r\n\t\t\t\t\tclearable: false,\r\n\t\t\t\t\treduce: a => a.id\r\n\t\t\t\t},\r\n\t\t\t\tdefaultValue: this.usersTenantGroupId,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Device Type\",\r\n\t\t\t\tkey: \"serverTypeID\",\r\n\t\t\t\tdataType: \"vselect3\",\r\n\t\t\t\tprops: {\r\n\t\t\t\t\treduce: (t) => t.serverTypeID\r\n\t\t\t\t},\r\n\t\t\t\tdata: this.filteredDeviceTypes,\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Ops Link\",\r\n\t\t\t\tkey: \"applianceId\",\r\n\t\t\t\tdataType: \"component\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\tvisible: this.isApplianceEnabled,\r\n\t\t\t\tdata: ApplianceList,\r\n\t\t\t\trequired: this.isApplianceOnly,\r\n\t\t\t\tdescription: \"More Information\",\r\n\t\t\t\tprops: {}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"IP / Hostname\",\r\n\t\t\t\tkey: \"host\",\r\n\t\t\t\tdataType: \"text\",\r\n\t\t\t\treadOnly: this.isApplianceOnly && this.isApplianceSelected,\r\n\t\t\t\tplaceholder: \"127.0.0.1\",\r\n\t\t\t\torder: 3,\r\n\t\t\t\tmaxLength: 100,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"\",\r\n\t\t\t\tkey: \"port\",\r\n\t\t\t\tdataType: \"component\",\r\n\t\t\t\tprops: {\r\n\t\t\t\t\treadonly: this.isApplianceOnly && this.isApplianceSelected,\r\n\t\t\t\t\tplaceholder: \"0\",\r\n\t\t\t\t\ttitle: 'Port'\r\n\t\t\t\t},\r\n\t\t\t\torder: 4,\r\n\t\t\t\tdata: PortField,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Username\",\r\n\t\t\t\tkey: \"username\",\r\n\t\t\t\tdataType: \"text\",\r\n\t\t\t\treadOnly: this.isApplianceOnly && this.isApplianceSelected,\r\n\t\t\t\tplaceholder: \"Username\",\r\n\t\t\t\torder: 5,\r\n\t\t\t\tmaxLength: 50,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Password\",\r\n\t\t\t\tkey: \"password\",\r\n\t\t\t\tdataType: \"password\",\r\n\t\t\t\treadOnly: this.isApplianceOnly && this.isApplianceSelected,\r\n\t\t\t\tplaceholder: \"Password\",\r\n\t\t\t\torder: 6,\r\n\t\t\t\tmaxLength: 50,\r\n\t\t\t\trequired: false,\r\n\t\t\t\tnewOnly: false\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: '',\r\n\t\t\t\tkey: \"extraValue\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\tplaceholder: \"\",\r\n\t\t\t\tprops: {\r\n\t\t\t\t\ttitle: this.extraValueName\r\n\t\t\t\t},\r\n\t\t\t\torder: 6,\r\n\t\t\t\tdata: ExtraValueField,\r\n\t\t\t\tdataType: \"component\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Raise Alarms Serially\",\r\n\t\t\t\tkey: \"isRaiseIndividual\",\r\n\t\t\t\tdataType: \"checkbox\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\torder: 7,\r\n\t\t\t\trequired: false,\r\n\t\t\t\tdescription: \"Raise every alarm that matches this device as its own event\",\r\n\t\t\t\tvisible: get(this.featuresList, [\"Alarms\", \"AdvancedAlarmGrouping\"]) ? true : false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Raise Alarms Grouped\",\r\n\t\t\t\tkey: \"isRaiseGrouped\",\r\n\t\t\t\tdataType: \"checkbox\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\torder: 7,\r\n\t\t\t\trequired: false,\r\n\t\t\t\tdescription: \"Raise every alarm that matches this device together as a single, grouped event\",\r\n\t\t\t\tvisible: get(this.featuresList, [\"Alarms\", \"AdvancedAlarmGrouping\"]) ? true : false,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttitle: \"Cameras\",\r\n\t\t\t\tkey: \"devices\",\r\n\t\t\t\tdataType: \"component\",\r\n\t\t\t\treadOnly: false,\r\n\t\t\t\tvisible: this.allowsCameras,\r\n\t\t\t\tdata: DeviceList,\r\n\t\t\t\tcomponentHasValidation: true,\r\n\t\t\t\tprops: {\r\n\t\t\t\t\tusesExtraCameraIds: this.usesExtraCameraId,\r\n\t\t\t\t\tusesDeviceExtraValue: this.usesDeviceExtraValue,\r\n\t\t\t\t\tparentTitle: this.currentTitle,\r\n\t\t\t\t\tdeviceTypes: this.filteredDeviceTypes\r\n\t\t\t\t},\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t] as ModalItem[];\r\n\t}\r\n\r\n\tprivate isAddingWithOpsLink: boolean = false;\r\n\tprivate isCameraDetectionAvailable: boolean = false;\r\n\r\n\tprivate totalRecords: number = 0;\r\n\r\n\tprivate get isShowCameraDevicesOnly() {\r\n\t\treturn this.isDevicesEnabled && this.isDevicesEnabled.ShowCameraDevicesOnly;\r\n\t}\r\n\r\n\tprivate get sortedDeviceTypes() {\r\n\t\treturn this.serverTypes.sort(({title: a}, {title: b}) => {\r\n\t\t\tif (a < b) return -1;\r\n\r\n\t\t\treturn b < a ? 1 : 0\r\n\t\t});\r\n\t}\r\n\r\n\tprivate get filteredDeviceTypes() {\r\n\t\tconst deviceTypes = this.sortedDeviceTypes.filter(({ hidden }) => !hidden)\r\n\r\n\t\treturn this.isShowCameraDevicesOnly\r\n\t\t\t? deviceTypes.filter(({ numCameras }) => numCameras !== 0)\r\n\t\t\t: deviceTypes\r\n\t}\r\n\r\n\tprivate get isExtraValueName() {\r\n\t\treturn this.getModalRow !== null && this.getModalRow.extraValueName;\r\n\t}\r\n\r\n\tprivate get modalRowTitle () {\r\n\t\treturn this.getModalRow && this.getModalRow.title;\r\n\t}\r\n\r\n\tprivate get allowsCameras() {\r\n\t\treturn this.selectedServerType !== undefined && this.selectedServerType.numCameras != 0;\r\n\t}\r\n\r\n\tprivate get currentTitle() {\r\n\t\treturn this.modalRowTitle || \"Camera\";\r\n\t}\r\n\r\n\tprivate get extraValueName() {\r\n\t\treturn this.isExtraValueName || \"Extra Value\";\r\n\t}\r\n\r\n\tprivate get selectedServerType(): ServerType {\r\n\t\tif (!this.getModalRow || this.serverTypes.length === 0) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\treturn this.serverTypes.find(type => {\r\n\t\t\treturn type.serverTypeID === this.getModalRow.serverTypeID\r\n\t\t});\r\n\t}\r\n\r\n\tprivate get usesDeviceExtraValue() {\r\n\t\treturn this.selectedServerType !== undefined && this.selectedServerType.usesDeviceExtraValue;\r\n\t}\r\n\r\n\tprivate get usesExtraCameraId() {\r\n\t\treturn this.selectedServerType !== undefined && this.selectedServerType.usesExtraCameraIDs.toString().toLowerCase() == \"true\";\r\n\t}\r\n\r\n\tprivate filterCameraOnlyServers(servers: ServerDetails[]) {\r\n\t\treturn servers.filter(({ serverTypeID }) => {\r\n\t\t\tconst currentType = this.serverTypes.find(type => type.serverTypeID == serverTypeID);\r\n\t\t\treturn currentType && currentType.numCameras != 0;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getServerTypeId(serverTypeID) {\r\n\t\treturn this.serverTypes.find(({serverTypeID: id}) => id == serverTypeID);\r\n\t}\r\n\r\n\tprivate async updateData(paginatedSearchQueryParams?: PaginatedSearchQueryParams) {\r\n\t\ttry {\r\n\t\t\tthis.isLoading = true;\r\n\r\n\t\t\tconst cancellableQuery = this.generateNewPaginatedSearchRequest(paginatedSearchQueryParams);\r\n\r\n\t\t\tconst [serversResult, serverTypes] = await Promise.all([\r\n\t\t\t\tapi.getServers(cancellableQuery),\r\n\t\t\t\tapi.getServerTypes()\r\n\t\t\t]);\r\n\r\n\t\t\tconst servers = serversResult.data;\r\n\r\n\t\t\tthis.totalRecords = serversResult.totalRecords;\r\n\r\n\t\t\tthis.serverTypes = serverTypes;\r\n\r\n\t\t\tif (!servers || servers.length == 0) {\r\n\t\t\t\tthis.serverList = [];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst serverList = this.isCameraOnly ?\r\n\t\t\t\tthis.filterCameraOnlyServers(servers) :\r\n\t\t\t\tservers;\r\n\r\n\t\t\tthis.serverList = this.formattedServerList(serverList);\r\n\t\t} catch (ex) {\r\n\t\t\tconsole.log(\"Unexpected error updating state: \" + ex);\r\n\t\t} finally {\r\n\t\t\tthis.isLoading = false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate formattedServerList(serverList: ServerDetails[]): ServerRow[] {\r\n\t\treturn serverList.map(server => {\r\n\t\t\tconst isReadOnly = !!server.syncSystemId && !this.getPermissions.canOverrideGroupSync && !this.getPermissions.isSystemAdmin;\r\n\t\t\tconst serverType = this.getServerTypeId(server.serverTypeID);\r\n\t\t\tconst groupName = this.getAreaTitle(server.groupID);\r\n\t\t\treturn {\r\n\t\t\t\t...server,\r\n\t\t\t\tserverType,\r\n\t\t\t\tgroupName,\r\n\t\t\t\textraValueName: get(serverType,'extraValueName') || '',\r\n\t\t\t\tdeviceTypeTitle: get(serverType,'title') || '',\r\n\t\t\t\treadOnly: isReadOnly,\r\n\t\t\t\treadOnlyMessage: isReadOnly ? \"You do not have permission to edit Sync Devices\" : null\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async onDelete(serverToDelete) {\r\n\t\tawait api.deleteServer(serverToDelete.serverID);\r\n\t\tawait this.updateData(this.mostRecentSearchParams);\r\n\t}\r\n\r\n\tprivate async onAddNew(serverToAdd: ServerRow) {\r\n\t\tlet newServer: ServerDetails = {\r\n\t\t\tserverID: undefined,\r\n\t\t\tserverTypeID: serverToAdd.serverTypeID,\r\n\t\t\ttitle: serverToAdd.title,\r\n\t\t\tgroupID: serverToAdd.groupID,\r\n\t\t\thost: serverToAdd.host,\r\n\t\t\tport: serverToAdd.port || 0,\r\n\t\t\tusername: serverToAdd.username,\r\n\t\t\tpassword: serverToAdd.password,\r\n\t\t\textraValue: serverToAdd.extraValue,\r\n\t\t\tapplianceId: serverToAdd.applianceId\r\n\t\t};\r\n\r\n\t\tnewServer.serverID = await api.addServer(newServer);\r\n\t\tnewServer.devices = serverToAdd.devices;\r\n\t\tawait this.onAddDevice(newServer);\r\n\t\tawait this.updateData(this.mostRecentSearchParams);\r\n\t}\r\n\r\n\tprivate async onSave(serverToUpdate: ServerRow) {\r\n\t\tconst updatedDevices = [...serverToUpdate.devices];\r\n\t\tlet updatedServer: ServerDetails = {\r\n\t\t\tserverID: serverToUpdate.serverID,\r\n\t\t\tserverTypeID: serverToUpdate.serverTypeID,\r\n\t\t\ttitle: serverToUpdate.title,\r\n\t\t\tgroupID: serverToUpdate.groupID,\r\n\t\t\thost: serverToUpdate.host,\r\n\t\t\tport: serverToUpdate.port || 0,\r\n\t\t\tusername: serverToUpdate.username,\r\n\t\t\tpassword: serverToUpdate.password,\r\n\t\t\textraValue: serverToUpdate.extraValue,\r\n\t\t\tapplianceId: serverToUpdate.applianceId\r\n\t\t}\r\n\r\n\t\tawait api.updateServer(updatedServer);\r\n\r\n\t\tupdatedServer.devices = updatedDevices;\r\n\t\tawait this.onAddDevice(updatedServer);\r\n\t\tawait this.updateData(this.mostRecentSearchParams);\r\n\r\n\t\t// GenericTable isn't designed to work without loading from scratch.\r\n\t\t// This call is required to force update its contents after saving, as Device Setup does not close the update modal after saving.\r\n\t\tawait this.$refs.genericTable.openModel({...updatedServer, devices: updatedDevices}, false, false);\r\n\t}\r\n\r\n\tprivate async onAddDevice(serverToAdd: ServerDetails) {\r\n\t\tif (!serverToAdd.devices) return;\r\n\r\n\t\tconst oldDevices = await api.getDevices(serverToAdd.serverID);\r\n\r\n\t\tawait this.updateOldDevices(serverToAdd, oldDevices);\r\n\t\tawait this.addNewDevices(serverToAdd, oldDevices);\r\n\t}\r\n\r\n\tprivate updateOldDevices(serverToAdd, oldDevices) {\r\n\t\treturn Promise.all(oldDevices.map(async oldDevice => {\r\n\t\t\tconst updatedDevice = serverToAdd.devices.find(d => d.deviceID === oldDevice.deviceID);\r\n\t\t\tif(!updatedDevice) return api.deleteDevice(oldDevice.deviceID);\r\n\r\n\t\t\tconst isDeviceModified = !isEqual(updatedDevice, oldDevice);\r\n\t\t\tif(!isDeviceModified) return;\r\n\r\n\t\t\tupdatedDevice.groupID = serverToAdd.groupID;\r\n\t\t\tawait api.updateDevice(updatedDevice);\r\n\t\t}))\r\n\t}\r\n\r\n\tprivate addNewDevices(serverToAdd, oldDevices) {\r\n\t\treturn Promise.all(serverToAdd.devices.map(async newDevice => {\r\n\t\t\tnewDevice.groupID = serverToAdd.groupID;\r\n\r\n\t\t\tconst device = oldDevices.find(({ deviceID }) => newDevice.deviceID == deviceID);\r\n\t\t\t// The device exists in the new list, but not the old\r\n\t\t\tif(device) return\r\n\r\n\t\t\ttry {\r\n\t\t\t\tawait api.addDevice(this.setDataNewDevice(newDevice, serverToAdd.serverID));\r\n\t\t\t} catch (ex) {\r\n\t\t\t\tif(ex.response && ex.response.status === 566){\r\n\t\t\t\t\tVue.prototype.$notify({\r\n\t\t\t\t\t\ttype: \"error\",\r\n\t\t\t\t\t\ttitle: \"Error\",\r\n\t\t\t\t\t\ttext: ex.response.data\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow ex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\t}\r\n\r\n\tprivate setDataNewDevice(newDevice, serverID) {\r\n\t\treturn {\r\n\t\t\t...newDevice,\r\n\t\t\tserverID,\r\n\t\t\tdeviceTypeId: 1,\r\n\t\t\tSettingsMeta: Constants.DEFAULT_CAMERA_SETTINGS_META\r\n\t\t};\r\n\t}\r\n\r\n\tprivate async onModalOpen(modalItem) {\r\n\t\tif (get(modalItem, 'serverID')) {\r\n\t\t\tmodalItem.devices = await api.getDevices(modalItem.serverID);\r\n\t\t\tmodalItem.devices.sort(function(a, b) {\r\n\t\t\t\tif (a.input1 > b.input1) return 1;\r\n\r\n\t\t\t\treturn a.input1 < b.input1 ? -1 : 0;\r\n\t\t\t});\r\n\t\t\tmodalItem.serverType = this.getServerTypeId(modalItem.serverTypeID);\r\n\t\t\tmodalItem.groupName = this.getAreaTitle(modalItem.groupID);\r\n\t\t\tmodalItem.extraValueName = get(modalItem.serverType,'extraValueName') || '';\r\n\t\t\tmodalItem.deviceTypeTitle = get(modalItem.serverType,'title') || '';\r\n\t\t\tVue.set(this.serverList, this.serverList.indexOf(modalItem), modalItem);\r\n\t\t\treturn modalItem;\r\n\t\t}\r\n\t}\r\n\r\n\t// If feature is on / off\r\n\tprivate get isDevicesEnabled() {\r\n\t\treturn get(this.featuresList, [\"Devices\"]);\r\n\t}\r\n\r\n\tprivate get isCameraOnly() {\r\n\t\treturn get(this.featuresList, [\"Devices\", \"ShowCameraDevicesOnly\"]);\r\n\t}\r\n\r\n\tprivate get isSuiteEnabled(): boolean {\r\n\t\treturn get(this.featuresList, [\"Suite\"]);\r\n\t}\r\n\r\n\tprivate get isApplianceEnabled() {\r\n\t\treturn get(this.featuresList, [\"Devices\", \"Appliances\"]);\r\n\t}\r\n\r\n\tprivate get isApplianceSelected() {\r\n\t\treturn !this.modalRowApplianceId;\r\n\t}\r\n\r\n\tprivate get modalRowApplianceId() {\r\n\t\treturn this.getModalRow && this.getModalRow.applianceId !== null && this.getModalRow.applianceId != 0;\r\n\t}\r\n\r\n\tprivate get isApplianceOnly() {\r\n\t\treturn get(this.featuresList, [\"Devices\", \"Appliances\", \"ApplianceOnly\"]);\r\n\t}\r\n\r\n\tprivate async mounted() {\r\n\t\tif (!this.isDevicesEnabled) {\r\n\t\t\tthis.$router.go(-1);\r\n\t\t}\r\n\r\n\t\tif (this.isSuiteEnabled)\r\n\t\t{\r\n\t\t\tawait this.reloadSubscription()\r\n\t\t}\r\n\r\n\t\tif (this.areaDictionary.size === 0) {\r\n\t\t\tawait this.fetchAreaDictionary();\r\n\t\t}\r\n\r\n\t\tawait this.updateData();\r\n\t\tawait this.checkCameraDetectionAvailability();\r\n\t}\r\n\r\n\tprivate async checkCameraDetectionAvailability() {\r\n\t\tlet isFeatureEnabled = get(this.featuresList, [\"Devices\", \"Appliances\", \"CameraDetection\"]);\r\n\t\tif (!isFeatureEnabled) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlet availableDetectors = await api.getApplianceList();\r\n\t\tthis.isCameraDetectionAvailable = availableDetectors.length !== 0;\r\n\t}\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Devices.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Devices.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Devices.vue?vue&type=template&id=6c1fa2cc&scoped=true&\"\nimport script from \"./Devices.vue?vue&type=script&lang=ts&\"\nexport * from \"./Devices.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Devices.vue?vue&type=style&index=0&id=6c1fa2cc&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6c1fa2cc\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeviceList.vue?vue&type=style&index=0&id=7eec92e1&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeviceList.vue?vue&type=style&index=0&id=7eec92e1&scoped=true&lang=scss&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExtraValueField.vue?vue&type=style&index=0&id=49e39ba0&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExtraValueField.vue?vue&type=style&index=0&id=49e39ba0&lang=scss&scoped=true&\""],"sourceRoot":""}