fix missing encode / decode for form fields within submissions

This commit is contained in:
Michael Schramm 2022-03-14 13:48:17 +01:00
parent 6d85dc660a
commit b3cacb8481
5 changed files with 29 additions and 6 deletions

View File

@ -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

View File

@ -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

View File

@ -30,7 +30,16 @@ export class FormResolver {
): Promise<FormFieldModel[]> {
const form = await cache.get<FormEntity>(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])

View File

@ -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,
)
}
}

View File

@ -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<SubmissionFieldEntity>,
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<void> {
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)