diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d2841a..e8d3d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ Template for next version ### Fixed +- missing encode / decode for form fields within submissions (https://github.com/ohmyform/ui/commit/30ff2c96bca20c1641d9cbb96c34cce934e1afea#r68602651) + ### Security ## [1.0.2] - 2022-03-13 diff --git a/src/dto/form/form.field.model.ts b/src/dto/form/form.field.model.ts index 1967e64..f3c7a88 100644 --- a/src/dto/form/form.field.model.ts +++ b/src/dto/form/form.field.model.ts @@ -6,6 +6,8 @@ import { FormFieldRatingModel } from './form.field.rating.model' @ObjectType('FormField') export class FormFieldModel { + readonly _id: number + @Field(() => ID) readonly id: string @@ -39,8 +41,9 @@ export class FormFieldModel { @Field(() => FormFieldRatingModel, { nullable: true }) readonly rating: FormFieldRatingModel - constructor(document: FormFieldEntity) { - this.id = document.id.toString() + constructor(id: string, document: FormFieldEntity) { + this._id = document.id + this.id = id this.idx = document.idx this.title = document.title this.slug = document.slug diff --git a/src/resolver/form/form.resolver.ts b/src/resolver/form/form.resolver.ts index 4dd9262..9f052b7 100644 --- a/src/resolver/form/form.resolver.ts +++ b/src/resolver/form/form.resolver.ts @@ -30,7 +30,16 @@ export class FormResolver { ): Promise { const form = await cache.get(cache.getCacheKey(FormEntity.name, parent._id)) - return form.fields?.map(field => new FormFieldModel(field)).sort((a,b) => a.idx - b.idx) || [] + if (!form.fields) { + return [] + } + + return form.fields + .sort((a,b) => a.idx - b.idx) + .map(field => new FormFieldModel( + this.idService.encode(field.id), + field, + )) } @ResolveField(() => [FormHookModel]) diff --git a/src/resolver/submission/submission.field.resolver.ts b/src/resolver/submission/submission.field.resolver.ts index 509c9f0..a4283bf 100644 --- a/src/resolver/submission/submission.field.resolver.ts +++ b/src/resolver/submission/submission.field.resolver.ts @@ -4,12 +4,14 @@ import { SubmissionFieldModel } from '../../dto/submission/submission.field.mode import { FormFieldEntity } from '../../entity/form.field.entity' import { SubmissionFieldEntity } from '../../entity/submission.field.entity' import { FormFieldService } from '../../service/form/form.field.service' +import { IdService } from '../../service/id.service' import { ContextCache } from '../context.cache' @Resolver(() => SubmissionFieldModel) export class SubmissionFieldResolver { constructor( private readonly formFieldService: FormFieldService, + private readonly idService: IdService, ) { } @@ -33,6 +35,9 @@ export class SubmissionFieldResolver { return null } - return new FormFieldModel(field) + return new FormFieldModel( + this.idService.encode(field.id), + field, + ) } } diff --git a/src/service/submission/submission.set.field.service.ts b/src/service/submission/submission.set.field.service.ts index bfc7df6..0ab66a8 100644 --- a/src/service/submission/submission.set.field.service.ts +++ b/src/service/submission/submission.set.field.service.ts @@ -7,6 +7,7 @@ import { Repository } from 'typeorm' import { SubmissionSetFieldInput } from '../../dto/submission/submission.set.field.input' import { SubmissionEntity } from '../../entity/submission.entity' import { SubmissionFieldContent, SubmissionFieldEntity } from '../../entity/submission.field.entity' +import { IdService } from '../id.service' import { SubmissionHookService } from './submission.hook.service' import { SubmissionNotificationService } from './submission.notification.service' @@ -19,13 +20,16 @@ export class SubmissionSetFieldService { private readonly submissionFieldRepository: Repository, private readonly webHook: SubmissionHookService, private readonly notifications: SubmissionNotificationService, + private readonly idService: IdService, private readonly logger: PinoLogger, ) { logger.setContext(this.constructor.name) } async saveField(submission: SubmissionEntity, input: SubmissionSetFieldInput): Promise { - let field = submission.fields.find(field => field.field.id.toString() === input.field) + const formFieldId = this.idService.decode(input.field) + + let field = submission.fields.find(field => field.field.id === formFieldId) submission.timeElapsed = dayjs().diff(dayjs(submission.created), 'second') @@ -38,7 +42,7 @@ export class SubmissionSetFieldService { field = new SubmissionFieldEntity() field.submission = submission - field.field = submission.form.fields.find(field => field.id.toString() === input.field) + field.field = submission.form.fields.find(field => field.id === formFieldId) field.type = field.field.type field.content = this.parseData(field, input.data)