diff --git a/components/ConfigurationsSelectedItem.vue b/components/ConfigurationsSelectedItem.vue index daf4193017a9d1930a048a1776796b5bd6af420c..3682a8271947ba88127ca5e6117d0eb5121293fe 100644 --- a/components/ConfigurationsSelectedItem.vue +++ b/components/ConfigurationsSelectedItem.vue @@ -158,60 +158,9 @@ permissions and limitations under the Licence. <div v-if="value && !readonly" > - <v-btn v-if="isMountedOnSelectedDate" @click="overwriteExistingMountAction"> - Update + <v-btn @click="overwriteExistingMountAction"> + Update existing mount </v-btn> - <v-btn v-else @click="addNewMountAction"> - Update - </v-btn> - <v-menu - v-if="!isMountedOnSelectedDate" - close-on-click - close-on-content-click - offset-x - right - z-indx="999" - > - <template #activator="{ on }"> - <v-btn - data-role="property menu" - icon - small - v-on="on" - > - <v-icon - dense - small - > - mdi-dots-vertical - </v-icon> - </v-btn> - </template> - <v-list> - <v-list-item - dense - @click="overwriteExistingMountAction" - > - <v-list-item-content> - <v-list-item-title> - Update for {{ value.unpack().date | dateToDateTimeStringHHMM }} - <span class="text-caption text--secondary">(UTC)</span> - </v-list-item-title> - </v-list-item-content> - </v-list-item> - <v-list-item - dense - @click="addNewMountAction" - > - <v-list-item-content> - <v-list-item-title> - Update for {{ selectedDate | dateToDateTimeStringHHMM }} - <span class="text-caption text--secondary">(UTC)</span> - </v-list-item-title> - </v-list-item-content> - </v-list-item> - </v-list> - </v-menu> </div> </v-expansion-panel-content> </v-expansion-panel> @@ -391,24 +340,6 @@ readonly currentUserMail:string|null } } - addNewMountAction () { - if (this.validateMountUpdateForm()) { - this.$emit( - 'addNewMountAction', - this.value, - { - offsetX: this.offsetX, - offsetY: this.offsetY, - offsetZ: this.offsetZ, - contact: this.mountContact, - description: this.mountDescription - } - ) - } else { - this.$store.commit('snackbar/setError', 'Please correct the errors') - } - } - selectCurrentUserAsMountContact () { if (this.currentUserMail) { const userIndex = this.contacts.findIndex(c => c.email === this.currentUserMail) diff --git a/components/device/DeviceDeleteDialog.vue b/components/devices/DeviceDeleteDialog.vue similarity index 100% rename from components/device/DeviceDeleteDialog.vue rename to components/devices/DeviceDeleteDialog.vue diff --git a/components/plarform/PlatformDeleteDialog.vue b/components/platforms/PlatformDeleteDialog.vue similarity index 100% rename from components/plarform/PlatformDeleteDialog.vue rename to components/platforms/PlatformDeleteDialog.vue diff --git a/models/Configuration.ts b/models/Configuration.ts index 4a33fe36eef53446158017909ac35a5da43f9c2e..0d601e42111c3a841c5fef3aaaf8b9ac80aa7abc 100644 --- a/models/Configuration.ts +++ b/models/Configuration.ts @@ -214,7 +214,7 @@ export class Configuration implements IConfiguration { this._dynamicLocationEndActions = newActions } - static createFromObject (someObject: Configuration): Configuration { + static createFromObject (someObject: IConfiguration): Configuration { const newObject = new Configuration() newObject.id = someObject.id diff --git a/pages/configurations/_id/platforms-and-devices.vue b/pages/configurations/_id/platforms-and-devices.vue index 98d545fd8c171b9929f2cfcfcf9eb1cc73d9ee72..e532980a67db820b4a097e63ddc21a78d1ac1cc4 100644 --- a/pages/configurations/_id/platforms-and-devices.vue +++ b/pages/configurations/_id/platforms-and-devices.vue @@ -81,7 +81,6 @@ permissions and limitations under the Licence. :current-user-mail="currentUserMail" @remove="removeSelectedNode" @overwriteExistingMountAction="overwriteExistingMountAction" - @addNewMountAction="addNewMountAction" /> <ConfigurationsPlatformDeviceSearch v-if="$auth.loggedIn && (!selectedNode || selectedNode.isPlatform())" @@ -234,10 +233,12 @@ export default class ConfigurationPlatformsAndDevices extends Vue { overwriteExistingMountAction (node: ConfigurationsTreeNode, newSettings: any) { ConfigurationHelper.overwriteExistingMountAction(node, newSettings) - } - - addNewMountAction (node: ConfigurationsTreeNode, newSettings: any) { - ConfigurationHelper.addNewMountAction(node, newSettings, this.configuration, this.selectedDate, this.selectedNode) + // The overwriteExistingMountAction helper overwrites the mount action + // directly in the tree & the configuration. + // We don't need to set those updated mount action additionally + // in the configuration. + // All what is left is to save our change. + this.save() } isPlatformInTree (platform: Platform): boolean { diff --git a/pages/devices/_deviceId/basic/index.vue b/pages/devices/_deviceId/basic/index.vue index ca548544db907fee6d16fc221404341c64dacbbf..92a13f111c19c9383900c6d9c64c21c6f7e89efd 100644 --- a/pages/devices/_deviceId/basic/index.vue +++ b/pages/devices/_deviceId/basic/index.vue @@ -96,7 +96,7 @@ import { Component, Vue, Prop } from 'nuxt-property-decorator' import DeviceBasicData from '@/components/DeviceBasicData.vue' import { Device } from '@/models/Device' -import DeviceDeleteDialog from '@/components/device/DeviceDeleteDialog.vue' +import DeviceDeleteDialog from '@/components/devices/DeviceDeleteDialog.vue' import DotMenu from '@/components/DotMenu.vue' import DotMenuActionCopy from '@/components/DotMenuActionCopy.vue' import DotMenuActionDelete from '@/components/DotMenuActionDelete.vue' diff --git a/pages/devices/index.vue b/pages/devices/index.vue index 803591292732fc8331cf48e3cde69da2f4399222..03f3510e3e4ed8c523efe95be802b6e57e38ba57 100644 --- a/pages/devices/index.vue +++ b/pages/devices/index.vue @@ -431,7 +431,7 @@ import { DeviceType } from '@/models/DeviceType' import { Manufacturer } from '@/models/Manufacturer' import { Status } from '@/models/Status' import { DeviceSearcher } from '@/services/sms/DeviceApi' -import DeviceDeleteDialog from '@/components/device/DeviceDeleteDialog.vue' +import DeviceDeleteDialog from '@/components/devices/DeviceDeleteDialog.vue' import DotMenu from '@/components/DotMenu.vue' import DotMenuActionCopy from '@/components/DotMenuActionCopy.vue' import DotMenuActionDelete from '@/components/DotMenuActionDelete.vue' diff --git a/pages/platforms/_platformId/basic/index.vue b/pages/platforms/_platformId/basic/index.vue index 405121fa94d397af87cf115664252db0d8507414..3bd56e87b94600651abeee9a1e9d1dbed3434735 100644 --- a/pages/platforms/_platformId/basic/index.vue +++ b/pages/platforms/_platformId/basic/index.vue @@ -101,7 +101,7 @@ import PlatformBasicData from '@/components/PlatformBasicData.vue' import DotMenu from '@/components/DotMenu.vue' import DotMenuActionCopy from '@/components/DotMenuActionCopy.vue' import DotMenuActionDelete from '@/components/DotMenuActionDelete.vue' -import PlatformDeleteDialog from '@/components/plarform/PlatformDeleteDialog.vue' +import PlatformDeleteDialog from '@/components/platforms/PlatformDeleteDialog.vue' @Component({ components: { diff --git a/pages/platforms/index.vue b/pages/platforms/index.vue index c3173bfbad4d2abe8e3638ff8ad0eed7edb48868..5910ce66a72a033d2722e925a92333d76a9199af 100644 --- a/pages/platforms/index.vue +++ b/pages/platforms/index.vue @@ -430,7 +430,7 @@ import { Platform } from '@/models/Platform' import { PlatformType } from '@/models/PlatformType' import { Status } from '@/models/Status' import { PlatformSearcher } from '@/services/sms/PlatformApi' -import PlatformDeleteDialog from '@/components/plarform/PlatformDeleteDialog.vue' +import PlatformDeleteDialog from '@/components/platforms/PlatformDeleteDialog.vue' import DotMenu from '@/components/DotMenu.vue' import DotMenuActionCopy from '@/components/DotMenuActionCopy.vue' import DotMenuActionDelete from '@/components/DotMenuActionDelete.vue' diff --git a/test/utils/configurationHelper.test.ts b/test/utils/configurationHelper.test.ts index cc216becb8a242a92445d934204893b7accfb035..ba1d0637f83b59fb555e716ad03a2191232d42b9 100644 --- a/test/utils/configurationHelper.test.ts +++ b/test/utils/configurationHelper.test.ts @@ -43,7 +43,14 @@ import { StaticLocationBeginAction } from '@/models/StaticLocationBeginAction' import { StaticLocationEndAction } from '@/models/StaticLocationEndAction' import { IActionDateWithTextItem } from '@/utils/configurationInterfaces' -import ConfigurationHelper from '@/utils/configurationHelper' +import { Platform } from '@/models/Platform' +import { PlatformMountAction } from '@/models/PlatformMountAction' +import { Contact } from '@/models/Contact' +import { DeviceMountAction } from '@/models/DeviceMountAction' +import { Device } from '@/models/Device' +import { buildConfigurationTree } from '@/modelUtils/mountHelpers' +import configurationHelper from '@/utils/configurationHelper' +import { PlatformNode } from '@/viewmodels/PlatformNode' describe('#getActionDatesWithTextByConfiguration', () => { it('should return a sorted list of action dates', () => { @@ -79,7 +86,7 @@ describe('#getActionDatesWithTextByConfiguration', () => { dynamicLocationEndAction1 ] const selectedDate = DateTime.utc(2021, 10, 6, 12, 0, 0) - const actionDates: IActionDateWithTextItem[] = ConfigurationHelper.getActionDatesWithTextsByConfiguration(configuration, selectedDate, { useMounts: false, useLoctions: true }) + const actionDates: IActionDateWithTextItem[] = configurationHelper.getActionDatesWithTextsByConfiguration(configuration, selectedDate, { useMounts: false, useLoctions: true }) expect(actionDates.length).toEqual(8) expect(actionDates[0]).toHaveProperty('date', DateTime.utc(1999, 8, 1, 10, 0, 0)) @@ -99,3 +106,122 @@ describe('#getActionDatesWithTextByConfiguration', () => { // the 7th item is now - which we can't text because of the time }) }) +describe('#addNewMountAction', () => { + it('should add a new platformMountAction to our configuration', () => { + const platform1 = Platform.createFromObject({ + shortName: 'platform 1', + id: '111', + longName: '', + platformTypeName: '', + platformTypeUri: '', + persistentIdentifier: '', + serialNumber: '', + inventoryNumber: '', + website: '', + manufacturerName: '', + manufacturerUri: '', + statusName: '', + statusUri: '', + attachments: [], + contacts: [], + model: '', + createdAt: DateTime.utc(2021, 12, 15, 8, 54, 13), + updatedAt: DateTime.utc(2021, 12, 15, 8, 54, 13), + createdByUserId: 1, + updatedByUserId: 1, + description: '' + }) + const device1 = Device.createFromObject({ + shortName: 'device 1', + id: '222', + longName: '', + deviceTypeName: '', + deviceTypeUri: '', + persistentIdentifier: '', + serialNumber: '', + inventoryNumber: '', + website: '', + manufacturerName: '', + manufacturerUri: '', + statusName: '', + statusUri: '', + attachments: [], + contacts: [], + model: '', + createdAt: DateTime.utc(2021, 12, 15, 8, 54, 13), + updatedAt: DateTime.utc(2021, 12, 15, 8, 54, 13), + createdByUserId: 1, + updatedByUserId: 1, + description: '', + dualUse: false, + properties: [], + customFields: [] + }) + const contact1 = Contact.createFromObject({ + id: '111111', + givenName: 'Homer', + familyName: 'S', + email: 'homer.j@s', + website: '' + }) + const platformMountAction1 = PlatformMountAction.createFromObject({ + id: '1111', + platform: platform1, + offsetX: 1, + offsetY: 2, + offsetZ: 3, + description: 'This is the very first mount', + contact: contact1, + date: DateTime.utc(2021, 12, 15, 9, 0, 0), + parentPlatform: null + }) + const deviceMountAction1 = DeviceMountAction.createFromObject({ + id: '1112', + device: device1, + offsetX: -1, + offsetY: -2, + offsetZ: -3, + description: 'Mount of the device on the platform', + contact: contact1, + parentPlatform: platform1, + date: DateTime.utc(2021, 12, 15, 9, 0, 0) + }) + const configuration = Configuration.createFromObject({ + id: '123', + label: 'test config', + startDate: null, + endDate: null, + projectName: '', + projectUri: '', + staticLocationBeginActions: [], + staticLocationEndActions: [], + dynamicLocationBeginActions: [], + dynamicLocationEndActions: [], + platformMountActions: [platformMountAction1], + platformUnmountActions: [], + deviceMountActions: [deviceMountAction1], + deviceUnmountActions: [], + contacts: [], + status: '', + location: null + }) + + const selectedDate = DateTime.utc(2021, 12, 15, 9, 15, 0) + const tree = buildConfigurationTree(configuration, selectedDate) + const platformTreeNode: PlatformNode = tree.getPlatformById(platform1.id!)! // id of the platform & not the mount of the platform + + expect(platformTreeNode).not.toBeNull() + + configurationHelper.addNewMountAction(platformTreeNode, { + offsetX: 29, + offsetY: 30, + offsetZ: 17, + description: 'Changed offsets for platform', + contact: contact1 + }, configuration, selectedDate, platformTreeNode) + + expect(configuration.platformMountActions.length).toEqual(2) + expect(configuration.platformMountActions[0].offsetX).toEqual(1) + expect(configuration.platformMountActions[1].offsetX).toEqual(29) + }) +})