Skip to content

Commit 5a768f4

Browse files
authored
Merge pull request #1407 from ethereum/fix-compiler
Fix React Compiler
2 parents 807676f + 34c2aea commit 5a768f4

File tree

5 files changed

+55
-34
lines changed

5 files changed

+55
-34
lines changed

apps/remix-ide-e2e/src/commands/verifyContracts.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ function verifyContracts (browser: NightwatchBrowser, compiledContractNames: str
2222
if (opts.version) {
2323
browser
2424
.click('*[data-id="compilation-details"]')
25+
.waitForElementVisible('*[data-id="remixui_treeviewitem_metadata"]')
26+
.pause(2000)
27+
.click('*[data-id="remixui_treeviewitem_metadata"]')
2528
.waitForElementVisible('*[data-id="treeViewDivtreeViewItemcompiler"]')
2629
.pause(2000)
2730
.click('*[data-id="treeViewDivtreeViewItemcompiler"]')

libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,24 @@ export const ModalDialog = (props: ModalDialogProps) => {
1616
modal.current.focus()
1717
}, [props.hide])
1818

19+
useEffect(() => {
20+
function handleBlur (e) {
21+
if (!e.currentTarget.contains(e.relatedTarget)) {
22+
e.stopPropagation()
23+
if (document.activeElement !== this) {
24+
handleHide()
25+
}
26+
}
27+
}
28+
if (modal.current) {
29+
modal.current.addEventListener('blur', handleBlur)
30+
31+
return () => {
32+
modal.current.removeEventListener('blur', handleBlur)
33+
}
34+
}
35+
}, [modal.current])
36+
1937
const modalKeyEvent = (keyCode) => {
2038
if (keyCode === 27) { // Esc
2139
if (props.cancelFn) props.cancelFn()
@@ -40,13 +58,6 @@ export const ModalDialog = (props: ModalDialogProps) => {
4058
handleHide()
4159
}
4260

43-
const handleBlur = (e) => {
44-
if (!e.currentTarget.contains(e.relatedTarget)) {
45-
e.stopPropagation()
46-
handleHide()
47-
}
48-
}
49-
5061
return (
5162
<div
5263
data-id={`${props.id}ModalDialogContainer-react`}
@@ -58,7 +69,6 @@ export const ModalDialog = (props: ModalDialogProps) => {
5869
>
5970
<div className="modal-dialog" role="document">
6071
<div
61-
onBlur={handleBlur}
6272
ref={modal}
6373
tabIndex={-1}
6474
className={'modal-content remixModalContent ' + (props.modalClass ? props.modalClass : '')}

libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const listenToEvents = (editor, compileTabLogic) => (dispatch: React.Disp
4444
})
4545

4646
compileTabLogic.compiler.event.register('loadingCompiler', () => {
47-
dispatch(setCompilerMode('compilationDuration'))
47+
dispatch(setCompilerMode('loadingCompiler'))
4848
})
4949

5050
compileTabLogic.compiler.event.register('compilerLoaded', () => {

libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
3535
language: '',
3636
evmVersion: ''
3737
})
38+
const [disableCompileButton, setDisableCompileButton] = useState<boolean>(false)
3839
const compileIcon = useRef(null)
39-
const warningIcon = useRef(null)
4040
const promptMessageInput = useRef(null)
4141
const [hhCompilation, sethhCompilation] = useState(false)
4242
const [compilerContainer, dispatch] = useReducer(compilerReducer, compilerInitialState)
@@ -83,6 +83,9 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
8383
}, [compileTabLogic])
8484

8585
useEffect(() => {
86+
const isDisabled = !compiledFileName || (compiledFileName && !isSolFileSelected(compiledFileName))
87+
88+
setDisableCompileButton(isDisabled)
8689
setState(prevState => {
8790
return { ...prevState, compiledFileName }
8891
})
@@ -243,14 +246,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
243246
}
244247

245248
const compilationDuration = (speed: number) => {
246-
if (!warningIcon.current) return
247249
if (speed > 1000) {
248-
const msg = `Last compilation took ${speed}ms. We suggest to turn off autocompilation.`
249-
250-
warningIcon.current.setAttribute('title', msg)
251-
warningIcon.current.style.visibility = 'visible'
252-
} else {
253-
warningIcon.current.style.visibility = 'hidden'
250+
console.log(`Last compilation took ${speed}ms. We suggest to turn off autocompilation.`)
254251
}
255252
}
256253

@@ -264,15 +261,18 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
264261
if (!compileIcon.current) return
265262
compileIcon.current.setAttribute('title', 'compiler is loading, please wait a few moments.')
266263
compileIcon.current.classList.add('remixui_spinningIcon')
267-
warningIcon.current.style.visibility = 'hidden'
268264
_updateLanguageSelector()
265+
setDisableCompileButton(true)
269266
}
270267

271268
const compilerLoaded = () => {
272269
if (!compileIcon.current) return
273270
compileIcon.current.setAttribute('title', '')
274271
compileIcon.current.classList.remove('remixui_spinningIcon')
275272
if (state.autoCompile) compile()
273+
const isDisabled = !compiledFileName || (compiledFileName && !isSolFileSelected(compiledFileName))
274+
275+
setDisableCompileButton(isDisabled)
276276
}
277277

278278
const compilationFinished = () => {
@@ -531,6 +531,7 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
531531
<label className="remixui_compilerLabel form-check-label" htmlFor="evmVersionSelector">EVM Version</label>
532532
<select value={state.evmVersion} onChange={(e) => handleEvmVersionChange(e.target.value)} className="custom-select" id="evmVersionSelector">
533533
<option data-id={state.evmVersion === 'default' ? 'selected' : ''} value="default">compiler default</option>
534+
<option data-id={state.evmVersion === 'berlin' ? 'selected' : ''} value="berlin">berlin</option>
534535
<option data-id={state.evmVersion === 'muirGlacier' ? 'selected' : ''} value="muirGlacier">muirGlacier</option>
535536
<option data-id={state.evmVersion === 'istanbul' ? 'selected' : ''} value="istanbul">istanbul</option>
536537
<option data-id={state.evmVersion === 'petersburg' ? 'selected' : ''} value="petersburg">petersburg</option>
@@ -575,11 +576,10 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
575576
<label className="form-check-label custom-control-label" htmlFor="enableHardhat">Enable Hardhat Compilation</label>
576577
</div>
577578
}
578-
<button id="compileBtn" data-id="compilerContainerCompileBtn" className="btn btn-primary btn-block remixui_disabled mt-3" title="Compile" onClick={compile} disabled={!state.compiledFileName || (state.compiledFileName && !isSolFileSelected(state.compiledFileName))}>
579-
<span className="text-break">
580-
<i ref={warningIcon} title="Compilation Slow" style={{ visibility: 'hidden' }} className="remixui_warnCompilationSlow fas fa-exclamation-triangle" aria-hidden="true"></i>
581-
{ warningIcon.current && warningIcon.current.style.visibility === 'hidden' && <i ref={compileIcon} className="fas fa-sync remixui_icon" aria-hidden="true"></i> }
582-
Compile { state.compiledFileName || '<no file selected>' }
579+
<button id="compileBtn" data-id="compilerContainerCompileBtn" className="btn btn-primary btn-block remixui_disabled mt-3" title="Compile" onClick={compile} disabled={disableCompileButton}>
580+
<span>
581+
{ <i ref={compileIcon} className="fas fa-sync remixui_icon" aria-hidden="true"></i> }
582+
Compile { typeof state.compiledFileName === 'string' ? helper.extractNameFromKey(state.compiledFileName) || '<no file selected>' : '<no file selected>' }
583583
</span>
584584
</button>
585585
</header>

libs/remix-ui/solidity-compiler/src/lib/contract-selection.tsx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,25 @@ export const ContractSelection = (props: ContractSelectionProps) => {
162162
}
163163
const contractProperties = contractsDetails[selectedContract] || {}
164164
const log = <div className="remixui_detailsJSON">
165-
{
166-
Object.keys(contractProperties).map((propertyName, index) => {
167-
const copyDetails = <span className="remixui_copyDetails"><CopyToClipboard content={contractProperties[propertyName]} direction='top' /></span>
168-
const questionMark = <span className="remixui_questionMark"><i title={ help[propertyName] } className="fas fa-question-circle" aria-hidden="true"></i></span>
169-
170-
return (<div className="remixui_log" key={index}>
171-
<div className="remixui_key">{ propertyName } { copyDetails } { questionMark }</div>
172-
{ insertValue(contractProperties, propertyName) }
173-
</div>)
174-
})
175-
}
165+
<TreeView>
166+
{
167+
Object.keys(contractProperties).map((propertyName, index) => {
168+
const copyDetails = <span className="remixui_copyDetails"><CopyToClipboard content={contractProperties[propertyName]} direction='top' /></span>
169+
const questionMark = <span className="remixui_questionMark"><i title={ help[propertyName] } className="fas fa-question-circle" aria-hidden="true"></i></span>
170+
171+
return (
172+
<div className="remixui_log" key={index}>
173+
<TreeViewItem
174+
label={
175+
<div data-id={`remixui_treeviewitem_${propertyName}`} className="remixui_key">{ propertyName } { copyDetails } { questionMark }</div>
176+
}>
177+
{ insertValue(contractProperties, propertyName) }
178+
</TreeViewItem>
179+
</div>
180+
)
181+
})
182+
}
183+
</TreeView>
176184
</div>
177185

178186
modal(selectedContract, log, 'Close', null)

0 commit comments

Comments
 (0)