Skip to content
Snippets Groups Projects
Verified Commit 94db043f authored by Marc Hanisch's avatar Marc Hanisch
Browse files

uses actiontypes from the CV

parent c0757d2f
No related branches found
No related tags found
2 merge requests!104Load and save Generic Device Actions,!93Actions UI for devices
...@@ -63,7 +63,7 @@ permissions and limitations under the Licence. ...@@ -63,7 +63,7 @@ permissions and limitations under the Licence.
Add Add
</v-btn> </v-btn>
<v-btn <v-btn
v-else-if="otherChosen" v-else-if="genericActionChosen"
color="green" color="green"
small small
:disabled="isSaving" :disabled="isSaving"
...@@ -75,7 +75,7 @@ permissions and limitations under the Licence. ...@@ -75,7 +75,7 @@ permissions and limitations under the Licence.
<v-card-text> <v-card-text>
<v-select <v-select
v-model="chosenKindOfAction" v-model="chosenKindOfAction"
:items="optionsForActionType" :items="getActionTypeItems()"
:item-text="(x) => x.name" :item-text="(x) => x.name"
:item-value="(x) => x" :item-value="(x) => x"
clearable clearable
...@@ -173,7 +173,7 @@ permissions and limitations under the Licence. ...@@ -173,7 +173,7 @@ permissions and limitations under the Licence.
</v-row> </v-row>
</v-card-text> </v-card-text>
<v-card-text <v-card-text
v-if="otherChosen" v-if="genericActionChosen"
> >
<GenericActionForm <GenericActionForm
ref="genericDeviceActionForm" ref="genericDeviceActionForm"
...@@ -183,7 +183,7 @@ permissions and limitations under the Licence. ...@@ -183,7 +183,7 @@ permissions and limitations under the Licence.
</v-card-text> </v-card-text>
<!-- action type independent --> <!-- action type independent -->
<v-card-text <v-card-text
v-if="chosenKindOfAction && !otherChosen" v-if="chosenKindOfAction && !genericActionChosen"
> >
<v-row> <v-row>
<v-col cols="12" md="12"> <v-col cols="12" md="12">
...@@ -260,7 +260,7 @@ permissions and limitations under the Licence. ...@@ -260,7 +260,7 @@ permissions and limitations under the Licence.
Add Add
</v-btn> </v-btn>
<v-btn <v-btn
v-else-if="otherChosen" v-else-if="genericActionChosen"
color="green" color="green"
small small
:disabled="isSaving" :disabled="isSaving"
...@@ -281,13 +281,18 @@ import { Contact } from '@/models/Contact' ...@@ -281,13 +281,18 @@ import { Contact } from '@/models/Contact'
import { Attachment } from '@/models/Attachment' import { Attachment } from '@/models/Attachment'
import { DeviceProperty } from '@/models/DeviceProperty' import { DeviceProperty } from '@/models/DeviceProperty'
import { GenericAction } from '@/models/GenericAction' import { GenericAction } from '@/models/GenericAction'
import { IActionType, ActionType } from '@/models/ActionType'
import { dateToString, stringToDate } from '@/utils/dateHelper' import { dateToString, stringToDate } from '@/utils/dateHelper'
import GenericActionForm from '@/components/GenericActionForm.vue' import GenericActionForm from '@/components/GenericActionForm.vue'
import DatePicker from '@/components/DatePicker.vue' import DatePicker from '@/components/DatePicker.vue'
type KindOfActionType = 'device_calibration' | 'software_update' | 'generic_device_action' const KIND_OF_ACTION_TYPE_DEVICE_CALIBRATION = 'device_calibration'
const KIND_OF_ACTION_TYPE_SOFTWARE_UPDATE = 'software_update'
const KIND_OF_ACTION_TYPE_GENERIC_DEVICE_ACTION = 'generic_device_action'
const KIND_OF_ACTION_TYPE_UNKNOWN = 'unknown'
type KindOfActionType = typeof KIND_OF_ACTION_TYPE_DEVICE_CALIBRATION | typeof KIND_OF_ACTION_TYPE_SOFTWARE_UPDATE | typeof KIND_OF_ACTION_TYPE_GENERIC_DEVICE_ACTION | typeof KIND_OF_ACTION_TYPE_UNKNOWN
interface IOptionsForActionType { interface IOptionsForActionType {
id: string id: string
...@@ -317,12 +322,7 @@ export default class ActionAddPage extends Vue { ...@@ -317,12 +322,7 @@ export default class ActionAddPage extends Vue {
private contactIsValid = true private contactIsValid = true
private softwareTypeIsValid = true private softwareTypeIsValid = true
private optionsForActionType: IOptionsForActionType[] = [ private actionTypes: ActionType[] = []
{ id: 'device-calibration', kind: 'device_calibration', name: 'Device calibration' },
{ id: 'software-update', kind: 'software_update', name: 'Software update' },
{ id: 'generic-action-1', kind: 'generic_device_action', /* uri: 'actionTypes/device_visit', */ name: 'Device visit' },
{ id: 'generic-action-2', kind: 'generic_device_action', /* uri: 'actionTypes/device_maintenance', */ name: 'Device maintenance' }
]
private contacts: Contact[] = [] private contacts: Contact[] = []
private selectedContact: Contact | null = null private selectedContact: Contact | null = null
...@@ -348,6 +348,16 @@ export default class ActionAddPage extends Vue { ...@@ -348,6 +348,16 @@ export default class ActionAddPage extends Vue {
private _isSaving: boolean = false private _isSaving: boolean = false
async fetch () {
await Promise.all([
this.fetchActionTypes()
])
}
async fetchActionTypes (): Promise<any> {
this.actionTypes = await this.$api.actionTypes.findAllPaginated()
}
mounted () { mounted () {
this.$api.contacts.findAll().then((foundContacts) => { this.$api.contacts.findAll().then((foundContacts) => {
this.contacts = foundContacts this.contacts = foundContacts
...@@ -388,9 +398,8 @@ export default class ActionAddPage extends Vue { ...@@ -388,9 +398,8 @@ export default class ActionAddPage extends Vue {
if (this.$data._chosenKindOfAction?.kind !== newValue?.kind) { if (this.$data._chosenKindOfAction?.kind !== newValue?.kind) {
this.resetAllActionSpecificInputs() this.resetAllActionSpecificInputs()
} }
if (this.otherChosen) { if (this.genericActionChosen) {
this.genericDeviceAction = new GenericAction() this.genericDeviceAction = new GenericAction()
// TODO: we still need those values from the controlled vocabulary
this.genericDeviceAction.actionTypeName = newValue?.name || '' this.genericDeviceAction.actionTypeName = newValue?.name || ''
this.genericDeviceAction.actionTypeUrl = newValue?.uri || '' this.genericDeviceAction.actionTypeUrl = newValue?.uri || ''
} }
...@@ -407,15 +416,15 @@ export default class ActionAddPage extends Vue { ...@@ -407,15 +416,15 @@ export default class ActionAddPage extends Vue {
} }
get deviceCalibrationChosen () { get deviceCalibrationChosen () {
return this.$data._chosenKindOfAction?.kind === 'device_calibration' return this.$data._chosenKindOfAction?.kind === KIND_OF_ACTION_TYPE_DEVICE_CALIBRATION
} }
get softwareUpdateChosen () { get softwareUpdateChosen () {
return this.$data._chosenKindOfAction?.kind === 'software_update' return this.$data._chosenKindOfAction?.kind === KIND_OF_ACTION_TYPE_SOFTWARE_UPDATE
} }
get otherChosen () { get genericActionChosen () {
return this.$data._chosenKindOfAction?.kind === 'generic_device_action' return this.$data._chosenKindOfAction?.kind === KIND_OF_ACTION_TYPE_GENERIC_DEVICE_ACTION
} }
getStartDate (): string { getStartDate (): string {
...@@ -554,6 +563,29 @@ export default class ActionAddPage extends Vue { ...@@ -554,6 +563,29 @@ export default class ActionAddPage extends Vue {
this.isSaving = false this.isSaving = false
}) })
} }
getActionTypeItems (): IOptionsForActionType[] {
const result: IOptionsForActionType[] = this.actionTypes.filter(i => i.name.match(/device/i)).map((i) => {
let kind: KindOfActionType = KIND_OF_ACTION_TYPE_UNKNOWN
// TODO: is there another way to get the kind of action than parsing the name?
if (i.name.match(/maintenance/i)) {
kind = KIND_OF_ACTION_TYPE_GENERIC_DEVICE_ACTION
} else if (i.name.match(/observation/i)) {
kind = KIND_OF_ACTION_TYPE_GENERIC_DEVICE_ACTION
} else if (i.name.match(/update/i)) {
kind = KIND_OF_ACTION_TYPE_SOFTWARE_UPDATE
} else if (i.name.match(/calibration/i)) {
kind = KIND_OF_ACTION_TYPE_DEVICE_CALIBRATION
}
return {
id: i.id,
name: i.name,
uri: i.uri,
kind
} as IOptionsForActionType
})
return result
}
} }
</script> </script>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment