Skip to content

Commit cdb460e

Browse files
ioedeveloperyann300
authored andcommitted
Use plugin calls for toaster and modal.
1 parent e1d5baa commit cdb460e

File tree

13 files changed

+58
-87
lines changed

13 files changed

+58
-87
lines changed

apps/remix-ide/src/app.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { OffsetToLineColumnConverter, CompilerMetadata, CompilerArtefacts, Fetch
1919
import Registry from './app/state/registry'
2020
import { ConfigPlugin } from './app/plugins/config'
2121
import { Layout } from './app/panels/layout'
22-
import { ModalPlugin } from './app/plugins/modal'
22+
import { NotificationPlugin } from './app/plugins/notification'
2323
import { Blockchain } from './blockchain/blockchain.js'
2424
import { HardhatProvider } from './app/tabs/hardhat-provider'
2525

@@ -187,7 +187,7 @@ class AppComponent {
187187
)
188188
const contextualListener = new EditorContextListener()
189189

190-
self.modal = new ModalPlugin()
190+
self.notification = new NotificationPlugin()
191191

192192
const configPlugin = new ConfigPlugin()
193193
self.layout = new Layout()
@@ -197,7 +197,7 @@ class AppComponent {
197197
self.engine.register([
198198
permissionHandler,
199199
self.layout,
200-
self.modal,
200+
self.notification,
201201
self.gistHandler,
202202
configPlugin,
203203
blockchain,

apps/remix-ide/src/app/plugins/modal.tsx renamed to apps/remix-ide/src/app/plugins/notification.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { AppModal } from '@remix-ui/app'
44
import { AlertModal } from 'libs/remix-ui/app/src/lib/remix-app/interface'
55
import { dispatchModalInterface } from 'libs/remix-ui/app/src/lib/remix-app/context/context'
66

7-
interface IModalApi {
7+
interface INotificationApi {
88
events: StatusEvents,
99
methods: {
1010
modal: (args: AppModal) => void
@@ -13,14 +13,14 @@ interface IModalApi {
1313
}
1414
}
1515

16-
const profile:LibraryProfile<IModalApi> = {
16+
const profile:LibraryProfile<INotificationApi> = {
1717
name: 'notification',
1818
displayName: 'Notification',
1919
description: 'Displays notifications',
2020
methods: ['modal', 'alert', 'toast']
2121
}
2222

23-
export class ModalPlugin extends Plugin implements MethodApi<IModalApi> {
23+
export class NotificationPlugin extends Plugin implements MethodApi<INotificationApi> {
2424
dispatcher: dispatchModalInterface
2525
constructor () {
2626
super(profile)
@@ -38,7 +38,7 @@ export class ModalPlugin extends Plugin implements MethodApi<IModalApi> {
3838
return this.dispatcher.alert(args)
3939
}
4040

41-
async toast (message: string) {
41+
async toast (message: string | JSX.Element) {
4242
this.dispatcher.toast(message)
4343
}
4444
}

libs/remix-ui/app/src/lib/remix-app/context/context.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ export const AppContext = React.createContext<any>(null)
77

88
export interface dispatchModalInterface {
99
modal: (data: AppModal) => void
10-
toast: (message: string) => void
10+
toast: (message: string | JSX.Element) => void
1111
alert: (data: AlertModal) => void
1212
handleHideModal: () => void,
1313
handleToaster: () => void
1414
}
1515

1616
export const dispatchModalContext = React.createContext<dispatchModalInterface>({
1717
modal: (data: AppModal) => { },
18-
toast: (message: string) => {},
18+
toast: (message: string | JSX.Element) => {},
1919
alert: (data: AlertModal) => {},
2020
handleHideModal: () => {},
2121
handleToaster: () => {}

libs/remix-ui/app/src/lib/remix-app/remix-app.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const RemixApp = (props: IRemixAppUi) => {
8383
settings: props.app.settings,
8484
showMatamo: props.app.showMatamo,
8585
appManager: props.app.appManager,
86-
modal: props.app.modal,
86+
modal: props.app.notification,
8787
layout: props.app.layout
8888
}
8989

libs/remix-ui/run-tab/src/lib/components/web3Dialog.tsx renamed to libs/remix-ui/helper/src/lib/components/web3Dialog.tsx

File renamed without changes.

libs/remix-ui/helper/src/lib/helper-components.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react'
2+
import { Web3ProviderDialog } from './components/web3Dialog'
23

34
export const fileChangedToastMsg = (from: string, path: string) => (
45
<div><i className="fas fa-exclamation-triangle text-danger mr-1"></i>
@@ -52,3 +53,19 @@ export const sourceVerificationNotAvailableToastMsg = () => (
5253
<b>Source verification plugin not activated or not available.</b> continuing <i>without</i> source code debugging.
5354
</div>
5455
)
56+
57+
export const web3Dialog = (externalEndpoint: string, setWeb3Endpoint: (value: string) => void) => (
58+
<Web3ProviderDialog externalEndpoint={externalEndpoint} setWeb3Endpoint={setWeb3Endpoint} />
59+
)
60+
61+
export const envChangeNotification = (env: { context: string, fork: string }, from: string) => (
62+
<div>
63+
<i className="fas fa-exclamation-triangle text-danger mr-1"></i>
64+
<span>
65+
{ from + ' '}
66+
<span className="font-weight-bold text-warning">
67+
is changing your environment to
68+
</span> {env && env.context}
69+
</span>
70+
</div>
71+
)

libs/remix-ui/run-tab/src/lib/actions/index.ts

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import React from 'react'
33
import * as ethJSUtil from 'ethereumjs-util'
44
import Web3 from 'web3'
5-
import { addressToString, createNonClashingNameAsync, extractNameFromKey, shortenAddress } from '@remix-ui/helper'
6-
import { addNewInstance, addProvider, clearAllInstances, clearRecorderCount, displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, fetchContractListSuccess, hidePopUp, removeExistingInstance, removeProvider, resetUdapp, setBaseFeePerGas, setConfirmSettings, setCurrentFile, setDecodedResponse, setEnvToasterContent, setExecutionEnvironment, setExternalEndpoint, setGasLimit, setGasPrice, setGasPriceStatus, setLoadType, setMatchPassphrase, setMaxFee, setMaxPriorityFee, setNetworkName, setPassphrase, setPathToScenario, setRecorderCount, setSelectedAccount, setSendUnit, setSendValue, setTxFeeContent, setWeb3Dialog } from './payload'
5+
import { addressToString, createNonClashingNameAsync, envChangeNotification, extractNameFromKey, shortenAddress, web3Dialog } from '@remix-ui/helper'
6+
import { addNewInstance, addProvider, clearAllInstances, clearRecorderCount, displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, fetchContractListSuccess, hidePopUp, removeExistingInstance, removeProvider, resetUdapp, setBaseFeePerGas, setConfirmSettings, setCurrentFile, setDecodedResponse, setEnvToasterContent, setExecutionEnvironment, setExternalEndpoint, setGasLimit, setGasPrice, setGasPriceStatus, setLoadType, setMatchPassphrase, setMaxFee, setMaxPriorityFee, setNetworkName, setPassphrase, setPathToScenario, setRecorderCount, setSelectedAccount, setSendUnit, setSendValue, setTxFeeContent } from './payload'
77
import { RunTab } from '../types/run-tab'
88
import { CompilerAbstract } from '@remix-project/remix-solidity'
99
import * as remixLib from '@remix-project/remix-lib'
@@ -75,8 +75,8 @@ const setupEvents = () => {
7575
plugin.on('yulp', 'compilationFinished', (file, source, languageVersion, data) => broadcastCompilationResult(file, source, languageVersion, data))
7676

7777
plugin.on('udapp', 'setEnvironmentModeReducer', (env: { context: string, fork: string }, from: string) => {
78-
dispatch(displayPopUp(plugin.REACT_API.envToasterContent(env, from)))
79-
setExecutionContext(env, plugin.REACT_API.web3Dialog())
78+
plugin.call('notification', 'toast', envChangeNotification(env, from))
79+
setExecutionContext(env)
8080
})
8181

8282
plugin.on('filePanel', 'setWorkspace', () => {
@@ -106,11 +106,6 @@ const setupEvents = () => {
106106
})
107107
}
108108

109-
export const initWebDialogs = (envToasterContent: (env: { context: string, fork: string }, from: string) => void, web3Dialog: () => void) => async (dispatch: React.Dispatch<any>) => {
110-
dispatch(setEnvToasterContent(envToasterContent))
111-
dispatch(setWeb3Dialog(web3Dialog))
112-
}
113-
114109
const updateAccountBalances = () => {
115110
const accounts = plugin.REACT_API.accounts.loadedAccounts
116111

@@ -225,16 +220,28 @@ const removeExternalProvider = (name) => {
225220
dispatch(removeProvider(name))
226221
}
227222

228-
export const setExecutionContext = (executionContext: { context: string, fork: string }, displayContent: JSX.Element) => {
223+
export const setExecutionContext = (executionContext: { context: string, fork: string }) => {
224+
const displayContent = web3Dialog(plugin.REACT_API.externalEndpoint, setWeb3Endpoint)
225+
229226
plugin.blockchain.changeExecutionContext(executionContext, () => {
230-
dispatch(displayNotification('External node request', displayContent, 'OK', 'Cancel', () => {
231-
plugin.blockchain.setProviderFromEndpoint(plugin.REACT_API.externalEndpoint, executionContext, (alertMsg) => {
232-
if (alertMsg) dispatch(displayPopUp(alertMsg))
227+
plugin.call('notification', 'modal', {
228+
id: 'envNotification',
229+
title: 'External node request',
230+
message: displayContent,
231+
okLabel: 'OK',
232+
cancelLabel: 'Cancel',
233+
okFn: () => {
234+
plugin.blockchain.setProviderFromEndpoint(plugin.REACT_API.externalEndpoint, executionContext, (alertMsg) => {
235+
if (alertMsg) plugin.call('notification', 'toast', alertMsg)
236+
setFinalContext()
237+
})
238+
},
239+
cancelFn: () => {
233240
setFinalContext()
234-
})
235-
}, () => { setFinalContext() }))
241+
}
242+
})
236243
}, (alertMsg) => {
237-
dispatch(displayPopUp(alertMsg))
244+
plugin.call('notification', 'toast', alertMsg)
238245
}, () => { setFinalContext() })
239246
}
240247

libs/remix-ui/run-tab/src/lib/actions/payload.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,13 +278,6 @@ export const setEnvToasterContent = (content: (env: { context: string, fork: str
278278
}
279279
}
280280

281-
export const setWeb3Dialog = (web3Dialog: () => void) => {
282-
return {
283-
type: 'SET_WEB3_DIALOG',
284-
payload: web3Dialog
285-
}
286-
}
287-
288281
export const resetUdapp = () => {
289282
return {
290283
type: 'RESET_STATE'

libs/remix-ui/run-tab/src/lib/components/environment.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ export function EnvironmentUI (props: EnvironmentProps) {
99
let context = provider.value
1010

1111
context = context.startsWith('vm') ? 'vm' : context // context has to be 'vm', 'web3' or 'injected'
12-
const displayContent = props.web3ProviderDialog()
1312

14-
props.setExecutionContext({ context, fork }, displayContent)
13+
props.setExecutionContext({ context, fork })
1514
}
1615

1716
return (

libs/remix-ui/run-tab/src/lib/components/settingsUI.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export function SettingsUI (props: SettingsProps) {
1212

1313
return (
1414
<div className="udapp_settings">
15-
<EnvironmentUI selectedEnv={props.selectExEnv} providers={props.providers} setExecutionContext={props.setExecutionContext} web3ProviderDialog={props.web3ProviderDialog} />
15+
<EnvironmentUI selectedEnv={props.selectExEnv} providers={props.providers} setExecutionContext={props.setExecutionContext} />
1616
<NetworkUI networkName={props.networkName} />
1717
<AccountUI personalMode={props.personalMode} selectExEnv={props.selectExEnv} accounts={props.accounts} setAccount={props.setAccount} createNewBlockchainAccount={props.createNewBlockchainAccount} setPassphrase={props.setPassphrase} setMatchPassphrase={props.setMatchPassphrase} tooltip={props.tooltip} modal={props.modal} signMessageWithAddress={props.signMessageWithAddress} passphrase={props.passphrase} />
1818
<GasPriceUI gasLimit={props.gasLimit} setGasFee={props.setGasFee} />

0 commit comments

Comments
 (0)