Looking to dynamically add validation to a mapped array but I’m having trouble in the validation process wit getting the day of the week when the isOpen
boolean is true or not so that the following string types openingHours
and closingHours
will be set to required.
businessHours.tsx
import {defineField, defineType} from 'sanity'
const weekDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].map(
day =>
defineField({
name: day.toLowerCase(),
title: day,
type: 'hours',
initialValue: {
day,
},
}),
)
export default defineType({
name: 'businessHours',
title: 'Business Hours',
type: 'object',
fields: weekDays,
})
hours.tsx
import {defineField, defineType} from 'sanity'
export default defineType({
name: 'hours',
title: 'Open Hours',
type: 'object',
options: {
collapsed: false,
collapsible: true,
},
fields: [
defineField({
name: 'isOpen',
title: 'Is Open',
type: 'boolean',
}),
defineField({
name: 'openingHours',
title: 'Opening Hours',
type: 'string',
validation: Rule =>
Rule.custom((_, {document}) => {
console.log(document)
return document?.isOpen === true ? 'Required' : false
}),
}),
defineField({
name: 'closingHours',
title: 'Closing Hours',
type: 'string',
validation: Rule =>
Rule.custom((_, {document}) => {
console.log(document)
return document?.isOpen === true ? 'Required' : false
}),
}),
],
})
I get an object log of:
{
"_type": "businessHours",
"monday": {
"_type": "hours",
"isOpen": true
},
"sunday": {
"_type": "hours",
"isOpen": true
}
}
In Sanity 3 how can I get dynamically get isOpen
on the day of the week?