Hej, mam strukture jak nizej, tzn mam komponent BookTree
ktory tworzy refa i podaje go do komponentu Tree
ktory poprzez useImperativeHandle
zwraca ref
z search
i metoda setSearch
. Chcialbym podac tego samego refa do komponentu TreeOptions
i tam miec input
ktory uzywa tej wartosci z refa i ustawia ta wartosc metoda setSearch
. Niestety obecnie caly czas treeRef
w komponencie TreeOptions
jest null
. Jak to poprawnie zrobic?
export const TreeOptions = ({ treeRef }: { treeRef: TreeRef }) => {
return (
<div className='flex flex-col gap-1'>
<div className='flex items-center gap-1.5 p-2'>
<Button
className='h-fit p-2'
variant='ghost'
onClick={() => treeRef.openAll()}
>
<CopyPlusIcon />
</Button>
<Button
className='h-fit p-2'
variant='ghost'
onClick={() => treeRef.closeAll()}
>
<CopyMinusIcon />
</Button>
<Input
className='w-[200px]'
placeholder='Szukaj...'
value={treeRef?.search}
onChange={(e) => treeRef.setSearch(e.target.value)}
/>
</div>
</div>
);
};
export function BookTree({
name,
href,
edit = false,
}: {
name: string;
href?: string;
edit?: boolean;
}) {
const ref = useRef<TreeRef>(null);
const { data, isLoading } = useBook(name);
if (isLoading) return <div>Loading...</div>;
if (!data) return <div>Failed to load...</div>;
return (
<div>
{edit ? (
<EditTreeOptions treeRef={ref.current!} />
) : (
<TreeOptions treeRef={ref.current!} />
)}
<Tree data={toTreeNodeType(data.content)} ref={ref} href={href} />
</div>
);
}