{"version":3,"sources":["webpack:///./src/views/Devices.vue?b3b6","webpack:///./src/components/devices/PortField.vue?50e3","webpack:///./src/views/Devices.vue?132d","webpack:///./src/components/devices/DeviceList.vue?d923","webpack:///./src/components/devices/DeviceList.vue?7f30","webpack:///./src/components/devices/DeviceList.vue?ccaa","webpack:///./src/components/devices/DeviceList.vue","webpack:///./src/components/devices/ExtraValueField.vue?c901","webpack:///./src/components/devices/ExtraValueField.vue?4f8d","webpack:///./src/components/devices/ExtraValueField.vue?062a","webpack:///./src/components/devices/ExtraValueField.vue","webpack:///./src/components/devices/PortField.vue?48fa","webpack:///./src/components/devices/PortField.vue?8d9b","webpack:///./src/components/devices/PortField.vue?026a","webpack:///./src/components/devices/PortField.vue","webpack:///./src/views/Devices.vue?d86f","webpack:///./src/views/Devices.vue?18dd","webpack:///./src/views/Devices.vue","webpack:///./src/components/devices/DeviceList.vue?704e","webpack:///./src/components/devices/ExtraValueField.vue?deb9"],"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","validateSlaBreachSecondsValue","generateErrorMessage","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","isServiceLevelAgreementsEnabled","getPermissions","canEditSLAs","canViewSLAs","validations","isSlaValueValid","withParams","errorMessage","maxResponseSlaDuration","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","canOverrideGroupSync","isSystemAdmin","serverType","groupName","getAreaTitle","groupID","deviceTypeTitle","readOnlyMessage","serverToDelete","deleteServer","serverID","mostRecentSearchParams","serverToAdd","newServer","host","port","username","password","extraValue","applianceId","slaBreachSeconds","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-637ddf5a.32f0e474.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Devices.vue?vue&type=style&index=0&id=7573c674&prod&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PortField.vue?vue&type=style&index=0&id=444b7ac0&prod&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(\" Duplicate camera number \")]):_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(\" This action will change camera subscription usage from \"+_vm._s(_vm.subscription.limitedSubscription ? _vm.subscription.cameras + \"/\" + _vm.subscription.camerasLimit : _vm.subscription.cameras)+\" to \"+_vm._s(_vm.subscription.cameras + _vm.cameraUsageDifference)+_vm._s(_vm.subscription.limitedSubscription ? \"/\" + _vm.subscription.camerasLimit : \"\")+\" \")]),_c('b-alert',{staticClass:\"mb-0\",attrs:{\"variant\":\"danger\",\"show\":!_vm.isValid}},[_vm._v(\" Camera usage limit of \"+_vm._s(this.subscription.camerasLimit)+\" will be exceeded \")])],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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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=e6e5e500&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=e6e5e500&prod&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 \"e6e5e500\",\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(\" Extra Value: \"),_c('p',{staticClass:\"m-0\"},[_vm._v(\" \"+_vm._s(_vm.extraValueName)+\" \")])]),_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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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=26b06d4e&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=26b06d4e&prod&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 \"26b06d4e\",\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(\" Port: \")]),_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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-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=444b7ac0&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=444b7ac0&prod&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 \"444b7ac0\",\n null\n \n)\n\nexport default component.exports","\r\nimport { Component, Mixins, Vue } from \"vue-property-decorator\";\r\nimport { namespace, Getter, Action } 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\nimport { helpers } from 'vuelidate/lib/validators';\r\nimport { serviceLevelAgreementMixins } from '@/mixins';\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\tslaBreachSeconds?: number | null;\r\n}\r\n\r\nconst { validateSlaBreachSecondsValue, generateErrorMessage } = serviceLevelAgreementMixins.methods;\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@Getter(\"getMaxResponseSlaDuration\") maxResponseSlaDuration: number | null;\r\n\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\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\t{\r\n\t\t\t\ttitle: \"Service Level Agreement (SLA) in Seconds\",\r\n\t\t\t\tkey: \"slaBreachSeconds\",\r\n\t\t\t\tdataType: \"number\",\r\n\t\t\t\treadOnly: !(this.isServiceLevelAgreementsEnabled && this.getPermissions.canEditSLAs),\r\n\t\t\t\tvisible: this.isServiceLevelAgreementsEnabled && (this.getPermissions.canViewSLAs || this.getPermissions.canEditSLAs),\r\n\t\t\t\tplaceholder: 'Enter the number of seconds permitted before an alarm breaches the SLA.',\r\n\t\t\t\tdefaultValue: null,\r\n\t\t\t\tvalidations: {\r\n\t\t\t\t\tisSlaValueValid: helpers.withParams(\r\n\t\t\t\t\t\t{ \r\n\t\t\t\t\t\t\ttype: \"isSlaValueValid\", \r\n\t\t\t\t\t\t\terrorMessage: generateErrorMessage(this.maxResponseSlaDuration)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t(value) => {\r\n\t\t\t\t\t\t\treturn validateSlaBreachSecondsValue(value, this.maxResponseSlaDuration)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t)\r\n\t\t\t\t},\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\tslaBreachSeconds: serverToAdd.slaBreachSeconds\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\tslaBreachSeconds: serverToUpdate.slaBreachSeconds\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 isServiceLevelAgreementsEnabled(): boolean {\r\n\t\treturn !!get(this.featuresList, [\"Alarms\", \"SLAs\"]);\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\t\t\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--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-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--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-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=7573c674&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=7573c674&prod&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 \"7573c674\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeviceList.vue?vue&type=style&index=0&id=e6e5e500&prod&scoped=true&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExtraValueField.vue?vue&type=style&index=0&id=26b06d4e&prod&lang=scss&scoped=true\""],"sourceRoot":""}