mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-06-04 04:22:57 +00:00
68 lines
1.2 KiB
TypeScript
68 lines
1.2 KiB
TypeScript
import type { ServiceEntity } from '@/lib/api-client';
|
|
|
|
export type CanvasPoint = {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
|
|
export type CanvasGroup = {
|
|
id: string;
|
|
title: string;
|
|
position: CanvasPoint;
|
|
width: number;
|
|
height: number;
|
|
};
|
|
|
|
export type CanvasNodeLayout = {
|
|
serviceId: string;
|
|
position: CanvasPoint;
|
|
groupId?: string;
|
|
};
|
|
|
|
export type CanvasEdge = {
|
|
id: string;
|
|
sourceServiceId: string;
|
|
targetServiceId: string;
|
|
};
|
|
|
|
export type CanvasViewport = {
|
|
x: number;
|
|
y: number;
|
|
zoom: number;
|
|
};
|
|
|
|
export type ProjectCanvasMetadata = {
|
|
groups: CanvasGroup[];
|
|
nodes: CanvasNodeLayout[];
|
|
edges: CanvasEdge[];
|
|
viewport: CanvasViewport;
|
|
};
|
|
|
|
export const DEFAULT_VIEWPORT: CanvasViewport = {
|
|
x: 0,
|
|
y: 0,
|
|
zoom: 1,
|
|
};
|
|
|
|
export function createDefaultCanvasMetadata(services: ServiceEntity[]): ProjectCanvasMetadata {
|
|
const nodes = services.map((service, index) => {
|
|
const col = index % 3;
|
|
const row = Math.floor(index / 3);
|
|
|
|
return {
|
|
serviceId: service.id,
|
|
position: {
|
|
x: 70 + col * 260,
|
|
y: 80 + row * 170,
|
|
},
|
|
};
|
|
});
|
|
|
|
return {
|
|
groups: [],
|
|
nodes,
|
|
edges: [],
|
|
viewport: DEFAULT_VIEWPORT,
|
|
};
|
|
}
|