Skip to content

Commit 86e4b28

Browse files
committed
Fix body kind "none" option not being updated in normalization
1 parent bfcff50 commit 86e4b28

1 file changed

Lines changed: 28 additions & 7 deletions

File tree

packages/client/src/body.tsx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { create } from '@bufbuild/protobuf';
12
import { 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';
45
import { useRouteContext } from '@tanstack/react-router';
56
import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
67
import 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';
2426
import {
2527
exampleGet,
2628
exampleUpdate,
@@ -48,19 +50,38 @@ interface BodyViewProps {
4850
}
4951

5052
export 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

Comments
 (0)