@yandex/ui
Version:
Yandex UI components
61 lines (60 loc) • 2.36 kB
TypeScript
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>;