diff --git a/packages/server/src/download-request/download-request.module.ts b/packages/server/src/download-request/download-request.module.ts index 7e1fad6..46d0be7 100644 --- a/packages/server/src/download-request/download-request.module.ts +++ b/packages/server/src/download-request/download-request.module.ts @@ -21,6 +21,7 @@ import { DatasetDownloadRequestPipe } from './pipes/dataset-download-request.pip import { BasicCsvTransformer } from './pipes/csv/basic-field.pipe'; import { VideoCsvTransformer } from './pipes/csv/video-field.pipe'; import { UserModule } from '../user/user.module'; +import { LexiconCsvTransformer } from './pipes/csv/lexicon-field.pipe'; @Module({ imports: [ @@ -48,7 +49,8 @@ import { UserModule } from '../user/user.module'; StudyDownloadRequestPipe, DatasetDownloadRequestPipe, BasicCsvTransformer, - VideoCsvTransformer + VideoCsvTransformer, + LexiconCsvTransformer ] }) export class DownloadRequestModule {} diff --git a/packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts b/packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts new file mode 100644 index 0000000..982c68d --- /dev/null +++ b/packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts @@ -0,0 +1,20 @@ +import { Injectable, PipeTransform } from '@nestjs/common'; +import { CsvFieldTest } from '../../../download-request/types/csv-field'; + +@Injectable() +export class LexiconCsvTransformer implements PipeTransform> { + async transform(value: any): Promise { + if (!value) { + return ''; + } + + return value.key; + } +} + +export const lexiconCsvTest: CsvFieldTest = (uischema, _schema) => { + if (uischema.options?.customType === 'asl-lex') { + return true; + } + return false; +}; diff --git a/packages/server/src/download-request/services/study-download-request.service.ts b/packages/server/src/download-request/services/study-download-request.service.ts index 2f7e87b..6de0cff 100644 --- a/packages/server/src/download-request/services/study-download-request.service.ts +++ b/packages/server/src/download-request/services/study-download-request.service.ts @@ -20,6 +20,7 @@ import { videoCsvTest, VideoCsvTransformer } from '../pipes/csv/video-field.pipe import { basicCsvTest, BasicCsvTransformer } from '../pipes/csv/basic-field.pipe'; import { StudyService } from '../../study/study.service'; import { UserService } from '../../user/user.service'; +import { lexiconCsvTest, LexiconCsvTransformer } from '../pipes/csv/lexicon-field.pipe'; @Injectable() export class StudyDownloadService { @@ -45,7 +46,8 @@ export class StudyDownloadService { private readonly basicCsvTransformer: BasicCsvTransformer, private readonly videoCsvTransformer: VideoCsvTransformer, private readonly studyService: StudyService, - private readonly userService: UserService + private readonly userService: UserService, + private readonly lexiconCsvTransformer: LexiconCsvTransformer ) {} async createDownloadRequest( @@ -369,6 +371,18 @@ export class StudyDownloadService { } }); } + } else if (lexiconCsvTest(uiSchema, dataSchema)) { + csvFields.push({ + header: propertyName, + convertField: async (tag) => { + const tagField = tag.data?.find((field) => field.name == propertyName); + if (!tagField) { + throw new Error(`Tag field ${propertyName} not found`); + } + + return await this.lexiconCsvTransformer.transform(tagField.data); + } + }); } else if (basicCsvTest(uiSchema, dataSchema)) { csvFields.push({ header: propertyName,