diff --git a/frontend/src/dashboard/dashboards-page.tsx b/frontend/src/dashboard/dashboards-page.tsx
index d251890..7a7620e 100644
--- a/frontend/src/dashboard/dashboards-page.tsx
+++ b/frontend/src/dashboard/dashboards-page.tsx
@@ -6,5 +6,46 @@ export const DashboardsPage = (): JSX.Element => {
const store = Store.List.create({ loaded: false, list: [] });
Store.ListStoreLoadData(store);
- return ;
+ const onNewDashboardButtonClick = async (e: React.MouseEvent) => {
+ if (e.target !== e.currentTarget) return;
+ e.stopPropagation();
+ const createUrl = `${process.env.REACT_APP_BACKEND}api/dashboard`;
+ const createResp = await fetch(createUrl, {
+ method: 'POST',
+ });
+ if (!createResp || !createResp.ok) {
+ alert(`Ошибка - Не удалось создать новый дашборд`);
+ return;
+ }
+ const dashboardId = await createResp.text();
+ const dashboardName = prompt(
+ `Dashboard name for dashboardId = ${dashboardId}`,
+ );
+ if (dashboardName) {
+ const modifyUrl = `${process.env.REACT_APP_BACKEND}api/dashboard/${dashboardId}`;
+ const modifyResp = await fetch(modifyUrl, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ widgets: [], title: dashboardName }),
+ });
+ if (!modifyResp || !modifyResp.ok) {
+ alert(`Не удалось выполнить создание дашборда`);
+ } else {
+ alert(`Создан дашборд ${dashboardName}`);
+ }
+ return;
+ } else {
+ alert(`Создан анонимный дашборд ${dashboardId}`);
+ return;
+ }
+ };
+
+ return (
+ <>
+
+
+ >
+ );
};
diff --git a/libs/event-emitter/src/dashboards/dashboards-data.service.ts b/libs/event-emitter/src/dashboards/dashboards-data.service.ts
index 9518305..f240bd1 100644
--- a/libs/event-emitter/src/dashboards/dashboards-data.service.ts
+++ b/libs/event-emitter/src/dashboards/dashboards-data.service.ts
@@ -22,6 +22,9 @@ export class DashboardsDataService {
const cfg = await this.dashboardsService.load(id);
const results: WidgetWithData[] = [];
let isSuccess = false;
+ if (!cfg?.widgets || cfg?.widgets?.length <= 0) {
+ return results;
+ }
for (let i = 0; i < cfg.widgets.length; i++) {
const widget = cfg.widgets[i];
if (widget.collapsed) continue;
diff --git a/libs/event-emitter/src/dashboards/dashboards.service.ts b/libs/event-emitter/src/dashboards/dashboards.service.ts
index dade61b..425cde7 100644
--- a/libs/event-emitter/src/dashboards/dashboards.service.ts
+++ b/libs/event-emitter/src/dashboards/dashboards.service.ts
@@ -42,7 +42,7 @@ export class DashboardsService {
async load(id: string): Promise {
this.logger.debug(`Load dashboard id - ${id}`);
const rawData = await this.loadRawData(id);
- return rawData.data;
+ return rawData?.data || { widgets: [] };
}
async isExists(id: string): Promise {
diff --git a/libs/event-emitter/src/models/dashboard.ts b/libs/event-emitter/src/models/dashboard.ts
index 88e1889..fc07929 100644
--- a/libs/event-emitter/src/models/dashboard.ts
+++ b/libs/event-emitter/src/models/dashboard.ts
@@ -1,6 +1,6 @@
export type Data = {
widgets: Widget[];
- title: string;
+ title?: string;
} | null;
export type Dashboard = {