Skip to content

Commit 2123c46

Browse files
author
Mads Thines
committed
Widgets variant working
1 parent f50e3bd commit 2123c46

File tree

10 files changed

+79
-21
lines changed

10 files changed

+79
-21
lines changed

.eslintrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
}
2323
],
2424
"@typescript-eslint/no-explicit-any": 0,
25+
"@typescript-eslint/interface-name-prefix": 0,
2526
"arrow-body-style": 0,
2627
"arrow-parens": 0,
2728
"autoFix": true,

config/tsconfig.paths.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@
33
"baseUrl": "../.",
44
"paths": {
55
"*": ["*", "generated/*"],
6+
"assets": ["src/assets"],
67
"assets/*": ["src/assets/*"],
7-
"state/*": ["src/state/*"],
8+
"typings": ["src/typings"],
9+
"typings/*": ["src/typings/*"],
10+
"utilities": ["src/utilities"],
811
"utilities/*": ["src/utilities/*"],
12+
"views": ["src/views"],
913
"views/*": ["src/views/*"]
1014
}
1115
}

config/webpack.config.common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ module.exports = function(config, isProd) {
3838
assets: `${paths.appSrc}/assets`,
3939
state: `${paths.appSrc}/state`,
4040
utilities: `${paths.appSrc}/utilities`,
41+
typings: `${paths.appSrc}/typings`,
4142
views: `${paths.appSrc}/views`,
4243
},
4344
};

src/index.tsx

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,48 @@
11
import React from "react";
22
import ReactDOM from "react-dom";
3+
import Loadable from "react-loadable";
4+
import { hot } from "react-hot-loader";
35

4-
// Utils
5-
import * as serviceWorker from "utilities/serviceWorker";
6+
// Types
7+
import { IWidget } from "typings/widgets";
68

7-
// Container
8-
import App from "views/containers/App/App";
9+
// Utilities
10+
import { isDev } from "utilities/development";
911

10-
// Styles
11-
import "assets/styles/main.scss";
12+
const widgets: IWidget[] = [
13+
{
14+
query: "#block-adaptoffices",
15+
widget: Loadable({
16+
loader: (): Promise<any> => import("views/widgets/Widget1/Widget1" /* webpackChunkName: "Widget1" */),
17+
loading: (): null => null,
18+
}),
19+
},
20+
{
21+
query: "#block-contactinformation",
22+
widget: Loadable({
23+
loader: (): Promise<any> => import("views/widgets/Widget2/Widget2" /* webpackChunkName: "Widget2" */),
24+
loading: (): null => null,
25+
}),
26+
},
27+
];
1228

13-
ReactDOM.render(<App />, document.querySelector("#root"));
29+
// Initialize the Widgets
30+
widgets.forEach(
31+
(widget): void => {
32+
const { query, widget: component } = widget;
33+
// let { } = widget;
34+
const querySelector = document.querySelector(query);
1435

15-
// If you want your app to work offline and load faster, you can change
16-
// unregister() to register() below. Note this comes with some pitfalls.
17-
// Learn more about service workers: http://bit.ly/CRA-PWA
18-
serviceWorker.register();
36+
if (!querySelector) {
37+
// eslint-disable-next-line
38+
console.warn(`The query selector doesn't exist: ${query}`);
39+
return;
40+
}
41+
42+
// Setting up React Hot Loader
43+
const Component = isDev ? hot(module)(component) : component;
44+
45+
// Setting ReactDOM.render for each widget.
46+
ReactDOM.render(<Component />, document.querySelector(query));
47+
}
48+
);

src/typings/widgets.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Loadable from "react-loadable";
2+
3+
export interface IWidget {
4+
query: string;
5+
widget:
6+
| (React.ComponentClass<unknown, any> & Loadable.LoadableComponent)
7+
| (React.FunctionComponent<unknown> & Loadable.LoadableComponent);
8+
}

src/utilities/development.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export const isDev = (): boolean => process.env.NODE_ENV === "development";
1+
export const isDev: boolean = process.env.NODE_ENV === "development";

src/views/containers/App/App.test.js renamed to src/views/widgets/Widget1/Widget1.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import ReactDOM from "react-dom";
3-
import App from "./App";
3+
import App from "./Widget1";
44

55
it("renders without crashing", () => {
66
const div = document.createElement("div");

src/views/containers/App/App.tsx renamed to src/views/widgets/Widget1/Widget1.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import React, { useState } from "react";
22
import Loadable from "react-loadable";
3-
import { hot } from "react-hot-loader";
4-
5-
// Utilities
6-
import { isDev } from "utilities/development";
73

84
// Components
95
import Header from "views/components/Header";
@@ -15,11 +11,11 @@ const Footer = Loadable({
1511
loading: Loading,
1612
});
1713

18-
const App = (): JSX.Element => {
14+
const Widget1 = (): JSX.Element => {
1915
const [value, setValue] = useState("1");
2016

2117
return (
22-
<div className="app">
18+
<div className="widget1">
2319
<Header />
2420

2521
<main>
@@ -40,4 +36,4 @@ const App = (): JSX.Element => {
4036
);
4137
};
4238

43-
export default (isDev() ? hot(module)(App) : App);
39+
export default Widget1;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React from "react";
2+
3+
// Styles
4+
import "./widget2.scss";
5+
6+
const Widget2 = (): JSX.Element => {
7+
return (
8+
<div className="widget2">
9+
<h1>Widget 2</h1>
10+
<h3>Loaded</h3>
11+
</div>
12+
);
13+
};
14+
15+
export default Widget2;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.widget1 {
2+
background-color: #fff;
3+
}

0 commit comments

Comments
 (0)