From f20df10ac14b716e743b51606e92f018fd5f15e5 Mon Sep 17 00:00:00 2001 From: Collin Bolles Date: Tue, 4 Nov 2025 10:12:37 -0500 Subject: [PATCH 1/3] Add converter for the lexicon field --- .../pipes/csv/lexicon-field.pipe.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts 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..22e53d4 --- /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; +} From 72ad54e55a5c604aa2a079c1b42816aec8b80679 Mon Sep 17 00:00:00 2001 From: Collin Bolles Date: Tue, 4 Nov 2025 10:12:55 -0500 Subject: [PATCH 2/3] Leverage lexicon converter --- .../download-request/download-request.module.ts | 4 +++- .../services/study-download-request.service.ts | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) 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/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, From 043e61a5b96910a40fd3727b1074cbba29aa258a Mon Sep 17 00:00:00 2001 From: Collin Bolles Date: Tue, 4 Nov 2025 10:13:21 -0500 Subject: [PATCH 3/3] Fix formatting --- .../src/download-request/pipes/csv/lexicon-field.pipe.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index 22e53d4..982c68d 100644 --- a/packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts +++ b/packages/server/src/download-request/pipes/csv/lexicon-field.pipe.ts @@ -1,5 +1,5 @@ -import { Injectable, PipeTransform } from "@nestjs/common"; -import { CsvFieldTest } from "../../../download-request/types/csv-field"; +import { Injectable, PipeTransform } from '@nestjs/common'; +import { CsvFieldTest } from '../../../download-request/types/csv-field'; @Injectable() export class LexiconCsvTransformer implements PipeTransform> { @@ -17,4 +17,4 @@ export const lexiconCsvTest: CsvFieldTest = (uischema, _schema) => { return true; } return false; -} +};