Skip to content

Commit 47cd15a

Browse files
authored
refactor: separate routing (#1673)
1 parent 01e569f commit 47cd15a

File tree

16 files changed

+579
-189
lines changed

16 files changed

+579
-189
lines changed

packages/extension-base/src/defaults.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ const START_WITH_PATH = [
1616
'/derivefs/'
1717
] as const;
1818

19+
const ROOT_PATH = [
20+
'/authorize',
21+
'/signing',
22+
'/metadata'
23+
] as const;
24+
1925
const EXTENSION_PREFIX = 'POLKAGATE';
2026

2127
const PORT_PREFIX = `${EXTENSION_PREFIX || 'unknown'}-${process.env['PORT_PREFIX'] || 'unknown'}`;
@@ -40,5 +46,6 @@ export {
4046
PHISHING_PAGE_REDIRECT,
4147
PORT_CONTENT,
4248
PORT_EXTENSION,
49+
ROOT_PATH, // Added for PolkaGate
4350
START_WITH_PATH// Added for PolkaGate
4451
};

packages/extension-polkagate/src/components/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export * from './contexts';
3131
export { default as Convictions } from './Convictions';
3232
export { default as CopyAddressButton } from './CopyAddressButton';
3333
export { default as DisplayInfo } from './DisplayInfo';
34-
export { default as ErrorBoundary } from './ErrorBoundary';
3534
export { default as FormatBalance } from './FormatBalance';
3635
export { default as FormatBalance2 } from './FormatBalance2';
3736
export { default as FormatPrice } from './FormatPrice';

packages/extension-polkagate/src/components/translate.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
// Copyright 2019-2024 @polkadot/extension-polkagate authors & contributors
22
// SPDX-License-Identifier: Apache-2.0
3-
// @ts-nocheck
43

5-
import { useTranslation as useTranslationBase, UseTranslationResponse, withTranslation } from 'react-i18next';
4+
import type { UseTranslationResponse } from 'react-i18next';
65

7-
export function useTranslation(): UseTranslationResponse<string, undefined> {
6+
import { useTranslation as useTranslationBase, withTranslation } from 'react-i18next';
7+
8+
export function useTranslation (): UseTranslationResponse<string, undefined> {
89
return useTranslationBase();
910
}
1011

packages/extension-polkagate/src/hooks/useFullscreen.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
// Copyright 2019-2024 @polkadot/extension-polkagate authors & contributors
22
// SPDX-License-Identifier: Apache-2.0
3-
// @ts-nocheck
43

5-
import { useEffect } from 'react';
4+
import { useLayoutEffect } from 'react';
65

7-
export default function useFullscreen(): void {
8-
useEffect(() => {
6+
export default function useFullscreen (): void {
7+
useLayoutEffect(() => {
98
/** to change app width to full screen */
109
const root = document.getElementById('root');
1110

packages/extension-polkagate/src/popup/PhishingDetected.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ interface WebsiteState {
1212
website: string;
1313
}
1414

15-
export default function PhishingDetected(): React.ReactElement {
15+
export default function PhishingDetected (): React.ReactElement {
1616
const { t } = useTranslation();
1717
const { website } = useParams<WebsiteState>();
1818
const decodedWebsite = decodeURIComponent(website);

packages/extension-polkagate/src/popup/authorize/AuthFullScreenMode.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,19 @@ function AuthFullScreenMode ({ onNextAuth, onPreviousAuth, requestIndex, request
3232
const onAction = useContext(ActionContext);
3333
const { accounts } = useContext(AccountContext);
3434

35-
const url = requests[requestIndex].url;
36-
const faviconUrl = useFavIcon(url);
35+
const _url = requests[requestIndex]?.url;
36+
const faviconUrl = useFavIcon(_url);
3737

3838
const [selectedAccounts, setSelectedAccounts] = useState<string[]>([]);
3939
const [alreadySelectedAccounts, setAlreadySelectedAccounts] = useState<string[]>([]);
4040

41-
4241
const allAccounts = useMemo(() => accounts.map(({ address }) => address), [accounts]);
4342
const areAllCheck = useMemo(() => areArraysEqual([allAccounts, selectedAccounts]), [allAccounts, selectedAccounts]);
4443

4544
useEffect(() => {
4645
getAuthList()
4746
.then(({ list: authList }) => {
48-
const dappURL = extractBaseUrl(url);
47+
const dappURL = extractBaseUrl(_url);
4948

5049
const availableDapp = Object.values(authList).find(({ url }) => dappURL === extractBaseUrl(url));
5150

@@ -57,11 +56,11 @@ function AuthFullScreenMode ({ onNextAuth, onPreviousAuth, requestIndex, request
5756
}
5857
})
5958
.catch(console.error);
60-
}, [url]);
59+
}, [_url]);
6160

6261
const onApprove = useCallback((): void => {
6362
approveAuthRequest(selectedAccounts, requests[requestIndex].id)
64-
.then(() => onAction())
63+
.then(() => onAction('/'))
6564
.catch((error: Error) => console.error(error));
6665
}, [onAction, requestIndex, requests, selectedAccounts]);
6766

@@ -71,7 +70,7 @@ function AuthFullScreenMode ({ onNextAuth, onPreviousAuth, requestIndex, request
7170
(alreadySelectedAccounts.length
7271
? approveAuthRequest(alreadySelectedAccounts, id)
7372
: ignoreAuthRequest(id)
74-
).then(() => onAction())
73+
).then(() => onAction('/'))
7574
.catch((error: Error) => console.error(error));
7675
}, [alreadySelectedAccounts, onAction, requestIndex, requests]);
7776

@@ -118,7 +117,7 @@ function AuthFullScreenMode ({ onNextAuth, onPreviousAuth, requestIndex, request
118117
variant='circular'
119118
/>
120119
<span style={{ fontSize: '15px', fontWeight: 400, overflowWrap: 'anywhere' }}>
121-
{extractBaseUrl(url)}
120+
{extractBaseUrl(_url)}
122121
</span>
123122
</Grid>
124123
<Grid container item sx={{ marginBottom: '15px', marginTop: '10px' }}>

packages/extension-polkagate/src/popup/authorize/Request.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export default function Request ({ authRequest, hasBanner }: Props): React.React
5353

5454
const onApprove = useCallback((): void => {
5555
approveAuthRequest(selectedAccounts, authRequest.id)
56-
.then(() => onAction())
56+
.then(() => onAction('/'))
5757
.catch((error: Error) => console.error(error));
5858
}, [authRequest.id, onAction, selectedAccounts]);
5959

@@ -63,7 +63,7 @@ export default function Request ({ authRequest, hasBanner }: Props): React.React
6363
(alreadySelectedAccounts.length
6464
? approveAuthRequest(alreadySelectedAccounts, id)
6565
: ignoreAuthRequest(id)
66-
).then(() => onAction())
66+
).then(() => onAction('/'))
6767
.catch((error: Error) => console.error(error));
6868
}, [alreadySelectedAccounts, authRequest.id, onAction]);
6969

packages/extension-polkagate/src/popup/metadata/Request.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@ export default function Request ({ metaId, request, url }: Props): React.ReactEl
2525
const chain = useMetadata(request.genesisHash, true);
2626
const onAction = useContext(ActionContext);
2727

28-
const _onApprove = useCallback(
28+
const onApprove = useCallback(
2929
(): void => {
3030
approveMetaRequest(metaId)
31-
.then(() => onAction())
31+
.then(() => onAction('/'))
3232
.catch(console.error);
3333
},
3434
[metaId, onAction]
3535
);
3636

37-
const _onReject = useCallback(
37+
const onReject = useCallback(
3838
(): void => {
3939
rejectMetaRequest(metaId)
40-
.then(() => onAction())
40+
.then(() => onAction('/'))
4141
.catch(console.error);
4242
},
4343
[metaId, onAction]
@@ -111,8 +111,8 @@ export default function Request ({ metaId, request, url }: Props): React.ReactEl
111111
</Warning>
112112
</Grid>
113113
<TwoButtons
114-
onPrimaryClick={_onApprove}
115-
onSecondaryClick={_onReject}
114+
onPrimaryClick={onApprove}
115+
onSecondaryClick={onReject}
116116
primaryBtnText={t('Approve')}
117117
secondaryBtnText={t('Reject')}
118118
variant='text'

packages/extension-polkagate/src/popup/metadata/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function Metadata (): React.ReactElement {
1616
const onReject = useCallback(
1717
(): void => {
1818
rejectMetaRequest(requests[0].id)
19-
.then(() => onAction())
19+
.then(() => onAction('/'))
2020
.catch(console.error);
2121
},
2222
[onAction, requests]
@@ -26,7 +26,7 @@ export default function Metadata (): React.ReactElement {
2626
<>
2727
<Header
2828
onClose={onReject}
29-
text={t<string>('Metadata')}
29+
text={t('Metadata')}
3030
/>
3131
{requests[0]
3232
? (

packages/extension-polkagate/src/popup/signing/Request/SignArea.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default function SignArea({ buttonText, error, isExternal, isFirst, isSig
5959
approveSignPassword(signId, savePass, password)
6060
.then((): void => {
6161
setIsBusy(false);
62-
onAction();
62+
onAction('/');
6363
})
6464
.catch((error: Error): void => {
6565
setIsBusy(false);

packages/extension-polkagate/src/popup/signing/Request/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default function Request ({ account: { accountIndex, addressOffset, isExt
7777
const _onSignature = useCallback(
7878
({ signature }: { signature: HexString }): void => {
7979
approveSignSignature(signId, signature)
80-
.then(() => onAction())
80+
.then(() => onAction('/'))
8181
.catch((error: Error): void => {
8282
setError(error.message);
8383
console.error(error);
@@ -101,7 +101,7 @@ export default function Request ({ account: { accountIndex, addressOffset, isExt
101101
extrinsic.addSignature(_address, signature, _raw.toHex());
102102

103103
approveSignSignature(signId, signature, extrinsic.toHex())
104-
.then(() => onAction())
104+
.then(() => onAction('/'))
105105
.catch((error: Error): void => {
106106
setError(error.message);
107107
console.error(error);

packages/extension-polkagate/src/popup/signing/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default function Signing (): React.ReactElement {
5555
}
5656

5757
cancelSignRequest(request.id)
58-
.then(() => onAction())
58+
.then(() => onAction('/'))
5959
.catch((error: Error) => console.error(error));
6060
}, [onAction, request?.id]);
6161

packages/extension-polkagate/src/components/ErrorBoundary.tsx renamed to packages/extension-ui/src/Popup/components/ErrorBoundary.tsx

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import type { WithTranslation } from 'react-i18next';
88
import { Grid, Typography } from '@mui/material';
99
import React from 'react';
1010

11-
import HeaderBrand from '../partials/HeaderBrand';
12-
import { EXTENSION_NAME } from '../util/constants';
13-
import translate from './translate';
14-
import { PButton } from '.';
11+
import { PButton } from '@polkadot/extension-polkagate/src/components';
12+
import translate from '@polkadot/extension-polkagate/src/components/translate';
13+
import AlertBox from '@polkadot/extension-polkagate/src/partials/AlertBox';
14+
import HeaderBrand from '@polkadot/extension-polkagate/src/partials/HeaderBrand';
15+
import { EXTENSION_NAME } from '@polkadot/extension-polkagate/src/util/constants';
1516

1617
interface Props extends WithTranslation {
1718
children: React.ReactNode;
@@ -26,6 +27,26 @@ interface State {
2627

2728
// NOTE: This is the only way to do an error boundary, via extend
2829
class ErrorBoundary extends React.Component<Props> {
30+
private isExtensionPopup: boolean;
31+
32+
constructor (props: Props) {
33+
super(props);
34+
35+
// Initialize extension detection in constructor
36+
this.isExtensionPopup = false;
37+
38+
if (chrome?.extension?.getViews) {
39+
const extensionViews = chrome.extension.getViews({ type: 'popup' });
40+
const isPopupOpenedByExtension = extensionViews.includes(window);
41+
42+
if (isPopupOpenedByExtension) {
43+
this.isExtensionPopup = true;
44+
}
45+
} else {
46+
this.isExtensionPopup = window.innerWidth <= 357 && window.innerHeight <= 621;
47+
}
48+
}
49+
2950
public override state: State = { error: null };
3051

3152
public static getDerivedStateFromError (error: Error): Partial<State> {
@@ -73,10 +94,12 @@ class ErrorBoundary extends React.Component<Props> {
7394
_onClick={this.#goHome}
7495
text={t<string>('Back to home')}
7596
/>
76-
{/* </ButtonArea> */}
7797
</>
7898
)
79-
: children;
99+
: <>
100+
{children}
101+
{!this.isExtensionPopup && <AlertBox />}
102+
</>;
80103
}
81104
}
82105

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2019-2024 @polkadot/extension-polkagate authors & contributors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import React from 'react';
5+
6+
import ErrorBoundary from './ErrorBoundary';
7+
8+
interface RouteWrapperProps {
9+
component: React.ComponentType;
10+
trigger?: string;
11+
props?: Record<string, unknown>;
12+
}
13+
14+
export default function RouteWrapper ({ component: Component, props, trigger }: RouteWrapperProps) {
15+
return (
16+
<ErrorBoundary trigger={trigger}>
17+
<Component {...props} />
18+
</ErrorBoundary>
19+
);
20+
}

0 commit comments

Comments
 (0)