From f4573fe850e33c1e0a2dfd9f1d944171fb045452 Mon Sep 17 00:00:00 2001 From: Anton Sabotovich Date: Mon, 17 Jun 2024 13:46:54 +0300 Subject: [PATCH] feat: path onMount prop --- src/harmony/FormEditor/FormEditor.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/harmony/FormEditor/FormEditor.tsx b/src/harmony/FormEditor/FormEditor.tsx index 1f028d3c..560b33ea 100644 --- a/src/harmony/FormEditor/FormEditor.tsx +++ b/src/harmony/FormEditor/FormEditor.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; +import React, { useCallback, useContext, useEffect, useMemo, useRef, useState, ComponentProps } from 'react'; import { useDropzone } from 'react-dropzone'; import { IconAttachOutline } from '@taskany/icons'; import cn from 'classnames'; @@ -27,6 +27,7 @@ interface File { type: string; filePath: string; } +type OnMountCallback = ComponentProps['onMount']; interface FormEditorProps extends Omit, 'onChange' | 'onBlur' | 'onFocus'> { id?: string; @@ -55,6 +56,8 @@ interface FormEditorProps extends Omit, 'on onUploadSuccess?: () => void; onUploadFail?: (message?: string) => void; attachFormatter?: (files: File[]) => string; + options: React.ComponentProps['options']; + onMount?: OnMountCallback; } const defaultAttachmentsButtonMessage = 'Attach files'; @@ -116,7 +119,9 @@ export const FormEditor = React.forwardRef( onUploadFail, attachFormatter = defaultAttachFormatter, className, + onMount, view, + options, ...attrs }, ref, @@ -134,8 +139,7 @@ export const FormEditor = React.forwardRef( const formCtx = useContext(formContext); const disabled = formCtx.disabled || internalDisabled; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const handleEditorDidMount = (editor: any /* IStandaloneEditor */) => { + const handleEditorDidMount: OnMountCallback = (editor, monaco) => { monacoEditorRef.current = editor; if (autoFocus) { @@ -152,6 +156,8 @@ export const FormEditor = React.forwardRef( }); setViewValue(value); + + onMount?.(editor, monaco); }; useEffect(() => { @@ -267,6 +273,8 @@ export const FormEditor = React.forwardRef( }; }, [height, contentHeight, maxEditorHeight, outline]); + const editorOptions = useMemo(() => ({ ...defaultOptions, ...options }), []); + return (
( theme="vs-dark" defaultLanguage="markdown" value={viewValue} - options={defaultOptions} + options={editorOptions} onChange={onChange} onMount={handleEditorDidMount} className={cn(s.MonacoEditor)}