1+ import { create } from '@bufbuild/protobuf' ;
12import { createClient } from '@connectrpc/connect' ;
2- import { createQueryOptions } from '@connectrpc/connect-query' ;
3- import { useSuspenseQueries } from '@tanstack/react-query' ;
3+ import { createConnectQueryKey , createProtobufSafeUpdater , createQueryOptions } from '@connectrpc/connect-query' ;
4+ import { useQueryClient , useSuspenseQueries } from '@tanstack/react-query' ;
45import { useRouteContext } from '@tanstack/react-router' ;
56import { getCoreRowModel , useReactTable } from '@tanstack/react-table' ;
67import CodeMirror from '@uiw/react-codemirror' ;
@@ -21,6 +22,7 @@ import {
2122 bodyRawUpdate ,
2223 bodyUrlEncodedItemList ,
2324} from '@the-dev-tools/spec/collection/item/body/v1/body-BodyService_connectquery' ;
25+ import { ExampleGetResponseSchema } from '@the-dev-tools/spec/collection/item/example/v1/example_pb' ;
2426import {
2527 exampleGet ,
2628 exampleUpdate ,
@@ -48,19 +50,38 @@ interface BodyViewProps {
4850}
4951
5052export const BodyView = ( { deltaExampleId, exampleId, isReadOnly } : BodyViewProps ) => {
51- const query = useConnectSuspenseQuery ( exampleGet , { exampleId } ) ;
52- const updateMutation = useConnectMutation ( exampleUpdate ) ;
53+ const { transport } = useRouteContext ( { from : '__root__' } ) ;
54+
55+ const queryClient = useQueryClient ( ) ;
5356
54- if ( ! query . isSuccess ) return null ;
55- const { bodyKind } = query . data ;
57+ const {
58+ data : { bodyKind } ,
59+ } = useConnectSuspenseQuery ( exampleGet , { exampleId } ) ;
60+ const updateMutation = useConnectMutation ( exampleUpdate ) ;
5661
5762 return (
5863 < div className = 'grid flex-1 grid-cols-[auto_1fr] grid-rows-[auto_1fr] items-start gap-4' >
5964 < RadioGroup
6065 aria-label = 'Body type'
6166 className = 'h-7 justify-center'
6267 isReadOnly = { isReadOnly ?? false }
63- onChange = { ( key ) => void updateMutation . mutate ( { bodyKind : parseInt ( key ) , exampleId } ) }
68+ onChange = { async ( key ) => {
69+ await updateMutation . mutateAsync ( { bodyKind : parseInt ( key ) , exampleId } ) ;
70+
71+ // TODO: remove manual update once optional field normalization is fixed
72+ queryClient . setQueryData (
73+ createConnectQueryKey ( {
74+ cardinality : 'finite' ,
75+ input : { exampleId } ,
76+ schema : exampleGet ,
77+ transport,
78+ } ) ,
79+ createProtobufSafeUpdater ( exampleGet , ( _ ) => ( {
80+ ...( _ ?? create ( ExampleGetResponseSchema ) ) ,
81+ bodyKind : parseInt ( key ) ,
82+ } ) ) ,
83+ ) ;
84+ } }
6485 orientation = 'horizontal'
6586 value = { bodyKind . toString ( ) }
6687 >
0 commit comments