Skip to content

Commit da6bd71

Browse files
authored
🧿 type: minor improvement on <Watch /> component (#13077)
* 🧿 chore: minor improvement on Watch component * save some bytes * update contract
1 parent c14131f commit da6bd71

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

reports/api-extractor.md.api.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -935,11 +935,7 @@ export type ValidationValueMessage<TValidationValue extends ValidationValue = Va
935935
};
936936

937937
// @public
938-
export const Watch: <const TFieldNames extends readonly FieldPath<TFieldValues>[], TFieldValues extends FieldValues = FieldValues, TContext = any, TTransformedValues = TFieldValues>({ control, names, render, }: {
939-
control: Control<TFieldValues, TContext, TTransformedValues>;
940-
names: TFieldNames;
941-
render: (values: GetValues<TFieldValues, TFieldNames>) => ReactNode;
942-
}) => ReactNode;
938+
export const Watch: <TFieldNames extends readonly FieldPath<TFieldValues>[], TFieldValues extends FieldValues = FieldValues, TContext = any, TTransformedValues = TFieldValues>({ control, names, render, }: WatchProps<TFieldNames, TFieldValues, TContext, TTransformedValues>) => ReactNode;
943939

944940
// @public (undocumented)
945941
export type WatchInternal<TFieldValues> = (fieldNames?: InternalFieldName | InternalFieldName[], defaultValue?: DeepPartial<TFieldValues>, isMounted?: boolean, isGlobal?: boolean) => FieldPathValue<FieldValues, InternalFieldName> | FieldPathValues<FieldValues, InternalFieldName[]>;
@@ -951,10 +947,17 @@ export type WatchObserver<TFieldValues extends FieldValues> = (value: DeepPartia
951947
values?: unknown;
952948
}) => void;
953949

950+
// @public (undocumented)
951+
export type WatchProps<TFieldNames extends readonly FieldPath<TFieldValues>[], TFieldValues extends FieldValues = FieldValues, TContext = any, TTransformedValues = TFieldValues> = {
952+
control: Control<TFieldValues, TContext, TTransformedValues>;
953+
names: TFieldNames;
954+
render: (values: GetValues<TFieldValues, TFieldNames>) => ReactNode;
955+
};
956+
954957
// Warnings were encountered during analysis:
955958
//
956959
// src/types/form.ts:501:3 - (ae-forgotten-export) The symbol "Subscription" needs to be exported by the entry point index.d.ts
957-
// src/watch.tsx:59:3 - (ae-forgotten-export) The symbol "GetValues" needs to be exported by the entry point index.d.ts
960+
// src/watch.tsx:33:3 - (ae-forgotten-export) The symbol "GetValues" needs to be exported by the entry point index.d.ts
958961

959962
// (No @packageDocumentation comment for this package)
960963

src/watch.tsx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ type GetValues<
2222
? readonly []
2323
: never;
2424

25+
export type WatchProps<
26+
TFieldNames extends readonly FieldPath<TFieldValues>[],
27+
TFieldValues extends FieldValues = FieldValues,
28+
TContext = any,
29+
TTransformedValues = TFieldValues,
30+
> = {
31+
control: Control<TFieldValues, TContext, TTransformedValues>;
32+
names: TFieldNames;
33+
render: (values: GetValues<TFieldValues, TFieldNames>) => ReactNode;
34+
};
35+
2536
/**
2637
* Watch component that subscribes to form field changes and re-renders when watched fields update.
2738
*
@@ -45,19 +56,15 @@ type GetValues<
4556
* ```
4657
*/
4758
export const Watch = <
48-
const TFieldNames extends readonly FieldPath<TFieldValues>[],
59+
TFieldNames extends readonly FieldPath<TFieldValues>[],
4960
TFieldValues extends FieldValues = FieldValues,
5061
TContext = any,
5162
TTransformedValues = TFieldValues,
5263
>({
5364
control,
5465
names,
5566
render,
56-
}: {
57-
control: Control<TFieldValues, TContext, TTransformedValues>;
58-
names: TFieldNames;
59-
render: (values: GetValues<TFieldValues, TFieldNames>) => ReactNode;
60-
}) => {
61-
const values = useWatch({ control, name: names });
62-
return render(values as GetValues<TFieldValues, TFieldNames>);
63-
};
67+
}: WatchProps<TFieldNames, TFieldValues, TContext, TTransformedValues>) =>
68+
render(
69+
useWatch({ control, name: names }) as GetValues<TFieldValues, TFieldNames>,
70+
);

0 commit comments

Comments
 (0)