plone / volto

React-based frontend for the Plone Content Management System
https://demo.plone.org/
MIT License
446 stars 606 forks source link

@plone/types: Use Generics for contents query to make it easier to type custom content type responses #6195

Open JeffersonBledsoe opened 1 month ago

JeffersonBledsoe commented 1 month ago

Is your feature request related to a problem? Please describe.

Currently to get correct typing for a getContent query using @plone/client, we have to do something like the following:

type CustomContentTypeExtraFields = {
  title_number: number;
};
type CustomContentType = Content & CustomContentTypeExtraFields;
const { data }: { data: CustomContentType } = useSuspenseQuery(getContentQuery({ path: flattenToAppURL(pathname) }));

Having to do { data }: { data: CustomContentType } is a little verbose and becomes even more so once you destructure additional keys from the query. You can do something like const customData = data as CustomContentType, but it's still extra code

Proposed solution

Allow getContentQuery to be passed a generic for it's return type. E.g. getContentQuery<CustomContentType>({ path: flattenToAppURL(pathname) })

ichim-david commented 1 month ago

@sneridagh what do you think of this proposal?

sneridagh commented 1 month ago

@JeffersonBledsoe let's talk, because what you are saying it's not true. In the PoCs the typings are gotten right. I can show you anytime. It worked right the last time, and if it's not, we have a regression. This is the magic of using TanStack Query...

sneridagh commented 1 month ago

@JeffersonBledsoe oh, I see, you are not using declaration merging. As said, this is the only way to go in TS to get all right.

sneridagh commented 1 month ago

@JeffersonBledsoe ok I gave it a second read, sorry but these days are frentic. Let's talk at the meeting.