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 = {