Skip to content
This repository was archived by the owner on Jan 16, 2022. It is now read-only.

Commit 5c06ace

Browse files
priscilawebdevjuanpicado
authored andcommitted
fix: routes - Replaced class by func. comp (#159)
* refactor: updated routes * fix: fixed conflicts issues * fix: rollback port
1 parent 8c66dbc commit 5c06ace

File tree

6 files changed

+102
-116
lines changed

6 files changed

+102
-116
lines changed

src/App/App.test.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import { mount, ReactWrapper } from 'enzyme';
44
import storage from '../utils/storage';
55
import { generateTokenWithTimeRange } from '../../jest/unit/components/__mocks__/token';
66

7-
import App, { AppStateInterface } from './App';
7+
import App from './App';
8+
import { AppProps } from './AppContext';
89

910
jest.mock('../utils/storage', () => {
1011
class LocalStorageMock {
@@ -33,7 +34,7 @@ jest.mock('../utils/api', () => ({
3334
}));
3435

3536
describe('App', () => {
36-
let wrapper: ReactWrapper<{}, AppStateInterface, App>;
37+
let wrapper: ReactWrapper<{}, AppProps, App>;
3738

3839
beforeEach(() => {
3940
wrapper = mount(<App />);

src/App/App.tsx

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,23 @@
11
import React, { Component, ReactElement } from 'react';
22
import isNil from 'lodash/isNil';
3+
import 'normalize.css';
4+
import 'typeface-roboto/index.css';
35

46
import storage from '../utils/storage';
57
import { makeLogin, isTokenExpire } from '../utils/login';
68
import Loading from '../components/Loading';
79
import LoginModal from '../components/Login';
810
import Header from '../components/Header';
911
import { Container, Content } from '../components/Layout';
10-
import RouterApp from '../router';
1112
import API from '../utils/api';
12-
import 'typeface-roboto/index.css';
1313
import '../utils/styles/global';
14-
import 'normalize.css';
1514
import Footer from '../components/Footer';
16-
import { FormError } from '../components/Login/Login';
17-
import { PackageInterface } from '../components/Package/Package';
18-
19-
interface AppContextData {
20-
logoUrl: string;
21-
scope: string;
22-
isUserLoggedIn: boolean;
23-
packages: PackageInterface[];
24-
user: {
25-
username?: string;
26-
};
27-
}
28-
export const AppContext = React.createContext<AppContextData>({
29-
logoUrl: window.VERDACCIO_LOGO,
30-
user: {},
31-
scope: window.VERDACCIO_SCOPE || '',
32-
isUserLoggedIn: false,
33-
packages: [],
34-
});
35-
const AppContextProvider = AppContext.Provider;
36-
export const AppContextConsumer = AppContext.Consumer;
37-
38-
export interface AppStateInterface extends AppContextData {
39-
error?: FormError;
40-
showLoginModal: boolean;
41-
isLoading: boolean;
42-
}
43-
export default class App extends Component<{}, AppStateInterface> {
44-
public state: AppStateInterface = {
15+
16+
import AppRoute from './AppRoute';
17+
import { AppProps, AppContextProvider } from './AppContext';
18+
19+
export default class App extends Component<{}, AppProps> {
20+
public state: AppProps = {
4521
logoUrl: window.VERDACCIO_LOGO,
4622
user: {},
4723
scope: window.VERDACCIO_SCOPE || '',
@@ -57,7 +33,7 @@ export default class App extends Component<{}, AppStateInterface> {
5733
}
5834

5935
// eslint-disable-next-line no-unused-vars
60-
public componentDidUpdate(_: AppStateInterface, prevState: AppStateInterface): void {
36+
public componentDidUpdate(_: AppProps, prevState: AppProps): void {
6137
const { isUserLoggedIn } = this.state;
6238
if (prevState.isUserLoggedIn !== isUserLoggedIn) {
6339
this.loadOnHandler();
@@ -94,6 +70,7 @@ export default class App extends Component<{}, AppStateInterface> {
9470
public loadOnHandler = async () => {
9571
try {
9672
const packages = await API.request<any[]>('packages', 'GET');
73+
// @ts-ignore: FIX THIS TYPE: Type 'any[]' is not assignable to type '[]'
9774
this.setState({
9875
packages,
9976
isLoading: false,
@@ -176,9 +153,7 @@ export default class App extends Component<{}, AppStateInterface> {
176153
return (
177154
<>
178155
<Content>
179-
<RouterApp onLogout={this.handleLogout} onToggleLoginModal={this.handleToggleLoginModal}>
180-
{this.renderHeader()}
181-
</RouterApp>
156+
<AppRoute>{this.renderHeader()}</AppRoute>
182157
</Content>
183158
<Footer />
184159
</>

src/App/AppContext.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createContext } from 'react';
2+
3+
import { FormError } from '../components/Login/Login';
4+
5+
export interface AppProps {
6+
error?: FormError;
7+
logoUrl: string;
8+
user: {
9+
username?: string;
10+
};
11+
scope: string;
12+
showLoginModal: boolean;
13+
isUserLoggedIn: boolean;
14+
packages: [];
15+
isLoading: boolean;
16+
}
17+
18+
export const AppContext = createContext<Partial<AppProps>>({});
19+
export const AppContextProvider = AppContext.Provider;
20+
export const AppContextConsumer = AppContext.Consumer;

src/App/AppRoute.tsx

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import React, { lazy, useContext, Suspense } from 'react';
2+
import { Route as ReactRouterDomRoute, Switch, Router } from 'react-router-dom';
3+
import { createBrowserHistory } from 'history';
4+
5+
import Loading from '../components/Loading';
6+
7+
import { AppContext } from './AppContext';
8+
9+
const NotFound = lazy(() => import('../components/NotFound'));
10+
const VersionContextProvider = lazy(() => import('../pages/Version/VersionContextProvider'));
11+
const VersionPage = lazy(() => import('../pages/Version'));
12+
const HomePage = lazy(() => import('../pages/home'));
13+
14+
enum Route {
15+
ROOT = '/',
16+
SCOPE_PACKAGE = '/-/web/detail/@:scope/:package',
17+
SCOPE_PACKAGE_VERSION = '/-/web/detail/@:scope/:package/v/:version',
18+
PACKAGE = '/-/web/detail/:package',
19+
PACKAGE_VERSION = '/-/web/detail/:package/v/:version',
20+
}
21+
22+
const history = createBrowserHistory({
23+
basename: window.__VERDACCIO_BASENAME_UI_OPTIONS && window.__VERDACCIO_BASENAME_UI_OPTIONS.url_prefix,
24+
});
25+
26+
/* eslint react/jsx-max-depth: 0 */
27+
const AppRoute: React.FC = ({ children }) => {
28+
const appContext = useContext(AppContext);
29+
const { isUserLoggedIn, packages } = appContext;
30+
31+
return (
32+
<Router history={history}>
33+
<Suspense fallback={<Loading />}>
34+
{children}
35+
<Switch>
36+
<ReactRouterDomRoute exact={true} path={Route.ROOT}>
37+
<HomePage isUserLoggedIn={!!isUserLoggedIn} packages={packages || []} />
38+
</ReactRouterDomRoute>
39+
<ReactRouterDomRoute exact={true} path={Route.PACKAGE}>
40+
<VersionContextProvider>
41+
<VersionPage />
42+
</VersionContextProvider>
43+
</ReactRouterDomRoute>
44+
<ReactRouterDomRoute exact={true} path={Route.PACKAGE_VERSION}>
45+
<VersionContextProvider>
46+
<VersionPage />
47+
</VersionContextProvider>
48+
</ReactRouterDomRoute>
49+
<ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE_VERSION}>
50+
<VersionContextProvider>
51+
<VersionPage />
52+
</VersionContextProvider>
53+
</ReactRouterDomRoute>
54+
<ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE}>
55+
<VersionContextProvider>
56+
<VersionPage />
57+
</VersionContextProvider>
58+
</ReactRouterDomRoute>
59+
<ReactRouterDomRoute>
60+
<NotFound />
61+
</ReactRouterDomRoute>
62+
</Switch>
63+
</Suspense>
64+
</Router>
65+
);
66+
};
67+
68+
export default AppRoute;

src/router.tsx

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/utils/package.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@ export function formatDateDistance(lastUpdate: Date | string | number): string {
5959
return distanceInWordsToNow(new Date(lastUpdate));
6060
}
6161

62-
export function buildScopePackage(scope: string, packageName: string): string {
63-
return `@${scope}/${packageName}`;
64-
}
65-
6662
/**
6763
* For <LastSync /> component
6864
* @param {array} uplinks

0 commit comments

Comments
 (0)