import type { SelectOption } from '../types' import { getTemplateData } from './templateEnvelopes' import { validateAssayMatrixData } from './templateValidators' import type { AssayMatrixColumnsAdapterResult, AssayMatrixDataFrameAdapterResult, AssayMatrixRowsAdapterResult, AssayMatrixSampleOptionsAdapterResult, AssayMatrixTemplate, AssayMatrixTemplateData, } from './types' /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function toAssayMatrixRows( template: AssayMatrixTemplate | AssayMatrixTemplateData ): AssayMatrixRowsAdapterResult { const data = getTemplateData(template, 'assay-matrix') validateAssayMatrixData(data) const measurements = new Map( data.measurements.map(measurement => [ `${measurement.sampleId}:${measurement.featureId}`, measurement.value ?? null, ]) ) return data.samples.map(sample => { const row: Record = { sampleId: sample.sampleId, name: sample.name, group: sample.group, ...(sample.metadata ?? {}), } for (const feature of data.features) { row[feature.id] = measurements.get(`${sample.sampleId}:${feature.id}`) ?? null } return row }) } /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function toAssayMatrixColumns( template: AssayMatrixTemplate | AssayMatrixTemplateData ): AssayMatrixColumnsAdapterResult { const data = getTemplateData(template, 'assay-matrix') validateAssayMatrixData(data) return [ { key: 'sampleId', label: 'Sample ID', sortable: true }, { key: 'name', label: 'Name', sortable: true }, { key: 'group', label: 'Group', sortable: true }, ...data.features.map(feature => ({ key: feature.id, label: feature.unit ? `${feature.name} (${feature.unit})` : feature.name, sortable: true, align: 'right' as const, })), ] } /** @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function toAssayMatrixDataFrame( template: AssayMatrixTemplate | AssayMatrixTemplateData ): AssayMatrixDataFrameAdapterResult { return { data: toAssayMatrixRows(template), columns: toAssayMatrixColumns(template), rowKey: 'sampleId', } } /** * Convert an assay-matrix template into SampleSelector options derived from assay samples. * * @deprecated Scheduled for removal from the core SDK in MINT 1.4; the biology templates move to a dedicated package or the owning plugins. */ export function toAssayMatrixSampleOptions( template: AssayMatrixTemplate | AssayMatrixTemplateData ): AssayMatrixSampleOptionsAdapterResult { const data = getTemplateData(template, 'assay-matrix') validateAssayMatrixData(data) return data.samples.map((sample): SelectOption => ({ value: sample.sampleId, label: sample.name ?? sample.sampleId, description: sample.group, })) }