File size: 1,183 Bytes
044eef3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { Layout } from '../types/layout.types';
import { CanvasObject } from '../types/canvas.types';
import { generateId } from './canvas.utils';

/**
 * Load a layout and convert all objects to canvas objects
 */
export function loadLayout(layout: Layout, startingZIndex: number = 0): CanvasObject[] {
  return layout.objects.map((layoutObj, index) =>
    layoutObjectToCanvasObject(layoutObj, startingZIndex + index)
  );
}

/**
 * Convert a layout object to a canvas object
 */
export function layoutObjectToCanvasObject(
  layoutObj: any,
  startingZIndex: number
): CanvasObject {
  return {
    ...layoutObj,
    id: generateId(),
    zIndex: startingZIndex
  } as CanvasObject;
}

/**
 * Get layouts by canvas size
 */
export function getLayoutsByCanvasSize(layouts: Layout[], canvasSize: string): Layout[] {
  return layouts.filter(layout => layout.canvasSize === canvasSize);
}

/**
 * Validate layout object structure
 */
export function isValidLayout(layout: any): layout is Layout {
  return (
    layout &&
    typeof layout.id === 'string' &&
    typeof layout.name === 'string' &&
    typeof layout.canvasSize === 'string' &&
    Array.isArray(layout.objects)
  );
}