Skip to content

Commit 1572e85

Browse files
committed
fix(CodeEditor): Set default height
The docs state that the default height is 100%. However, the examples just break if you don't pass in a height. This should help.
1 parent c7a4e5f commit 1572e85

3 files changed

Lines changed: 84 additions & 5 deletions

File tree

packages/react-code-editor/src/components/CodeEditor/CodeEditor.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,6 @@ class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
250250
onEditorDidMount: () => {},
251251
language: Language.plaintext,
252252
isDarkTheme: false,
253-
height: '',
254253
width: '',
255254
isLineNumbersVisible: true,
256255
isReadOnly: false,
@@ -641,7 +640,13 @@ class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
641640
);
642641

643642
const editor = (
644-
<div className={css(styles.codeEditorCode)} ref={this.wrapperRef} tabIndex={0} dir="ltr">
643+
<div
644+
className={css(styles.codeEditorCode)}
645+
style={{ height: '100%' }}
646+
ref={this.wrapperRef}
647+
tabIndex={0}
648+
dir="ltr"
649+
>
645650
<Editor
646651
height={height}
647652
width={width}
@@ -658,7 +663,11 @@ class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
658663
);
659664

660665
return (
661-
<div className={css(styles.codeEditor, isReadOnly && styles.modifiers.readOnly, className)} ref={this.ref}>
666+
<div
667+
className={css(styles.codeEditor, isReadOnly && styles.modifiers.readOnly, className)}
668+
style={{ height: '100%', display: 'flex', flexDirection: 'column' }}
669+
ref={this.ref}
670+
>
662671
{isUploadEnabled || providedEmptyState ? (
663672
<div
664673
{...getRootProps({
@@ -667,7 +676,10 @@ class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
667676
className={css(isLoading && fileUploadStyles.modifiers.loading)}
668677
>
669678
{editorHeader}
670-
<div className={css(styles.codeEditorMain, isDragActive && styles.modifiers.dragHover)}>
679+
<div
680+
className={css(styles.codeEditorMain, isDragActive && styles.modifiers.dragHover)}
681+
style={{ flexGrow: 1 }}
682+
>
671683
<div className={css(styles.codeEditorUpload)}>
672684
<input {...getInputProps()} /* hidden, necessary for react-dropzone */ />
673685
{(showEmptyState || providedEmptyState) && !value ? emptyState : editor}
@@ -677,7 +689,11 @@ class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
677689
) : (
678690
<>
679691
{editorHeader}
680-
{showEditor && <div className={css(styles.codeEditorMain)}>{editor}</div>}
692+
{showEditor && (
693+
<div className={css(styles.codeEditorMain)} style={{ flexGrow: 1 }}>
694+
{editor}
695+
</div>
696+
)}
681697
</>
682698
)}
683699
</div>

packages/react-code-editor/src/components/CodeEditor/examples/CodeEditor.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,9 @@ These examples below are the shortcuts that we recommend describing in the popov
4343
```ts file="CodeEditorCustomControl.tsx"
4444

4545
```
46+
47+
### With 100% height
48+
49+
```ts file="CodeEditorModal.tsx"
50+
51+
```
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import React from 'react';
2+
import { CodeEditor, Language } from '@patternfly/react-code-editor';
3+
import { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@patternfly/react-core';
4+
5+
export const CodeEditorFullHeight: React.FunctionComponent = () => {
6+
const [isModalOpen, setIsModalOpen] = React.useState(false);
7+
8+
const onEditorDidMount = (editor, monaco) => {
9+
editor.layout();
10+
editor.focus();
11+
monaco.editor.getModels()[0].updateOptions({ tabSize: 5 });
12+
};
13+
14+
const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
15+
setIsModalOpen(!isModalOpen);
16+
};
17+
18+
const onChange = (value) => {
19+
// eslint-disable-next-line no-console
20+
console.log(value);
21+
};
22+
23+
return (
24+
<React.Fragment>
25+
<Button variant="primary" onClick={handleModalToggle} ouiaId="ShowBasicModal">
26+
Show basic modal with code editor inside
27+
</Button>
28+
<Modal
29+
isOpen={isModalOpen}
30+
onClose={handleModalToggle}
31+
ouiaId="BasicModal"
32+
aria-labelledby="basic-modal-title"
33+
aria-describedby="modal-box-body-basic"
34+
style={{ height: '800px' }}
35+
>
36+
<ModalHeader title="Basic modal" labelId="basic-modal-title" />
37+
<ModalBody id="modal-box-body-basic">
38+
<CodeEditor
39+
isLanguageLabelVisible
40+
code="Some example content"
41+
onChange={onChange}
42+
language={Language.javascript}
43+
onEditorDidMount={onEditorDidMount}
44+
/>
45+
</ModalBody>
46+
<ModalFooter>
47+
<Button key="confirm" variant="primary" onClick={handleModalToggle}>
48+
Confirm
49+
</Button>
50+
<Button key="cancel" variant="link" onClick={handleModalToggle}>
51+
Cancel
52+
</Button>
53+
</ModalFooter>
54+
</Modal>
55+
</React.Fragment>
56+
);
57+
};

0 commit comments

Comments
 (0)