import { type FieldProcessor, FieldSchema, StructureSchema } from '@ephox/boulder'; import type { Result } from '@ephox/katamari'; import * as ComponentSchema from '../../core/ComponentSchema'; import { type FormComponentWithLabel, type FormComponentWithLabelSpec, formComponentWithLabelFields } from './FormComponent'; export interface CollectionSpec extends FormComponentWithLabelSpec { type: 'collection'; // TODO TINY-3229 implement collection columns properly // columns?: number | 'auto'; context?: string; } export interface Collection extends FormComponentWithLabel { type: 'collection'; columns: number | 'auto'; context: string; } export interface CollectionItem { value: string; text: string; icon: string; } const collectionFields: FieldProcessor[] = formComponentWithLabelFields.concat([ ComponentSchema.defaultedColumns('auto'), FieldSchema.defaultedString('context', 'mode:design') ]); export const collectionSchema = StructureSchema.objOf(collectionFields); // TODO: Make type for CollectionItem export const collectionDataProcessor = StructureSchema.arrOfObj([ ComponentSchema.value, ComponentSchema.text, ComponentSchema.icon ]); export const createCollection = (spec: CollectionSpec): Result> => StructureSchema.asRaw('collection', collectionSchema, spec);