Skip to content

Commit d3eb029

Browse files
committed
refactor(Renderer): improve type definitions and code structure
- Improve dependencies type from object to Record<string, unknown> - Add showCodeButtonProps parameter to renderToolbar - Optimize button props organization - Improve code formatting and comments
1 parent 9dfd81f commit d3eb029

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

src/Renderer.tsx

+23-19
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/* eslint-disable @typescript-eslint/no-var-requires */
2-
import { useEffect, useState, useCallback } from 'react';
32
import classNames from 'classnames';
4-
import { transform as transformCode, Options } from 'sucrase';
53
import CodeEditor from './CodeEditor';
64
import Preview from './Preview';
75
import canUseDOM from './utils/canUseDOM';
86
import evalCode from './utils/evalCode';
97
import CodeIcon from './icons/Code';
8+
import { useEffect, useState, useCallback } from 'react';
9+
import { transform as transformCode, Options } from 'sucrase';
1010

1111
const React = require('react');
1212
const ReactDOM = require('react-dom');
@@ -22,7 +22,7 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
2222
copyCodeButtonAs?: React.ElementType;
2323

2424
/** Dependent objects required by the executed code */
25-
dependencies?: object;
25+
dependencies?: Record<string, unknown>;
2626

2727
/** Renders a code editor that can modify the source code */
2828
editable?: boolean;
@@ -47,18 +47,18 @@ export interface RendererProps extends Omit<React.HTMLAttributes<HTMLElement>, '
4747
transformOptions?: Options;
4848

4949
/** Customize the rendering toolbar */
50-
renderToolbar?: (buttons: React.ReactNode) => React.ReactNode;
50+
renderToolbar?: (
51+
buttons: React.ReactNode,
52+
showCodeButtonProps: React.HTMLAttributes<HTMLButtonElement>
53+
) => React.ReactNode;
5154

5255
/** Customize the rendering footer */
5356
renderExtraFooter?: () => React.ReactNode;
5457

55-
/**
56-
* Callback triggered when the editor is opened
57-
*/
58+
/** Callback triggered when the editor is opened */
5859
onOpenEditor?: () => void;
59-
/**
60-
* Callback triggered when the editor is closed
61-
*/
60+
61+
/** Callback triggered when the editor is closed */
6262
onCloseEditor?: () => void;
6363

6464
/** Callback triggered after code change */
@@ -168,14 +168,16 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
168168
[executeCode, onChange]
169169
);
170170

171-
const codeButton = (
172-
<button
173-
role="switch"
174-
aria-checked={editable}
175-
aria-label="Show the full source"
176-
className={classNames(prefix('btn'), prefix('btn-xs'), buttonClassName)}
177-
onClick={handleExpandEditor}
178-
>
171+
const showCodeButtonProps = {
172+
role: 'switch',
173+
'aria-checked': editable,
174+
'aria-label': 'Show the full source',
175+
className: buttonClassName,
176+
onClick: handleExpandEditor
177+
};
178+
179+
const showCodeButton = (
180+
<button {...showCodeButtonProps}>
179181
{typeof codeIcon !== 'undefined' ? (
180182
codeIcon
181183
) : (
@@ -192,7 +194,9 @@ const Renderer = React.forwardRef((props: RendererProps, ref: React.Ref<HTMLDivE
192194
<Preview hasError={hasError} errorMessage={errorMessage} onError={handleError}>
193195
{compiledReactNode}
194196
</Preview>
195-
<div className="rcv-toolbar">{renderToolbar ? renderToolbar(codeButton) : codeButton}</div>
197+
<div className="rcv-toolbar">
198+
{renderToolbar ? renderToolbar(showCodeButton, showCodeButtonProps) : showCodeButton}
199+
</div>
196200
{showCodeEditor && (
197201
<CodeEditor
198202
{...editorProps}

0 commit comments

Comments
 (0)