Slug Generating Document Action - How to Invalidate Fields or Display an Error

14 replies
Last updated: Mar 13, 2021
I am improving my
slug
generating document action, which replaces the default publish action. Can someone help me understand what my options are for invalidating fields or displaying an error, and then aborting a publish from within my custom publish action? Is there a place in the documentation where I may have missed this? Thanks!
Mar 13, 2021, 12:27 AM
Does this help? https://www.sanity.io/docs/validation#fcadf15930b3 looks like validation isn't very feature rich at the moment. There is a validateDocument function in sanity if you search GitHub though.
Mar 13, 2021, 8:37 PM
user L
, I don't think that helps, unfortunately.
I am trying to ensure that the slug I am setting will be unique and I am doing that within the publish action. I would expect there to be a way to "cancel" or "abort" the publish action.
Mar 13, 2021, 8:42 PM
So your slug has a unique validation on it and when you patch it the document still gets saved?
Mar 13, 2021, 8:58 PM
user L
in my document action, I can choose to publish the document or not. I'm choosing not to, when the slug is not unique. It is at that point that I'd like to send a message to the UI stating why the document cannot be published.
Mar 13, 2021, 9:00 PM
If you throw an error does it appear in a red box near the publish button? somehow the intl-input plugin does it when the doc references another one like that.
Mar 13, 2021, 9:05 PM
This enforced document linking and shows an error after the attempted action https://github.com/LiamMartens/sanity-plugin-intl-input
Mar 13, 2021, 9:06 PM
I will look into that plugin, if I throw an error I see it in the console but not in a popup of any kind.
Mar 13, 2021, 9:09 PM
Ah ok. Wonder if you need to push to the toast module in sanity?
Mar 13, 2021, 9:14 PM
Ill try it out myself on Monday as I'm interested now.
Mar 13, 2021, 9:14 PM
hmmm. I like the idea of using a toast. I just don't know how to get access to the
toast
object to push a new message to. Maybe I'm misunderstanding the docs.
Mar 13, 2021, 9:42 PM
Should be able to use the hook and call it.
Mar 13, 2021, 9:43 PM
Got it, thanks again
user L
!
Mar 13, 2021, 9:47 PM
import {useToast} from '@sanity/ui'
...

const toast = useToast()
...

toast.push({status:'error', title: error})
Mar 13, 2021, 9:47 PM

Sanity.io – build remarkable experiences at scale

Sanity is a customizable solution that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Categorized in