mirror of
https://github.com/OneUptime/oneuptime
synced 2024-11-22 15:24:55 +00:00
69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
import DashboardViewConfig from "../../Types/Dashboard/DashboardViewConfig";
|
|
import { ObjectType } from "../../Types/JSON";
|
|
import DashboardSize from "../../Types/Dashboard/DashboardSize";
|
|
import DashboardBaseComponent from "../../Types/Dashboard/DashboardComponents/DashboardBaseComponent";
|
|
|
|
export default class DashboardViewConfigUtil {
|
|
public static createDefaultDashboardViewConfig(): DashboardViewConfig {
|
|
return {
|
|
_type: ObjectType.DashboardViewConfig,
|
|
components: [],
|
|
heightInDashboardUnits: DashboardSize.heightInDashboardUnits,
|
|
};
|
|
}
|
|
|
|
public static addComponentToDashboard(data: {
|
|
component: DashboardBaseComponent;
|
|
dashboardViewConfig: DashboardViewConfig;
|
|
}): DashboardViewConfig {
|
|
const heightOfComponent: number = data.component.heightInDashboardUnits;
|
|
|
|
// find the last row that has enough space to fit the component. If there is no such row, create a new row or rows to fit the component.
|
|
const allComponentsFromDashboard: Array<DashboardBaseComponent> =
|
|
data.dashboardViewConfig.components;
|
|
|
|
let componentTopPosition: number = 0;
|
|
|
|
// find the last row that has the component.
|
|
|
|
let lastRowThatHasComponent: number = -1;
|
|
|
|
for (const dashboardComponent of allComponentsFromDashboard) {
|
|
if (
|
|
lastRowThatHasComponent <
|
|
dashboardComponent.topInDashboardUnits +
|
|
dashboardComponent.heightInDashboardUnits -
|
|
1
|
|
) {
|
|
lastRowThatHasComponent =
|
|
dashboardComponent.topInDashboardUnits +
|
|
dashboardComponent.heightInDashboardUnits -
|
|
1;
|
|
}
|
|
}
|
|
|
|
componentTopPosition = lastRowThatHasComponent + 1;
|
|
|
|
// check height of the component. If it is bigger than the last row that has the component, create more rows and udate the height of dashboardViewConfig.
|
|
|
|
if (
|
|
componentTopPosition + heightOfComponent >
|
|
data.dashboardViewConfig.heightInDashboardUnits
|
|
) {
|
|
data.dashboardViewConfig.heightInDashboardUnits =
|
|
componentTopPosition + heightOfComponent;
|
|
}
|
|
|
|
const newComponent: DashboardBaseComponent = {
|
|
...data.component,
|
|
topInDashboardUnits: componentTopPosition,
|
|
leftInDashboardUnits: 0,
|
|
};
|
|
|
|
// Add the new component to the dashboard configuration
|
|
data.dashboardViewConfig.components.push(newComponent);
|
|
|
|
return { ...data.dashboardViewConfig };
|
|
}
|
|
}
|