diff --git a/src/client/components/dashboard/AddButton.tsx b/src/client/components/dashboard/AddButton.tsx
index ecf3191..c8bf7ae 100644
--- a/src/client/components/dashboard/AddButton.tsx
+++ b/src/client/components/dashboard/AddButton.tsx
@@ -7,11 +7,18 @@ import { DownOutlined } from '@ant-design/icons';
export const DashboardItemAddButton: React.FC = React.memo(() => {
const workspaceId = useCurrentWorkspaceId();
- const { data: websites = [], isLoading } = trpc.website.all.useQuery({
- workspaceId,
- });
+ const { data: websites = [], isLoading: isWebsiteLoading } =
+ trpc.website.all.useQuery({
+ workspaceId,
+ });
+ const { data: monitors = [], isLoading: isMonitorLoading } =
+ trpc.monitor.all.useQuery({
+ workspaceId,
+ });
const { addItem } = useDashboardStore();
+ const isLoading = isWebsiteLoading || isMonitorLoading;
+
const menu: MenuProps = {
items: [
{
@@ -42,6 +49,27 @@ export const DashboardItemAddButton: React.FC = React.memo(() => {
],
})),
},
+ {
+ key: 'monitor',
+ label: 'Monitor',
+ children: monitors.map((monitor) => ({
+ key: `monitor#${monitor.id}`,
+ label: monitor.name,
+ children: [
+ {
+ key: `monitor#${monitor.id}#healthBar`,
+ label: 'Health Bar',
+ onClick: () => {
+ addItem(
+ 'monitorHealthBar',
+ monitor.id,
+ `${monitor.name}'s Health`
+ );
+ },
+ },
+ ],
+ })),
+ },
],
};
diff --git a/src/client/components/dashboard/items/MonitorHealthBarItem.tsx b/src/client/components/dashboard/items/MonitorHealthBarItem.tsx
new file mode 100644
index 0000000..4cd9740
--- /dev/null
+++ b/src/client/components/dashboard/items/MonitorHealthBarItem.tsx
@@ -0,0 +1,9 @@
+import React from 'react';
+import { MonitorHealthBar } from '../../monitor/MonitorHealthBar';
+
+export const MonitorHealthBarItem: React.FC<{
+ monitorId: string;
+}> = React.memo((props) => {
+ return ;
+});
+MonitorHealthBarItem.displayName = 'MonitorHealthBarItem';
diff --git a/src/client/components/dashboard/items/index.tsx b/src/client/components/dashboard/items/index.tsx
index e7546d6..adbac01 100644
--- a/src/client/components/dashboard/items/index.tsx
+++ b/src/client/components/dashboard/items/index.tsx
@@ -7,6 +7,7 @@ import React from 'react';
import { DeleteOutlined } from '@ant-design/icons';
import { useEvent } from '../../../hooks/useEvent';
import { WebsiteEventItem } from './WebsiteEventItem';
+import { MonitorHealthBarItem } from './MonitorHealthBarItem';
interface DashboardGridItemProps {
item: DashboardItem;
@@ -21,6 +22,8 @@ export const DashboardGridItem: React.FC = React.memo(
return ;
} else if (type === 'websiteEvent') {
return ;
+ } else if (type === 'monitorHealthBar') {
+ return ;
} else {
return ;
}
diff --git a/src/client/store/dashboard.ts b/src/client/store/dashboard.ts
index f749627..9e61828 100644
--- a/src/client/store/dashboard.ts
+++ b/src/client/store/dashboard.ts
@@ -75,7 +75,7 @@ export const useDashboardStore = create((set, get) => ({
export const defaultItemLayout: Record> = {
websiteOverview: { x: Infinity, y: Infinity, w: 4, h: 12 },
websiteEvent: { x: Infinity, y: Infinity, w: 2, h: 5 },
- monitorHealthBar: { x: Infinity, y: Infinity, w: 4, h: 2 },
+ monitorHealthBar: { x: Infinity, y: Infinity, w: 1, h: 2 },
monitorStatus: { x: Infinity, y: Infinity, w: 4, h: 2 },
monitorChart: { x: Infinity, y: Infinity, w: 4, h: 2 },
monitorEvent: { x: Infinity, y: Infinity, w: 4, h: 2 },