Merge branch 'master' into delFS

pull/5600/head
Liana Husikyan 2 weeks ago committed by GitHub
commit 9278303a5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      apps/contract-verification/src/profile.json
  2. 6
      apps/remix-ide-e2e/src/commands/addAtAddressInstance.ts
  3. 1
      apps/remix-ide/src/app/tabs/locales/en/home.json
  4. BIN
      apps/remix-ide/src/assets/img/contractVerification.webp
  5. 2
      apps/remix-ide/team-best-practices.md
  6. 27
      libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx
  7. 4
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  8. 2
      libs/remix-ui/run-tab/src/lib/types/index.ts
  9. 4
      libs/remix-url-resolver/src/resolve.ts

File diff suppressed because one or more lines are too long

@ -19,11 +19,11 @@ function addInstance (browser: NightwatchBrowser, address: string, isValidFormat
.waitForElementVisible('.ataddressinput') .waitForElementVisible('.ataddressinput')
.click('.ataddressinput') .click('.ataddressinput')
.setValue('.ataddressinput', address, function () { .setValue('.ataddressinput', address, function () {
if (!isValidFormat || !isValidChecksum) browser.assert.elementPresent('button[id^="runAndDeployAtAdressButton"]:disabled') if (!isValidFormat || !isValidChecksum) browser.assert.elementPresent('button[id^="runAndDeployAtAddressButton"]:disabled')
else if (isAbi) { else if (isAbi) {
browser browser
.click({ .click({
selector: '//*[@id="runAndDeployAtAdressButtonContainer"]', selector: '//*[@id="runAndDeployAtAddressButtonContainer"]',
locateStrategy: 'xpath' locateStrategy: 'xpath'
}) })
.waitForElementPresent('[data-id="udappNotify-modal-footer-ok-react"]', 5000) .waitForElementPresent('[data-id="udappNotify-modal-footer-ok-react"]', 5000)
@ -34,7 +34,7 @@ function addInstance (browser: NightwatchBrowser, address: string, isValidFormat
}) })
} else { } else {
browser.click({ browser.click({
selector: '//*[@id="runAndDeployAtAdressButtonContainer"]', selector: '//*[@id="runAndDeployAtAddressButtonContainer"]',
locateStrategy: 'xpath' locateStrategy: 'xpath'
}) })
} }

@ -26,6 +26,7 @@
"home.solhintPluginDesc": "Solhint is an open source project for linting Solidity code.", "home.solhintPluginDesc": "Solhint is an open source project for linting Solidity code.",
"home.sourcifyPluginDesc": "Solidity contract and metadata verification service.", "home.sourcifyPluginDesc": "Solidity contract and metadata verification service.",
"home.unitTestPluginDesc": "Write and run unit tests for your contracts in Solidity.", "home.unitTestPluginDesc": "Write and run unit tests for your contracts in Solidity.",
"home.contractVerificationDesc": "Verify contracts on multiple services at the same time.",
"home.dgitPluginDesc": "Add source control to your projects.", "home.dgitPluginDesc": "Add source control to your projects.",
"home.oneClickDappDesc": "Quickly generate smart contract interfaces", "home.oneClickDappDesc": "Quickly generate smart contract interfaces",
"home.getStarted": "Get Started", "home.getStarted": "Get Started",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -158,7 +158,7 @@ Before starting to coding, we should ensure all devs / contributors are aware of
### 1) Bugs: ### 1) Bugs:
- A critical bug should get the label `Blocker`, and every effort should be put to fix it. - A critical bug should get the label `Blocker`, and every effort should be put to fix it.
- Addressing a non critical and non planned bug can be done: - Addressing a non critical and non planned bug can be done:
- After having notified in the `remix-dev` channel if the bug does not involves UX or public API changes. - After having notified in the `remix-dev` channel if the bug does not involve UX or public API changes.
- After a dev meeting (e.g the regular standup) if the bug involves any UX or public API changes. - After a dev meeting (e.g the regular standup) if the bug involves any UX or public API changes.
### 2) Support: ### 2) Support:

@ -82,6 +82,11 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) {
plugin.verticalIcons.select('solidityUnitTesting') plugin.verticalIcons.select('solidityUnitTesting')
_paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'solidityUnitTesting']) _paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'solidityUnitTesting'])
} }
const startContractVerification = async () => {
await plugin.appManager.activatePlugin(['contract-verification'])
plugin.verticalIcons.select('contract-verification')
_paq.push(['trackEvent', 'hometabActivate', 'userActivate', 'contract-verification'])
}
return ( return (
<div className="pl-2 w-100 align-items-end remixui_featuredplugins_container" id="hTFeaturedPlugins"> <div className="pl-2 w-100 align-items-end remixui_featuredplugins_container" id="hTFeaturedPlugins">
@ -116,14 +121,14 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) {
itemClass="w-100" itemClass="w-100"
> >
<PluginButton <PluginButton
imgPath="assets/img/staticAnalysis.webp" imgPath="assets/img/contractVerification.webp"
envID="staticAnalysisLogo" envID="contractVerificationLogo"
envText="Solidity Analyzers" envText="Contract Verification"
description={intl.formatMessage({ description={intl.formatMessage({
id: 'home.codeAnalyizerPluginDesc' id: 'home.contractVerificationDesc',
})} })}
maintainedBy='Remix' maintainedBy="Remix"
callback={() => startCodeAnalyzer()} callback={() => startContractVerification()}
/> />
<PluginButton <PluginButton
imgPath="assets/img/learnEthLogo.webp" imgPath="assets/img/learnEthLogo.webp"
@ -135,6 +140,16 @@ function HomeTabFeaturedPlugins({ plugin }: HomeTabFeaturedPluginsProps) {
maintainedBy='Remix' maintainedBy='Remix'
callback={() => startLearnEth()} callback={() => startLearnEth()}
/> />
<PluginButton
imgPath="assets/img/staticAnalysis.webp"
envID="staticAnalysisLogo"
envText="Solidity Analyzers"
description={intl.formatMessage({
id: 'home.codeAnalyizerPluginDesc'
})}
maintainedBy='Remix'
callback={() => startCodeAnalyzer()}
/>
<PluginButton <PluginButton
imgPath="assets/img/cookbook.webp" imgPath="assets/img/cookbook.webp"
envID="cookbookLogo" envID="cookbookLogo"

@ -517,10 +517,10 @@ export function ContractDropdownUI(props: ContractDropdownProps) {
<div className="pt-2 d-flex flex-column sudapp_button udapp_atAddressSect"> <div className="pt-2 d-flex flex-column sudapp_button udapp_atAddressSect">
<div className="d-flex flex-row"> <div className="d-flex flex-row">
<CustomTooltip placement={'top-end'} tooltipClasses="text-wrap text-left" tooltipId="runAndDeployAddresstooltip" tooltipText={atAddressOptions.title}> <CustomTooltip placement={'top-end'} tooltipClasses="text-wrap text-left" tooltipId="runAndDeployAddresstooltip" tooltipText={atAddressOptions.title}>
<div id="runAndDeployAtAdressButtonContainer" data-title={atAddressOptions.title}> <div id="runAndDeployAtAddressButtonContainer" data-title={atAddressOptions.title}>
<button <button
className={atAddressOptions.disabled ? "disabled udapp_atAddress btn btn-sm py-2 btn-primary" : "udapp_atAddress btn btn-sm py-2 btn-primary"} className={atAddressOptions.disabled ? "disabled udapp_atAddress btn btn-sm py-2 btn-primary" : "udapp_atAddress btn btn-sm py-2 btn-primary"}
id="runAndDeployAtAdressButton" id="runAndDeployAtAddressButton"
disabled={atAddressOptions.disabled} disabled={atAddressOptions.disabled}
style={{ border: 'none' }} style={{ border: 'none' }}
onClick={loadFromAddress} onClick={loadFromAddress}

@ -282,7 +282,7 @@ export interface ContractDropdownProps {
setSelectedContract: (contractName: string) => void setSelectedContract: (contractName: string) => void
remixdActivated: boolean, remixdActivated: boolean,
isValidProxyAddress?: (address: string) => Promise<boolean>, isValidProxyAddress?: (address: string) => Promise<boolean>,
isValidProxyUpgrade?: (proxyAddress: string, contractName: string, solcInput: SolcInput, solcOuput: SolcOutput, solcVersion: string) => Promise<LayoutCompatibilityReport | { ok: boolean, pass: boolean, warning: boolean }>, isValidProxyUpgrade?: (proxyAddress: string, contractName: string, solcInput: SolcInput, solcOutput: SolcOutput, solcVersion: string) => Promise<LayoutCompatibilityReport | { ok: boolean, pass: boolean, warning: boolean }>,
proxy: { deployments: { address: string, date: string, contractName: string }[] } proxy: { deployments: { address: string, date: string, contractName: string }[] }
solCompilerVersion: { version: string, canReceive: boolean } solCompilerVersion: { version: string, canReceive: boolean }
setCompilerVersion: React.Dispatch<React.SetStateAction<{ setCompilerVersion: React.Dispatch<React.SetStateAction<{

@ -140,8 +140,8 @@ export class RemixURLResolver {
async handleNpmImport(url: string): Promise<HandlerResponse> { async handleNpmImport(url: string): Promise<HandlerResponse> {
if (!url) throw new Error('url is empty') if (!url) throw new Error('url is empty')
let fetchUrl = url let fetchUrl = url
const isVersionned = semverRegex().exec(url.replace(/@/g, '@ ').replace(/\//g, ' /')) const isVersioned = semverRegex().exec(url.replace(/@/g, '@ ').replace(/\//g, ' /'))
if (this.getDependencies && !isVersionned) { if (this.getDependencies && !isVersioned) {
try { try {
const { deps, yarnLock, packageLock } = await this.getDependencies() const { deps, yarnLock, packageLock } = await this.getDependencies()
let matchLength = 0 let matchLength = 0

Loading…
Cancel
Save