import { toAssayMatrixSampleOptions, toInstrumentRunScheduleEvents, toReagentListItems, toSampleOptions, toTemplateDataFrame, } from './adapters' import { propsBinding } from './componentPropsFactory' import type { BioTemplateComponentPropsBinding } from './componentBindings' import type { AssayMatrixTemplate, DataFrameTemplate, InstrumentRunTemplate, ProtocolStepsTemplate, ReagentListTemplate, SampleSheetTemplate, TemplateId, TimeCourseTemplate, } from './types' export function dataFrameProps(template: DataFrameTemplate): BioTemplateComponentPropsBinding { const frame = toTemplateDataFrame(template) return propsBinding(template.template_id as TemplateId, 'DataFrame', { ...frame, searchable: true, sortable: true, size: 'sm', }) } export function sampleSelectorProps(template: SampleSheetTemplate): BioTemplateComponentPropsBinding { const options = toSampleOptions(template) return propsBinding('sample-sheet', 'SampleSelector', { samples: options.map(option => option.label), modelValue: [], }) } export function assayMatrixSampleSelectorProps(template: AssayMatrixTemplate): BioTemplateComponentPropsBinding { const options = toAssayMatrixSampleOptions(template) return propsBinding('assay-matrix', 'SampleSelector', { samples: options.map(option => option.label), modelValue: [], }) } export function timelineProps( template: TimeCourseTemplate | ProtocolStepsTemplate | InstrumentRunTemplate, steps: unknown[], editable = false ): BioTemplateComponentPropsBinding { return propsBinding(template.template_id as TemplateId, 'ExperimentTimeline', { modelValue: steps, orientation: 'vertical', editable, }) } export function scheduleCalendarProps(template: InstrumentRunTemplate): BioTemplateComponentPropsBinding { const events = toInstrumentRunScheduleEvents(template) return propsBinding('instrument-run', 'ScheduleCalendar', { modelValue: events[0]?.start, events, view: 'day', readonly: true, showNavigation: false, showViewToggle: false, }) } export function reagentListProps(template: ReagentListTemplate): BioTemplateComponentPropsBinding { return propsBinding('reagent-list', 'ReagentList', { modelValue: toReagentListItems(template), searchable: true, sortable: true, }) }