Files
mp-pilates/packages/shared/src/lesson-feedback.ts

21 lines
911 B
TypeScript

export const LESSON_APPARATUS = ['M', 'R', 'TT', 'Chair', 'ARC', 'SC', 'LB'] as const
export type LessonApparatus = typeof LESSON_APPARATUS[number]
export type ApparatusNotes = Partial<Record<LessonApparatus, string>>
export const LESSON_NOTE_MAX_LENGTH = 1000
export function isApparatusNotes(value: unknown): value is ApparatusNotes {
if (!value || typeof value !== 'object' || Array.isArray(value)) return false
return Object.entries(value).every(([key, content]) =>
LESSON_APPARATUS.includes(key as LessonApparatus) &&
typeof content === 'string' && content.length <= LESSON_NOTE_MAX_LENGTH,
)
}
// Keep a stable apparatus order and omit fields the coach left blank.
export function filledApparatusNotes(notes?: ApparatusNotes | null) {
return LESSON_APPARATUS.flatMap(apparatus => {
const content = notes?.[apparatus]?.trim()
return content ? [{ apparatus, content }] : []
})
}