type ConditionalField = { when?: { field: string; equals: string; operator?: 'equals' | 'contains' }; }; export function deskFieldApplies( key: string, fields: Record, payload: Record, ancestors: ReadonlySet = new Set(), ): boolean { const field = fields[key]; if (!field || ancestors.has(key)) return false; if (!field.when) return true; const value = payload[field.when.field]; if (field.when.operator === 'contains') { if ( !Array.isArray(value) || !value.some( (v) => typeof v === 'string' && v === field.when!.equals, ) ) return false; return deskFieldApplies( field.when.field, fields, payload, new Set([...ancestors, key]), ); } if (!['string', 'number', 'boolean'].includes(typeof value)) return false; const answer = typeof value === 'boolean' ? (value ? '1' : '') : String(value); if (answer !== field.when.equals) return false; return deskFieldApplies( field.when.field, fields, payload, new Set([...ancestors, key]), ); }