diff --git a/frontend/app/components/Dashboard/NewDashboard.tsx b/frontend/app/components/Dashboard/NewDashboard.tsx
index 252e8bc53..11b2313e5 100644
--- a/frontend/app/components/Dashboard/NewDashboard.tsx
+++ b/frontend/app/components/Dashboard/NewDashboard.tsx
@@ -1,11 +1,12 @@
import React, { useEffect } from 'react';
import { Switch, Route, Redirect } from 'react-router';
import withPageTitle from 'HOCs/withPageTitle';
-import { observer } from "mobx-react-lite";
+import { observer, useObserver } from "mobx-react-lite";
import { withDashboardStore } from './store/store';
import { withRouter } from 'react-router-dom';
import DashboardView from './components/DashboardView';
import { dashboardSelected, dashboardMetric, withSiteId } from 'App/routes';
+import DashboardSideMenu from './components/DashboardSideMenu';
function NewDashboard(props) {
const { store, match: { params: { siteId, dashboardId, metricId } } } = props;
@@ -20,10 +21,10 @@ function NewDashboard(props) {
}
}, [dashboardId]);
- return (
+ return useObserver(() => (
- MENU
+
@@ -37,9 +38,9 @@ function NewDashboard(props) {
- );
+ ));
}
export default withPageTitle('New Dashboard')(
- withRouter(withDashboardStore(observer(NewDashboard)))
+ withRouter(withDashboardStore(NewDashboard))
);
\ No newline at end of file
diff --git a/frontend/app/components/Dashboard/components/DashboardSideMenu/DashboardSideMenu.tsx b/frontend/app/components/Dashboard/components/DashboardSideMenu/DashboardSideMenu.tsx
new file mode 100644
index 000000000..850423c66
--- /dev/null
+++ b/frontend/app/components/Dashboard/components/DashboardSideMenu/DashboardSideMenu.tsx
@@ -0,0 +1,48 @@
+import { useObserver } from 'mobx-react-lite';
+import React from 'react';
+import { SideMenuitem, SideMenuHeader } from 'UI';
+import { withDashboardStore } from '../../store/store';
+
+function DashboardSideMenu(props) {
+ const { store } = props;
+ const { selectedDashboard } = store;
+
+ const onItemClick = (dashboard) => {
+ store.selectDashboardById(dashboard.dashboardId);
+ };
+
+ return useObserver(() => (
+
+
+ {store.dashboards.map(item => (
+
onItemClick(item)}
+ />
+ ))}
+
+
+
+
+
+
+
+ ));
+}
+
+export default withDashboardStore(DashboardSideMenu);
\ No newline at end of file
diff --git a/frontend/app/components/Dashboard/components/DashboardSideMenu/index.ts b/frontend/app/components/Dashboard/components/DashboardSideMenu/index.ts
new file mode 100644
index 000000000..7d83f5bed
--- /dev/null
+++ b/frontend/app/components/Dashboard/components/DashboardSideMenu/index.ts
@@ -0,0 +1 @@
+export { default } from './DashboardSideMenu';
\ No newline at end of file
diff --git a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx
index 850726789..ce56053d8 100644
--- a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx
+++ b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx
@@ -2,19 +2,23 @@ import React from 'react';
import WidgetWrapper from '../../WidgetWrapper';
import { observer } from 'mobx-react-lite';
import { withDashboardStore } from '../../store/store';
+import { Button, PageTitle } from 'UI';
function DashboardView(props) {
const { store } = props;
const dashboard = store.selectedDashboard
const list = dashboard?.widgets;
- return dashboard ? (
+ return (
- test {dashboard.dashboardId}
+
{list && list.map(item => )}
- ) : Loading...
;
+ )
}
export default withDashboardStore(observer(DashboardView));
\ No newline at end of file
diff --git a/frontend/app/components/Dashboard/store/dashboardStore.ts b/frontend/app/components/Dashboard/store/dashboardStore.ts
index 1227b5611..0fc775e1e 100644
--- a/frontend/app/components/Dashboard/store/dashboardStore.ts
+++ b/frontend/app/components/Dashboard/store/dashboardStore.ts
@@ -5,7 +5,7 @@ import Widget from "./widget";
export default class DashboardStore {
dashboards: Dashboard[] = []
- selectedDashboard: Dashboard | null = null
+ selectedDashboard: Dashboard | null = new Dashboard()
isLoading: boolean = false
siteId: any = null
@@ -194,10 +194,14 @@ export default class DashboardStore {
selectDefaultDashboard = () => {
const pinnedDashboard = this.dashboards.find(d => d.isPinned)
- if (pinnedDashboard) {
- this.selectedDashboard = pinnedDashboard
+ if (this.dashboards.length > 0) {
+ if (pinnedDashboard) {
+ this.selectedDashboard = pinnedDashboard
+ } else {
+ this.selectedDashboard = this.dashboards[0]
+ }
} else {
- this.selectedDashboard = this.dashboards[0]
+ this.selectedDashboard = new Dashboard()
}
}
}
@@ -228,6 +232,4 @@ const sampleDashboards = [
getRandomDashboard(),
getRandomDashboard(),
getRandomDashboard(),
- getRandomDashboard(),
- getRandomDashboard(),
]
\ No newline at end of file
diff --git a/frontend/app/components/ui/PageTitle/PageTitle.tsx b/frontend/app/components/ui/PageTitle/PageTitle.tsx
new file mode 100644
index 000000000..6ee102c0d
--- /dev/null
+++ b/frontend/app/components/ui/PageTitle/PageTitle.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import cn from 'classnames';
+
+function PageTitle({ title, className = '' }) {
+ return (
+
+ {title}
+
+ );
+}
+
+export default PageTitle;
\ No newline at end of file
diff --git a/frontend/app/components/ui/PageTitle/index.ts b/frontend/app/components/ui/PageTitle/index.ts
new file mode 100644
index 000000000..6c6e0d2c8
--- /dev/null
+++ b/frontend/app/components/ui/PageTitle/index.ts
@@ -0,0 +1 @@
+export { default } from './PageTitle';
\ No newline at end of file
diff --git a/frontend/app/components/ui/SideMenuHeader/SideMenuHeader.tsx b/frontend/app/components/ui/SideMenuHeader/SideMenuHeader.tsx
new file mode 100644
index 000000000..2a5ccd6fa
--- /dev/null
+++ b/frontend/app/components/ui/SideMenuHeader/SideMenuHeader.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+import cn from 'classnames';
+import stl from './sideMenuHeader.css';
+
+function SideMenuHeader(props) {
+ const { text, className } = props;
+ return (
+
+ { text }
+
+ )
+}
+
+export default SideMenuHeader;
\ No newline at end of file
diff --git a/frontend/app/components/ui/SideMenuHeader/index.ts b/frontend/app/components/ui/SideMenuHeader/index.ts
new file mode 100644
index 000000000..b61e683de
--- /dev/null
+++ b/frontend/app/components/ui/SideMenuHeader/index.ts
@@ -0,0 +1 @@
+export { default } from './SideMenuHeader';
\ No newline at end of file
diff --git a/frontend/app/components/ui/SideMenuHeader/sideMenuHeader.css b/frontend/app/components/ui/SideMenuHeader/sideMenuHeader.css
new file mode 100644
index 000000000..5dce4e250
--- /dev/null
+++ b/frontend/app/components/ui/SideMenuHeader/sideMenuHeader.css
@@ -0,0 +1,4 @@
+.label {
+ letter-spacing: 0.2em;
+ color: gray;
+}
\ No newline at end of file
diff --git a/frontend/app/components/ui/SideMenuitem/SideMenuitem.js b/frontend/app/components/ui/SideMenuitem/SideMenuitem.js
index f1649934b..978e02fbd 100644
--- a/frontend/app/components/ui/SideMenuitem/SideMenuitem.js
+++ b/frontend/app/components/ui/SideMenuitem/SideMenuitem.js
@@ -3,7 +3,7 @@ import { Icon, Popup } from 'UI';
import cn from 'classnames';
import stl from './sideMenuItem.css';
-function SideMenuitem({ iconBg = false, iconColor = "gray-dark", iconSize = 18, className, iconName = 'info', title, active = false, disabled = false, onClick, deleteHandler, ...props }) {
+function SideMenuitem({ iconBg = false, iconColor = "gray-dark", iconSize = 18, className, iconName = null, title, active = false, disabled = false, onClick, deleteHandler, ...props }) {
return (
-
+ { iconName && (
+
+ )}
{ title }
{deleteHandler &&
diff --git a/frontend/app/components/ui/SideMenuitem/sideMenuItem.css b/frontend/app/components/ui/SideMenuitem/sideMenuItem.css
index 6b7d0743e..f666a1477 100644
--- a/frontend/app/components/ui/SideMenuitem/sideMenuItem.css
+++ b/frontend/app/components/ui/SideMenuitem/sideMenuItem.css
@@ -28,7 +28,6 @@
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- margin-left: 10px;
margin-top: 1px;
}
diff --git a/frontend/app/components/ui/index.js b/frontend/app/components/ui/index.js
index 1e0088720..d770c5aa1 100644
--- a/frontend/app/components/ui/index.js
+++ b/frontend/app/components/ui/index.js
@@ -55,5 +55,7 @@ export { default as HighlightCode } from './HighlightCode';
export { default as NoPermission } from './NoPermission';
export { default as NoSessionPermission } from './NoSessionPermission';
export { default as HelpText } from './HelpText';
+export { default as SideMenuHeader } from './SideMenuHeader';
+export { default as PageTitle } from './PageTitle';
export { Input, Modal, Form, Message, Card } from 'semantic-ui-react';
diff --git a/frontend/app/svg/icons/bar-chart-line.svg b/frontend/app/svg/icons/bar-chart-line.svg
new file mode 100644
index 000000000..e3f0cf255
--- /dev/null
+++ b/frontend/app/svg/icons/bar-chart-line.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file