Handling empty content in Sanity previews with fallbacks
12 replies
Last updated: Sep 17, 2021
S
Does anyone have a solution for how to handle previews breaking when content is empty?
For example, I would like to have a fall-back for all my modules so that if one is empty, it doesn't break the preview (maybe displays a message telling the editor to choose an image or insert content, etc).
For example, I would like to have a fall-back for all my modules so that if one is empty, it doesn't break the preview (maybe displays a message telling the editor to choose an image or insert content, etc).
Sep 17, 2021, 4:28 PM
If you’re looking for a fallback if any item in an array is missing a field, that’s also possible. Please let me know if that’s what you’re after.
Sep 17, 2021, 4:40 PM
S
Thank you - I am reviewing with my team. I will let you know 🙂
Sep 17, 2021, 5:05 PM
S
Thank you - I am reviewing with my team. I will let you know 🙂
Sep 17, 2021, 5:05 PM
S
user A
what about something like this for an image:preview: { select: { image: "image.secure_url", sizing: "layoutSettings.sizing", }, prepare({ image, sizing }) { return { title: `Image ${sizing}`, media: <img src={image.replace(/upload\/v\d+\//, "upload/w_40/")} />, }; }, },
Sep 17, 2021, 5:13 PM
mediamight look like:
import React from 'react' // ... media: image ? <img src={image.replace(/upload\/v\d+\//, "upload/w_40/")} /> : <>🤷♀️</>,
titleto render a certain message based on there being no image, you can do that in a conditional too. With more extensive logic, you might do this outside of the return.
Sep 17, 2021, 5:20 PM
mediamight look like:
import React from 'react' // ... media: image ? <img src={image.replace(/upload\/v\d+\//, "upload/w_40/")} /> : <>🤷♀️</>,
titleto render a certain message based on there being no image, you can do that in a conditional too. With more extensive logic, you might do this outside of the return.
Sep 17, 2021, 5:20 PM
S
Ah, I see this affects the small preview in the editor, but what about in the web preview tab?
Sep 17, 2021, 5:28 PM
That would be handled by the front end code that the live preview is using. Basically the same approach – see if an image exists and return accordingly.
Sep 17, 2021, 5:30 PM
If I remember right you’re not using React, but if you were, it might be something like (where
Or a conditional like:
…is your image handling):
{image && <img src=… />}
Or a conditional like:
{image ? <img src=… /> : <img src='fallback.png' />}
Sep 17, 2021, 5:34 PM
S
With live preview and Sanity you’ll want to optionally chain almost everything.
Assume nothing exists, and that every object is empty!
{image?.asset?._ref && <img…
Assume nothing exists, and that every object is empty!
Sep 17, 2021, 5:58 PM
S
Thank you for your help! I was finally able to get my preview from breaking, and get to end my day with a win. Have a great weekend!
Sep 17, 2021, 7:48 PM
Sanity– build remarkable experiences at scale
Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.