Skip to content

Commit 30e697c

Browse files
web: 3072 fix TypeScript typings for popover portal, selector refs, and owner info (#3080)
* web: fix TypeScript typings for popover portal, selector refs, and owner info - replace deprecated/invalid Radix portal type with PopoverPortalProps - avoid cloneElement ref injection by passing ref via renderInput props contract - make OwnerInfo.avatar_url optional to match internal API response shape * fix: 3072 remove unused import
1 parent 63265a8 commit 30e697c

4 files changed

Lines changed: 11 additions & 9 deletions

File tree

apps/web/components/Analyze/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface OwnerInfo {
1717
id: number;
1818
bio: string;
1919
public_repos: number;
20-
avatar_url: string;
20+
avatar_url?: string;
2121
}
2222

2323
export const getOwnerInfo = (owner: string): Promise<OwnerInfo> => {

apps/web/components/ui/components/InputPopover/InputPopover.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export interface InputPopoverProps {
1010
input: ReactElement;
1111
popperContent: ReactNode;
1212

13-
popoverPortalProps?: Omit<RuiPopover.PortalProps, 'children'>;
13+
popoverPortalProps?: Omit<RuiPopover.PopoverPortalProps, 'children'>;
1414
popoverContentProps?: Omit<RuiPopover.PopoverContentProps, 'children' | 'onOpenAutoFocus'>;
1515
}
1616

apps/web/components/ui/components/RemoteSelector/RemoteSelector.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { ChangeEvent, cloneElement, FocusEvent, MouseEvent, ReactElement, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
1+
import { ChangeEvent, FocusEvent, MouseEvent, ReactElement, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
22
import { InputPopover, InputPopoverProps } from '../InputPopover';
33
import { RemoteSelectedItem } from './RemoteSelectedItem';
44
import { useRemoteList, UseRemoteListOptions } from './useRemoteList';
5+
import { Ref } from 'react';
56

67
export interface RemoteSelectorProps<Item> extends UseRemoteListOptions<Item>, Pick<InputPopoverProps, 'popoverContentProps' | 'popoverPortalProps'> {
78
value: Item[];
@@ -47,6 +48,7 @@ export interface RemoteSelectorInputProps {
4748
onBlur: (event: FocusEvent<HTMLInputElement>) => void;
4849
disabled?: boolean;
4950
placeholder?: string;
51+
ref: Ref<HTMLInputElement>;
5052
}
5153

5254
export interface RemoteSelectorListProps {
@@ -165,16 +167,16 @@ export function RemoteSelector<Item> ({
165167
<InputPopover
166168
open={open}
167169
onOpenChange={onOpenChange}
168-
input={cloneElement(
170+
input={
169171
renderInput({
170172
id,
171173
value: input,
172174
onChange: onInputChange,
173175
onFocus: onInputFocus,
174176
onBlur: onInputBlur,
175-
}),
176-
{ ref: inputRef }
177-
)}
177+
ref: inputRef,
178+
})
179+
}
178180
popperContent={renderChildren()}
179181
popoverPortalProps={popoverPortalProps}
180182
popoverContentProps={popoverContentProps}
@@ -187,7 +189,7 @@ export function RemoteSelector<Item> ({
187189
<InputPopover
188190
open={open}
189191
onOpenChange={onOpenChange}
190-
input={cloneElement(renderInput({ id, value: input, onChange: onInputChange, onFocus: onInputFocus, onBlur: onInputBlur }), { ref: inputRef })}
192+
input={renderInput({ id, value: input, onChange: onInputChange, onFocus: onInputFocus, onBlur: onInputBlur, ref: inputRef })}
191193
popperContent={renderChildren()}
192194
popoverPortalProps={popoverPortalProps}
193195
popoverContentProps={popoverContentProps}

apps/web/components/ui/hooks/useDebouncedCallback.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export type DebouncedOptions = {
88
}
99

1010
export function useDebouncedCallback<Fn extends (...args: any[]) => void> (fn: Fn, { timeout }: DebouncedOptions) {
11-
const debouncedHandle = useRef<ReturnType<typeof setTimeout>>();
11+
const debouncedHandle = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
1212
fn = useLatestValue(fn);
1313

1414
const debouncedFn = useCallback((...params: Parameters<Fn>) => {

0 commit comments

Comments
 (0)