1- import React , { CSSProperties , useCallback , useEffect , useState } from 'react' ;
1+ import { CSSProperties , memo , useCallback , useEffect , useState } from 'react' ;
22
33import { defaultOptions } from '@diplodoc/transform/lib/sanitize' ;
44import { Button , DropdownMenu } from '@gravity-ui/uikit' ;
5- import { toaster } from '@gravity-ui/uikit/toaster-singleton-react-18' ;
65
76import {
87 type DirectiveSyntaxValue ,
@@ -75,14 +74,7 @@ export type PlaygroundProps = {
7574 onChangeEditorType ?: ( mode : MarkdownEditorMode ) => void ;
7675 onChangeSplitModeEnabled ?: ( splitModeEnabled : boolean ) => void ;
7776 directiveSyntax ?: DirectiveSyntaxValue ;
78- } & Pick <
79- UseMarkdownEditorProps ,
80- | 'needToSetDimensionsForUploadedImages'
81- | 'extraExtensions'
82- | 'renderPreview'
83- | 'extensionOptions'
84- | 'experimental'
85- > &
77+ } & Pick < UseMarkdownEditorProps , 'experimental' | 'wysiwygConfig' > &
8678 Pick <
8779 MarkdownEditorViewProps ,
8880 | 'markupHiddenActionsConfig'
@@ -99,7 +91,7 @@ logger.setLogger({
9991 ...console ,
10092} ) ;
10193
102- export const Playground = React . memo < PlaygroundProps > ( ( props ) => {
94+ export const Playground = memo < PlaygroundProps > ( ( props ) => {
10395 const {
10496 initial,
10597 initialEditor,
@@ -116,8 +108,7 @@ export const Playground = React.memo<PlaygroundProps>((props) => {
116108 stickyToolbar,
117109 renderPreviewDefined,
118110 height,
119- extraExtensions,
120- extensionOptions,
111+ wysiwygConfig,
121112 toolbarsPreset,
122113 wysiwygToolbarConfig,
123114 wysiwygCommandMenuConfig,
@@ -126,16 +117,13 @@ export const Playground = React.memo<PlaygroundProps>((props) => {
126117 placeholderOptions,
127118 enableSubmitInPreview,
128119 hidePreviewAfterSubmit,
129- needToSetDimensionsForUploadedImages,
130120 experimental,
131121 directiveSyntax,
132122 } = props ;
133- const [ editorMode , setEditorMode ] = React . useState < MarkdownEditorMode > (
134- initialEditor ?? 'wysiwyg' ,
135- ) ;
136- const [ mdRaw , setMdRaw ] = React . useState < MarkupString > ( initial || '' ) ;
123+ const [ editorMode , setEditorMode ] = useState < MarkdownEditorMode > ( initialEditor ?? 'wysiwyg' ) ;
124+ const [ mdRaw , setMdRaw ] = useState < MarkupString > ( initial || '' ) ;
137125
138- React . useEffect ( ( ) => {
126+ useEffect ( ( ) => {
139127 updateLocation ( mdRaw ) ;
140128 } , [ mdRaw ] ) ;
141129
@@ -193,39 +181,44 @@ export const Playground = React.memo<PlaygroundProps>((props) => {
193181 </style
194182 ` ,
195183 } ) ;
196- if ( extraExtensions ) builder . use ( extraExtensions ) ;
184+ if ( wysiwygConfig ?. extensions ) builder . use ( wysiwygConfig . extensions ) ;
185+ } ,
186+ extensionOptions : {
187+ commandMenu : { actions : wysiwygCommandMenuConfig ?? wCommandMenuConfig } ,
188+ imgSize : {
189+ parseInsertedUrlAsImage,
190+ } ,
191+ ...wysiwygConfig ?. extensionOptions ,
197192 } ,
198193 } ,
199- allowHTML,
200- linkify,
201- linkifyTlds,
202- initialMarkup : mdRaw ,
203- breaks : breaks ?? true ,
204- initialEditorMode : editorMode ,
205- initialSplitModeEnabled : initialSplitModeEnabled ,
206- initialToolbarVisible : true ,
207- splitMode : splitModeOrientation ,
208- needToSetDimensionsForUploadedImages,
209- renderPreview : renderPreviewDefined ? renderPreview : undefined ,
210- fileUploadHandler,
194+ md : {
195+ html : allowHTML ,
196+ linkify,
197+ linkifyTlds,
198+ breaks : breaks ?? true ,
199+ } ,
200+ initial : {
201+ markup : mdRaw ,
202+ mode : editorMode ,
203+ toolbarVisible : true ,
204+ splitModeEnabled : initialSplitModeEnabled ,
205+ } ,
206+ handlers : {
207+ uploadFile : fileUploadHandler ,
208+ } ,
211209 experimental : {
212210 ...experimental ,
213211 directiveSyntax,
214- preserveEmptyRows : preserveEmptyRows ,
215- } ,
216- prepareRawMarkup : prepareRawMarkup
217- ? ( value ) => '**prepare raw markup**\n\n' + value
218- : undefined ,
219- extensionOptions : {
220- commandMenu : { actions : wysiwygCommandMenuConfig ?? wCommandMenuConfig } ,
221- imgSize : {
222- parseInsertedUrlAsImage,
223- } ,
224- ...extensionOptions ,
212+ preserveEmptyRows,
213+ prepareRawMarkup : prepareRawMarkup
214+ ? ( value ) => '**prepare raw markup**\n\n' + value
215+ : undefined ,
225216 } ,
226217 markupConfig : {
227218 extensions : markupConfigExtensions ,
228219 parseInsertedUrlAsImage,
220+ renderPreview,
221+ splitMode : splitModeOrientation ,
229222 } ,
230223 } ,
231224 [
@@ -236,8 +229,7 @@ export const Playground = React.memo<PlaygroundProps>((props) => {
236229 splitModeOrientation ,
237230 renderPreviewDefined ,
238231 renderPreview ,
239- extraExtensions ,
240- needToSetDimensionsForUploadedImages ,
232+ experimental ?. needToSetDimensionsForUploadedImages ,
241233 initial ,
242234 experimental ?. enableNewImageSizeCalculation ,
243235 experimental ?. needToSetDimensionsForUploadedImages ,
@@ -300,7 +292,6 @@ export const Playground = React.memo<PlaygroundProps>((props) => {
300292 view = { ( { className} ) => (
301293 < MarkdownEditorView
302294 autofocus
303- toaster = { toaster }
304295 className = { className }
305296 stickyToolbar = { Boolean ( stickyToolbar ) }
306297 toolbarsPreset = { toolbarsPreset }
0 commit comments