fetch scamAlerts from remote store

pull/5370/head
Joseph Izang 9 months ago
parent 22e10cd5fd
commit d071594506
  1. 46
      libs/remix-ui/statusbar/src/lib/components/scamDetails.tsx
  2. 38
      libs/remix-ui/statusbar/src/lib/remixui-statusbar-panel.tsx

@ -1,6 +1,7 @@
import { ExtendedRefs, ReferenceType } from '@floating-ui/react' import { ExtendedRefs, ReferenceType } from '@floating-ui/react'
import React, { CSSProperties } from 'react' import React, { CSSProperties } from 'react'
import { FormattedMessage } from 'react-intl' import { FormattedMessage } from 'react-intl'
import { ScamAlert } from '../remixui-statusbar-panel'
const _paq = (window._paq = window._paq || []) // eslint-disable-line const _paq = (window._paq = window._paq || []) // eslint-disable-line
@ -8,9 +9,10 @@ export interface ScamDetailsProps {
refs: ExtendedRefs<ReferenceType> refs: ExtendedRefs<ReferenceType>
floatStyle: CSSProperties floatStyle: CSSProperties
getFloatingProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown> getFloatingProps: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>
scamAlerts: ScamAlert[]
} }
export default function ScamDetails ({ refs, floatStyle }: ScamDetailsProps) { export default function ScamDetails ({ refs, floatStyle, scamAlerts }: ScamDetailsProps) {
return ( return (
<div <div
@ -22,31 +24,23 @@ export default function ScamDetails ({ refs, floatStyle }: ScamDetailsProps) {
<i style={{ fontSize: 'xxx-large', fontWeight: 'lighter', color: 'orange' }} className="pr-2 far fa-exclamation-triangle"></i> <i style={{ fontSize: 'xxx-large', fontWeight: 'lighter', color: 'orange' }} className="pr-2 far fa-exclamation-triangle"></i>
</span> </span>
<div className="d-flex flex-column text-white"> <div className="d-flex flex-column text-white">
<span className="pl-4 mt-1"> {scamAlerts && scamAlerts.map((alert, index) => (
<FormattedMessage id="home.scamAlertText" /> <span className="pl-4 mt-1">
</span> {alert.url.length < 1 ? <FormattedMessage id={`home.scamAlertText${index + 1}`} defaultMessage={alert.message} />
<span className="pl-4 mt-1"> : (<><FormattedMessage id={`home.scamAlertText${index + 1}`} defaultMessage={alert.message} /> : &nbsp;
<FormattedMessage id="home.scamAlertText2" />: <a
<a className={`remixui_home_text text-white ${index === 1 ? 'pl-2' : ''}`}
className="pl-2 remixui_home_text text-white" onClick={() => {
onClick={() => _paq.push(['trackEvent', 'hometab', 'scamAlert', 'learnMore'])} index === 1 && _paq.push(['trackEvent', 'hometab', 'scamAlert', 'learnMore'])
target="__blank" index === 2 && _paq.push(['trackEvent', 'hometab', 'scamAlert', 'safetyTips'])
href="https://medium.com/remix-ide/remix-in-youtube-crypto-scams-71c338da32d" }}
> target="__blank"
<FormattedMessage id="home.learnMore" /> href={scamAlerts[index].url}
</a> >
</span> <FormattedMessage id="home.here" defaultMessage={scamAlerts[index].message} />
<span className="pl-4 mt-1"> </a></>)}
<FormattedMessage id="home.scamAlertText3" />: &nbsp; </span>
<a ))}
className="remixui_home_text text-white"
onClick={() => _paq.push(['trackEvent', 'hometab', 'scamAlert', 'safetyTips'])}
target="__blank"
href="https://remix-ide.readthedocs.io/en/latest/security.html"
>
<FormattedMessage id="home.here" />
</a>
</span>
</div> </div>
</div> </div>
) )

@ -1,4 +1,4 @@
import React, { useState } from 'react' import React, { useEffect, useState } from 'react'
import { StatusBarInterface } from './types' import { StatusBarInterface } from './types'
import GitStatus from './components/gitStatus' import GitStatus from './components/gitStatus'
import AIStatus from './components/aiStatus' import AIStatus from './components/aiStatus'
@ -11,8 +11,14 @@ export interface RemixUIStatusBarProps {
statusBarPlugin: StatusBarInterface statusBarPlugin: StatusBarInterface
} }
export type ScamAlert = {
message: string
url: string
}
export function RemixUIStatusBar ({ statusBarPlugin }: RemixUIStatusBarProps) { export function RemixUIStatusBar ({ statusBarPlugin }: RemixUIStatusBarProps) {
const [showScamDetails, setShowScamDetails] = useState(false) const [showScamDetails, setShowScamDetails] = useState(false)
const [scamAlerts, setScamAlerts] = useState<ScamAlert[]>([])
const { refs, context, floatingStyles } = useFloating({ const { refs, context, floatingStyles } = useFloating({
open: showScamDetails, open: showScamDetails,
onOpenChange: setShowScamDetails, onOpenChange: setShowScamDetails,
@ -32,15 +38,25 @@ export function RemixUIStatusBar ({ statusBarPlugin }: RemixUIStatusBarProps) {
role role
]) ])
const abortController = new AbortController() useEffect(() => {
const signal = abortController.signal const abortController = new AbortController()
async function getScamAlerts() { const signal = abortController.signal
const response = await axios.get('https://raw.githubusercontent.com/remix-project-org/remix-dynamics/main/ide/scam-alerts.json', { signal }) async function getScamAlerts() {
if (signal.aborted) return const response = await axios.get('https://raw.githubusercontent.com/remix-project-org/remix-dynamics/main/ide/scam-alerts.json', { signal })
const tips = response.data if (signal.aborted) return
const index = Math.floor(Math.random() * (tips.length - 1)) console.log('getScamAlerts', response)
// setTip(tips[index]) setScamAlerts(response.data.alerts)
} console.log('getScamAlerts', scamAlerts)
}
getScamAlerts()
return () => {
abortController.abort()
}
}, [])
useEffect(() => {
console.log('scamAlerts', scamAlerts)
}, [scamAlerts])
const getGitBranchName = async () => { const getGitBranchName = async () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -51,7 +67,7 @@ export function RemixUIStatusBar ({ statusBarPlugin }: RemixUIStatusBarProps) {
<> <>
{showScamDetails && ( {showScamDetails && (
<FloatingFocusManager context={context} modal={false}> <FloatingFocusManager context={context} modal={false}>
<ScamDetails refs={refs} floatStyle={{ ...floatingStyles, minHeight: '300px', alignContent: 'center', paddingRight: '5px' }} getFloatingProps={getFloatingProps} /> <ScamDetails refs={refs} floatStyle={{ ...floatingStyles, minHeight: '300px', alignContent: 'center', paddingRight: '5px' }} getFloatingProps={getFloatingProps} scamAlerts={scamAlerts} />
</FloatingFocusManager>)} </FloatingFocusManager>)}
<div className="d-flex flex-row bg-primary justify-content-between align-items-center"> <div className="d-flex flex-row bg-primary justify-content-between align-items-center">
<div className="remixui_statusbar"> <div className="remixui_statusbar">

Loading…
Cancel
Save