Cannot read properties of undefined (reading 'includes') in Sanity schema
Error: Cannot read properties of undefined (reading 'includes')
TypeError: Cannot read properties of undefined (reading 'includes')
I think it might be from these lines of code:
{
name: 'projectType',
title: 'Type',
type: 'array',
of: [{type: 'string'}],
options: {
list: [
{title: 'Building', value: 'building'},
{title: 'Districts', value: 'districts'},
],
layout: 'radio',
},
description:
'These are the types of properties in a project. Building will have number of floors and units. Districts will have number of villas/townhouses.',
},
{
name: 'numFloors',
title: 'Number of Floors',
type: 'number',
hidden: ({parent}: {parent: {projectType: string[]}}) =>
!parent.projectType.includes('building'),
description: 'It indicates the number of floors in the building.',
},
{
name: 'numUnits',
title: 'Number of Units',
type: 'number',
hidden: ({parent}: {parent: {projectType: string[]}}) =>
!parent.projectType.includes('building'),
description: 'It indicates the number of units in the building.',
},
{
name: 'numOfHouses',
title: 'Number of Villas/Townhouses',
type: 'number',
hidden: ({parent}: {parent: {projectType: string[]}}) =>
!parent.projectType.includes('districts'),
description: 'It indicates the number of villas or townhouses in the district.',
},The error is happening because parent.projectType is undefined when your conditional hidden functions run, but you're calling .includes() on it without checking if it exists first.
Fix: Add optional chaining to safely handle undefined values:
hidden: ({parent}: {parent: {projectType?: string[]}}) =>
!parent.projectType?.includes('building'),Apply this pattern to all three conditional fields (numFloors, numUnits, and numOfHouses).
The ?. operator will return undefined if projectType is undefined, and since !undefined is true, the fields will be hidden by default when no project type is selected - which is exactly what you want.
This typically breaks when creating new documents or when the projectType field hasn't been set yet. The optional chaining prevents the error and provides sensible default behavior.
Show original thread1 reply
Was this answer helpful?
Sanity – Build the way you think, not the way your CMS thinks
Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.