INNER CODE UNIT · TypeScript
attributeText
rowboatlabs/rowboat · apps/harbor/packages/server/src/connectors/attio/index.ts:82
function attributeText(value: unknown): string | undefined {
if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;
const v = value as Record<string, unknown>;
if (v.active_until != null) return undefined;
const text = (key: string) => typeof v[key] === 'string' ? v[key] as string : undefined;
const title = (key: string) => {
const nested = v[key];
if (nested && typeof nested === 'object' && 'title' in nested && typeof nested.title === 'string') return nested.title;
return undefined;
};
switch (v.attribute_type) {
case 'text': case 'date': case 'timestamp': return text('value');
case 'number': case 'rating': return typeof v.value === 'number' && Number.isFinite(v.value) ? String(v.value) : undefined;
case 'checkbox': return typeof v.value === 'boolean' ? (v.value ? 'Yes' : 'No') : undefined;
case 'domain': return text('domain');
case 'email-address': return text('email_address');
case 'personal-name': return text('full_name') || [text('first_name'), text('last_name')].filter(Boolean).join(' ');
case 'select': return title('option');