From 5bddee673f7b833efdd0e2938d50d620b4706128 Mon Sep 17 00:00:00 2001 From: Eddy Wilson Date: Tue, 10 Dec 2019 15:09:58 -0600 Subject: [PATCH] Make Editable accept 'as' prop (#3288) * allow passing 'as' prop to render custom component * Update editable.tsx --- .../slate-react/src/components/editable.tsx | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/packages/slate-react/src/components/editable.tsx b/packages/slate-react/src/components/editable.tsx index b78a6f87c..d99a72e49 100644 --- a/packages/slate-react/src/components/editable.tsx +++ b/packages/slate-react/src/components/editable.tsx @@ -57,22 +57,27 @@ export interface RenderLeafProps { } } +/** + * `EditableProps` are passed to the `` component. + */ + +export type EditableProps = { + decorate?: (entry: NodeEntry) => Range[] + onDOMBeforeInput?: (event: Event) => void + placeholder?: string + readOnly?: boolean + role?: string + style?: React.CSSProperties + renderElement?: (props: RenderElementProps) => JSX.Element + renderLeaf?: (props: RenderLeafProps) => JSX.Element + as?: React.ElementType +} & React.TextareaHTMLAttributes + /** * Editable. */ -export const Editable = ( - props: { - decorate?: (entry: NodeEntry) => Range[] - onDOMBeforeInput?: (event: Event) => void - placeholder?: string - readOnly?: boolean - role?: string - style?: React.CSSProperties - renderElement?: (props: RenderElementProps) => JSX.Element - renderLeaf?: (props: RenderLeafProps) => JSX.Element - } & React.TextareaHTMLAttributes -) => { +export const Editable = (props: EditableProps) => { const { autoFocus, decorate = defaultDecorate, @@ -82,6 +87,7 @@ export const Editable = ( renderElement, renderLeaf, style = {}, + as: Component = 'div', ...attributes } = props const editor = useSlate() @@ -400,7 +406,7 @@ export const Editable = ( return ( -
-
+
) }