UNPKG

@yandex/ui

Version:

Yandex UI components

61 lines (60 loc) 2.36 kB
import React, { FC, ComponentType, ReactElement } from 'react'; export declare type RenderOverride<T = any, U = T> = (props: T, component: React.ComponentType<U>) => ReactElement | null; /** * Реакт-хук для создания компонента с возможностью переопределения. * * @example * const ElementOriginal = ({ children }) => <div>{children}</div> * * const MyComponent = ({ renderElement }) => { * const Element = useRenderOverride(ElementOriginal, renderElement) * return <Element /> * } */ export declare function useRenderOverride<T>(component: ComponentType<T>, render?: RenderOverride<T>): ComponentType<T>; export declare type RenderOverrideProviderProps = { children: (component: ComponentType<any>) => ReactElement; component: ComponentType<any>; render?: RenderOverride; }; /** * Реакт-провайдер для создания компонента с возможностью переопределения. * * @example * const ElementOriginal = ({ children }) => <div>{children}</div> * * const MyComponent = ({ renderElement }) => { * <RenderOverrideProvider component={ElementOriginal} render={renderElement}> * {(Element) => <Element />} * </RenderOverrideProvider> * } */ export declare const RenderOverrideProvider: FC<RenderOverrideProviderProps>; export declare type MultiRenderOverrideProviderProps = { components: [ComponentType<any>, RenderOverride<any> | undefined][]; children: (...components: ComponentType<any>[]) => ReactElement; }; /** * Реакт-провайдер для создания нескольких компонентов с возможностью переопределения. * * @example * const ElementOriginal1 = ({ children }) => <div>{children}</div> * const ElementOriginal2 = ({ children }) => <div>{children}</div> * * const MyComponent = ({ renderElement1, renderElement2 }) => { * <MultiRenderOverrideProvider * components={[ * [ElementOriginal2, renderElement1], * [ElementOriginal2, renderElement2], * ]} * > * {(Element1, Element2) => ( * <> * <Element1 /> * <Element2 /> * </> * )} * </MultiRenderOverrideProvider> * } */ export declare const MultiRenderOverrideProvider: FC<MultiRenderOverrideProviderProps>;