From dc8c9ad376085ec50d292190958efb615404a44c Mon Sep 17 00:00:00 2001 From: Nils Brinckmann <nils.brinckmann@gfz-potsdam.de> Date: Thu, 11 Mar 2021 08:43:17 +0100 Subject: [PATCH] Fixed customfields api --- pages/devices/_deviceId/customfields.vue | 4 +- .../_deviceId/customfields/_customfieldId.vue | 2 + .../customfields/_customfieldId/edit.vue | 4 +- .../jsonapi/CustomTextFieldSerializer.ts | 12 +++++- services/Api.ts | 10 ++--- ...{CustomFieldsApi.ts => CustomfieldsApi.ts} | 42 +++++++------------ 6 files changed, 36 insertions(+), 38 deletions(-) rename services/sms/{CustomFieldsApi.ts => CustomfieldsApi.ts} (78%) diff --git a/pages/devices/_deviceId/customfields.vue b/pages/devices/_deviceId/customfields.vue index cdd803465..fab2e3e08 100644 --- a/pages/devices/_deviceId/customfields.vue +++ b/pages/devices/_deviceId/customfields.vue @@ -90,7 +90,7 @@ export default class DeviceCustomFieldsPage extends Vue { addField (): void { const field = new CustomTextField() this.isSaving = true - this.$api.customFields.add(this.deviceId, field).then(() => { + this.$api.customfields.add(this.deviceId, field).then(() => { this.isSaving = false this.$router.push('/devices/' + this.deviceId + '/customfields') }).catch(() => { @@ -103,7 +103,7 @@ export default class DeviceCustomFieldsPage extends Vue { if (!field.id) { return } - this.$api.customFields.deleteById(field.id).then(() => { + this.$api.customfields.deleteById(field.id).then(() => { const index: number = this.customFields.findIndex((f: CustomTextField) => f.id === field.id) if (index > -1) { this.customFields.splice(index, 1) diff --git a/pages/devices/_deviceId/customfields/_customfieldId.vue b/pages/devices/_deviceId/customfields/_customfieldId.vue index 1aed90a81..1ccd4a248 100644 --- a/pages/devices/_deviceId/customfields/_customfieldId.vue +++ b/pages/devices/_deviceId/customfields/_customfieldId.vue @@ -17,6 +17,8 @@ import { Component, Vue, Prop } from 'nuxt-property-decorator' import CustomFieldCard from '@/components/CustomFieldCard.vue' import ProgressIndicator from '@/components/ProgressIndicator.vue' +import { CustomTextField } from '@/models/CustomTextField' + @Component({ components: { CustomFieldCard, diff --git a/pages/devices/_deviceId/customfields/_customfieldId/edit.vue b/pages/devices/_deviceId/customfields/_customfieldId/edit.vue index 9c517ce99..221cd2e54 100644 --- a/pages/devices/_deviceId/customfields/_customfieldId/edit.vue +++ b/pages/devices/_deviceId/customfields/_customfieldId/edit.vue @@ -73,11 +73,11 @@ export default class DeviceCustomFieldsShowPage extends Vue { save (): void { this.isSaving = true - this.$api.customFields.save(this.deviceId, this.valueCopy).then(() => { + this.$api.customfields.update(this.deviceId, this.valueCopy).then(() => { this.isSaving = false this.$emit('input', this.valueCopy) this.$router.push('/devices/' + this.deviceId + '/customfields') - }).catch((e) => { + }).catch((_e: Error) => { this.isSaving = false this.$store.commit('snackbar/setError', 'Failed to save custom field') }) diff --git a/serializers/jsonapi/CustomTextFieldSerializer.ts b/serializers/jsonapi/CustomTextFieldSerializer.ts index 8cc0c0cd8..93db4e32b 100644 --- a/serializers/jsonapi/CustomTextFieldSerializer.ts +++ b/serializers/jsonapi/CustomTextFieldSerializer.ts @@ -31,7 +31,7 @@ */ import { ICustomTextField, CustomTextField } from '@/models/CustomTextField' import { - IJsonApiDataWithOptionalIdWithoutRelationships, + IJsonApiDataWithOptionalId, IJsonApiNestedElement, IJsonApiObject, IJsonApiObjectList, @@ -100,12 +100,20 @@ export class CustomTextFieldSerializer { } } - convertModelToJsonApiData (customField: ICustomTextField): IJsonApiDataWithOptionalIdWithoutRelationships { + convertModelToJsonApiData (customField: ICustomTextField, deviceId: string): IJsonApiDataWithOptionalId { const data: any = { type: 'customfield', attributes: { key: customField.key, value: customField.value + }, + relationships: { + device: { + data: { + type: 'device', + id: deviceId + } + } } } if (customField.id) { diff --git a/services/Api.ts b/services/Api.ts index 161d5016b..cea629b70 100644 --- a/services/Api.ts +++ b/services/Api.ts @@ -36,7 +36,7 @@ import { DeviceApi } from '@/services/sms/DeviceApi' import { PlatformApi } from '@/services/sms/PlatformApi' import { ConfigurationApi } from '@/services/sms/ConfigurationApi' import { ConfigurationStatusApi } from '@/services/sms/ConfigurationStatusApi' -import { CustomFieldsApi } from '@/services/sms/CustomFieldsApi' +import { CustomfieldsApi } from '@/services/sms/CustomfieldsApi' import { CompartmentApi } from '@/services/cv/CompartmentApi' import { DeviceTypeApi } from '@/services/cv/DeviceTypeApi' @@ -59,7 +59,7 @@ export class Api { private readonly _platformApi: PlatformApi private readonly _configurationApi: ConfigurationApi private readonly _configurationStatesApi: ConfigurationStatusApi - private readonly _customFieldsApi: CustomFieldsApi + private readonly _customfieldsApi: CustomfieldsApi private readonly _manufacturerApi: ManufacturerApi private readonly _platformTypeApi: PlatformTypeApi @@ -101,7 +101,7 @@ export class Api { ) this._configurationStatesApi = new ConfigurationStatusApi() - this._customFieldsApi = new CustomFieldsApi( + this._customfieldsApi = new CustomfieldsApi( this.createAxios(smsBaseUrl, '/customfields', smsConfig, getIdToken) ) @@ -185,8 +185,8 @@ export class Api { return this._configurationStatesApi } - get customFields (): CustomFieldsApi { - return this._customFieldsApi + get customfields (): CustomfieldsApi { + return this._customfieldsApi } get contacts (): ContactApi { diff --git a/services/sms/CustomFieldsApi.ts b/services/sms/CustomfieldsApi.ts similarity index 78% rename from services/sms/CustomFieldsApi.ts rename to services/sms/CustomfieldsApi.ts index a26bffb37..8bf2807bb 100644 --- a/services/sms/CustomFieldsApi.ts +++ b/services/sms/CustomfieldsApi.ts @@ -29,12 +29,12 @@ * implied. See the Licence for the specific language governing * permissions and limitations under the Licence. */ -import { AxiosInstance, Method } from 'axios' +import { AxiosInstance } from 'axios' import { CustomTextField } from '@/models/CustomTextField' import { CustomTextFieldSerializer } from '@/serializers/jsonapi/CustomTextFieldSerializer' -export class CustomFieldsApi { +export class CustomfieldsApi { private axiosApi: AxiosInstance private serializer: CustomTextFieldSerializer @@ -45,9 +45,7 @@ export class CustomFieldsApi { findById (id: string): Promise<CustomTextField> { return this.axiosApi.get(id, { - params: { - include: 'contacts' - } + // params: {} }).then((rawResponse) => { const rawData = rawResponse.data return this.serializer.convertJsonApiObjectToModel(rawData) @@ -59,31 +57,21 @@ export class CustomFieldsApi { } add (deviceId: string, field: CustomTextField) { + const url = '' + const data: any = this.serializer.convertModelToJsonApiData(field, deviceId) + return this.axiosApi.post(url, { data }) } - save (deviceId: string, field: CustomTextField) { - const data: any = this.serializer.convertModelToJsonApiData(field) - let method: Method = 'patch' - let url = deviceId + '/customfields' - - if (field.id === null) { - // new -> post - method = 'post' - } else { - // old -> patch - url += '/' + String(field.id) - } - - console.log(data) - - return this.axiosApi.request({ - url, - method, - data: { - data + update (deviceId: string, field: CustomTextField) { + return new Promise<string>((resolve, reject) => { + if (field.id) { + resolve(field.id) + } else { + reject(new Error('no id for the CustomTextField')) } - }).then((rawServerResponse) => { - console.log(rawServerResponse) + }).then((fieldId) => { + const data: any = this.serializer.convertModelToJsonApiData(field, deviceId) + return this.axiosApi.patch(fieldId, { data }) }) } } -- GitLab