MCPcopy Create free account
hub / github.com/pinterest/gestalt / getLayoutAlgorithm

Function getLayoutAlgorithm

packages/gestalt/src/Masonry/getLayoutAlgorithm.ts:22–101  ·  view source on GitHub ↗
({
  align,
  columnWidth,
  gutter,
  items,
  layout,
  measurementStore,
  minCols,
  positionStore,
  width,
  _getColumnSpanConfig,
  _getResponsiveModuleConfigForSecondItem,
  _logTwoColWhitespace,
  _getModulePositioningConfig,
  _multiColPositionAlgoV2,
}: {
  align: Align;
  columnWidth: number | undefined;
  gutter: number;
  items: ReadonlyArray<T>;
  layout: Layout;
  measurementStore: Cache<T, number>;
  minCols: number;
  positionStore: Cache<T, Position>;
  width: number | null | undefined;
  _getColumnSpanConfig?: (item: T) => ColumnSpanConfig;
  _getModulePositioningConfig?: (gridSize: number, moduleSize: number) => ModulePositioningConfig;
  _getResponsiveModuleConfigForSecondItem?: (item: T) => ResponsiveModuleConfig;
  _logTwoColWhitespace?: (
    additionalWhitespace: ReadonlyArray<number>,
    numberOfIterations: number,
    columnSpan: number,
  ) => void;
  _multiColPositionAlgoV2?: boolean;
})

Source from the content-addressed store, hash-verified

20}
21
22export default function getLayoutAlgorithm<T>({
23 align,
24 columnWidth,
25 gutter,
26 items,
27 layout,
28 measurementStore,
29 minCols,
30 positionStore,
31 width,
32 _getColumnSpanConfig,
33 _getResponsiveModuleConfigForSecondItem,
34 _logTwoColWhitespace,
35 _getModulePositioningConfig,
36 _multiColPositionAlgoV2,
37}: {
38 align: Align;
39 columnWidth: number | undefined;
40 gutter: number;
41 items: ReadonlyArray<T>;
42 layout: Layout;
43 measurementStore: Cache<T, number>;
44 minCols: number;
45 positionStore: Cache<T, Position>;
46 width: number | null | undefined;
47 _getColumnSpanConfig?: (item: T) => ColumnSpanConfig;
48 _getModulePositioningConfig?: (gridSize: number, moduleSize: number) => ModulePositioningConfig;
49 _getResponsiveModuleConfigForSecondItem?: (item: T) => ResponsiveModuleConfig;
50 _logTwoColWhitespace?: (
51 additionalWhitespace: ReadonlyArray<number>,
52 numberOfIterations: number,
53 columnSpan: number,
54 ) => void;
55 _multiColPositionAlgoV2?: boolean;
56}): (items: ReadonlyArray<T>) => ReadonlyArray<Position> {
57 if (getIsFlexibleLayout({ layout, width })) {
58 return fullWidthLayout({
59 gutter,
60 layout,
61 measurementCache: measurementStore,
62 positionCache: positionStore,
63 minCols,
64 idealColumnWidth: columnWidth,
65 width,
66 originalItems: items,
67 logWhitespace: _logTwoColWhitespace,
68 _getColumnSpanConfig,
69 _getResponsiveModuleConfigForSecondItem,
70 _multiColPositionAlgoV2,
71 _getModulePositioningConfig,
72 });
73 }
74 if (layout.startsWith('uniformRow')) {
75 return uniformRowLayout({
76 cache: measurementStore,
77 columnWidth,
78 gutter,
79 flexible: layout === 'uniformRowFlexible',

Callers 2

renderMethod · 0.85
useLayoutFunction · 0.85

Calls 4

getIsFlexibleLayoutFunction · 0.85
fullWidthLayoutFunction · 0.85
uniformRowLayoutFunction · 0.85
defaultLayoutFunction · 0.85

Tested by

no test coverage detected