diff --git a/CHANGELOG.md b/CHANGELOG.md index e3b19f70ca..012f4638a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [Unreleased] +### Features +- Add `renderComponent` function in the public API @mnajdova ([#503](https://github.com/stardust-ui/react/pull/503)) + ### Fixes - Fix the behaviour of `AutoControlledComponent` when `undefined` is passed as a prop value @layershifter ([#499](https://github.com/stardust-ui/react/pull/499)) diff --git a/src/index.ts b/src/index.ts index 5313e85590..ef4b0e8a2f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -125,3 +125,8 @@ export { default as dialogBehavior } from './lib/accessibility/Behaviors/Dialog/ // Utilities // export { default as mergeThemes } from './lib/mergeThemes' +export { createComponent } from './lib' +export { + RenderStardustResultConfig, + CreateStardustComponentConfig, +} from './lib/createStardustComponent' diff --git a/src/lib/createStardustComponent.tsx b/src/lib/createStardustComponent.tsx new file mode 100644 index 0000000000..69313598b8 --- /dev/null +++ b/src/lib/createStardustComponent.tsx @@ -0,0 +1,29 @@ +import createComponentInternal from './createComponent' +import * as React from 'react' +import * as _ from 'lodash' +import { ComponentSlotClasses } from '../themes/types' + +export interface RenderStardustResultConfig { + classes: ComponentSlotClasses + rtl: boolean +} + +export interface CreateStardustComponentConfig
{ + displayName: string + render: (props: P & { stardust: RenderStardustResultConfig }) => React.ReactNode +} + +const createComponent =
({ + displayName, + render, +}: CreateStardustComponentConfig
): React.SFC
=> { + return createComponentInternal
({ + displayName, + render: (config, props) => { + const filteredConfig = _.pick(config, ['classes', 'rtl']) + return render(Object.assign({ stardust: filteredConfig }, props)) + }, + }) +} + +export default createComponent diff --git a/src/lib/index.ts b/src/lib/index.ts index 6312ea683a..fbe3a41ab0 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -33,3 +33,4 @@ export { default as leven } from './leven' export { pxToRem, setHTMLFontSize } from './fontSizeUtility' export { customPropTypes } export { default as createAnimationStyles } from './createAnimationStyles' +export { default as createComponent } from './createStardustComponent'