import type { ColumnType, SelectOptionType } from 'nocodb-sdk' export type LocalSelectOptionType = SelectOptionType & { value?: string; bgColor?: string; textColor?: string } export const getOptions = ( column: ColumnType, isEditColumn: boolean, isForm: boolean, isDark: boolean, getColor: GetColorType, ): LocalSelectOptionType[] => { if (column && column?.colOptions) { const opts = column.colOptions ? // todo: fix colOptions type, options does not exist as a property (column.colOptions as any).options.filter((el: SelectOptionType) => el.title !== '') || [] : [] for (const op of opts.filter((el: any) => el.order === null)) { op.title = op.title.replace(/^'/, '').replace(/'$/, '') } const isColorCodeEnabled = parseProp(column.meta)?.isColorCodeEnabled !== false let order = 1 const limitOptionsById = ((parseProp(column.meta)?.limitOptions || []).reduce( (o: Record, f: FormFieldsLimitOptionsType) => { if (order < (f?.order ?? 0)) { order = f.order } return { ...o, [f.id]: f, } }, {}, ) as Record) ?? {} if (!isEditColumn && isForm && parseProp(column.meta)?.isLimitOption && (parseProp(column.meta)?.limitOptions || []).length) { return opts .filter((o: LocalSelectOptionType) => { if (limitOptionsById[o.id]?.show !== undefined) { return limitOptionsById[o.id]?.show } return false }) .map((o: any) => ({ ...o, value: o.title, order: o.id && limitOptionsById[o.id] ? limitOptionsById[o.id]?.order : order++, bgColor: getSelectTypeFieldOptionBgColor({ color: o.color, isDark, getColor, isColorCodeEnabled }), textColor: getSelectTypeFieldOptionTextColor({ color: o.color, isDark, getColor, isColorCodeEnabled }), })) .sort((a, b) => a.order - b.order) } else { return opts.map((o: any) => ({ ...o, value: o.title, bgColor: getSelectTypeFieldOptionBgColor({ color: o.color, isDark, getColor, isColorCodeEnabled }), textColor: getSelectTypeFieldOptionTextColor({ color: o.color, isDark, getColor, isColorCodeEnabled }), })) } } return [] }