I'm currently trying to migrate from
payload-visual-editor
to Payload 2.x's built-in live preview.
My relationship and upload fields all return
null
in the front-end data, regardless of the content of the field or the
depth
parameter passed in
useLivePreview
.
I'm running out of ideas to investigate this further... any suggestions? 🙏
The code I use to grab the data on the front-end:
const { data } = useLivePreview<CmsArticle|null>({
initialData: null,
serverURL: "http://localhost:3000",
depth: 10, // removing/changing this does not change anything
});
console.log(data);
I have a similar issue. I encountered it while using useLivePreview, and it's unclear whether it's a bug or my mistake. I display an image in one place, but after using the useLivePreview hook, the object representing the image is replaced with a string ID of the image. In the screenshot, you can see that the first render of the page have consistent image data, both from GraphQL and the hook's data. Then, the information about the image from the useLivePreview hook becomes a string with an ID. My assumption is that after the page preview renders, preview iframe receives messages from the form where, for some reason, the image is not stored as a complete object. Changing the depth parameter doesn't help too.
console.log(initialPage.contact.contactInfos.image[0].image)
const { data } = useLivePreview<Station>({
initialData: initialPage,
serverURL: 'http://localhost:3000',
})
console.log(data.contact.contactInfos.image[0].image)
Hmm interesting, so you are at least getting the data.
I wonder if, in my case, this is to do with me setting the
initialData
to null. 🤔
In your case, it does indeed very much look like a depth issue, but if the
depth
parameter does not change anything... 🤷♂️
Looks like it might be time to take a look under the hood and see how this thing is made! 😄
Ah, looks like a known issue actually:
https://github.com/payloadcms/payload/issues/4120
Hmmm actually, I'm somehow just now noticing CORS errors, which might be related...
🤔
Oooh now that I've fixed the CORS problem, it seems that it might be an issue with the live preview system making API calls to get the relationship data, and not being able to due to authentication.
Welp, adding my domain to the
csrf
setting in my payload config did the trick. 🙌
So tldr for folks that might stumble upon the same issue of getting
null
in place of your relationship fields data, make sure your front-end is allowed to make requests to Payload using the
cors
and
csrf
options in the Payload config. ✅
eg:
{
cors: [ 'http://localhost:3001' ],
csrf: [ 'http://localhost:3001' ],
}
I'm having similar issues.
Star
Discord
online
Get help straight from the Payload team with an Enterprise License.