Skip to content

Commit d01cf1e

Browse files
committed
feat: updating custom breakpoint props
1 parent b816d82 commit d01cf1e

4 files changed

Lines changed: 28 additions & 24 deletions

File tree

packages/module/src/WidgetLayout/GridLayout.tsx

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@ import {
1212
ExtendedTemplateConfig,
1313
AnalyticsTracker,
1414
WidgetConfiguration,
15+
Breakpoints,
1516
} from './types';
1617
import { Button, EmptyState, EmptyStateActions, EmptyStateBody, EmptyStateVariant, PageSection } from '@patternfly/react-core';
1718
import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-alt-icon';
1819
import GripVerticalIcon from '@patternfly/react-icons/dist/esm/icons/grip-vertical-icon';
1920
import PlusCircleIcon from '@patternfly/react-icons/dist/esm/icons/plus-circle-icon';
20-
import { columns, breakpoints, droppingElemId, getWidgetIdentifier, extendLayout, getGridDimensions } from './utils';
21-
22-
export const defaultBreakpoints = breakpoints;
21+
import { defaultBreakpoints, defaultColumns, droppingElemId, getWidgetIdentifier, extendLayout, getGridDimensions } from './utils';
2322

2423
const createSerializableConfig = (config?: WidgetConfiguration) => {
2524
if (!config) { return undefined; }
@@ -63,9 +62,9 @@ export interface GridLayoutProps {
6362
/** Resize configuration options */
6463
resizeWidgetConfig?: Partial<ResizeConfig>;
6564
/** Custom breakpoints for responsive layout (container width thresholds in px) */
66-
customBreakpoints?: Record<Variants, number>;
65+
breakpoints?: Breakpoints;
6766
/** Custom column counts per breakpoint variant */
68-
customColumns?: Record<Variants, number>;
67+
columns?: Record<Variants, number>;
6968
}
7069

7170
const LayoutEmptyState = ({
@@ -111,10 +110,9 @@ const GridLayout = ({
111110
onActiveWidgetsChange,
112111
droppingWidgetType,
113112
resizeWidgetConfig,
114-
customBreakpoints,
115-
customColumns,
113+
breakpoints = defaultBreakpoints,
114+
columns = defaultColumns,
116115
}: GridLayoutProps) => {
117-
const activeColumns = customColumns ?? columns;
118116
const [isDragging, setIsDragging] = useState(false);
119117
const [isInitialRender, setIsInitialRender] = useState(true);
120118
const [layoutVariant, setLayoutVariant] = useState<Variants>('xl');
@@ -179,8 +177,8 @@ const GridLayout = ({
179177
...layoutItem,
180178
...widget.defaults,
181179
// make sure the configuration is valid for all layout sizes
182-
w: size === layoutVariant ? layoutItem.w : Math.min(widget.defaults.w, activeColumns[size as Variants]),
183-
x: size === layoutVariant ? layoutItem.x : Math.min(layoutItem.x, activeColumns[size as Variants]),
180+
w: size === layoutVariant ? layoutItem.w : Math.min(widget.defaults.w, columns[size as Variants]),
181+
x: size === layoutVariant ? layoutItem.x : Math.min(layoutItem.x, columns[size as Variants]),
184182
widgetType: data,
185183
i: getWidgetIdentifier(data),
186184
title: 'New title',
@@ -233,10 +231,10 @@ const GridLayout = ({
233231
// Update layout variant when container width changes
234232
useEffect(() => {
235233
if (mounted && layoutWidth > 0) {
236-
const variant: Variants = getGridDimensions(layoutWidth, customBreakpoints);
234+
const variant: Variants = getGridDimensions(layoutWidth, breakpoints);
237235
setLayoutVariant(variant);
238236
}
239-
}, [layoutWidth, mounted]);
237+
}, [layoutWidth, mounted, breakpoints]);
240238

241239
const activeLayout = internalTemplate[layoutVariant] || [];
242240

@@ -254,7 +252,7 @@ const GridLayout = ({
254252
width={effectiveWidth}
255253
droppingItem={droppingItemTemplate}
256254
gridConfig={{
257-
cols: activeColumns[layoutVariant],
255+
cols: columns[layoutVariant],
258256
rowHeight: 56,
259257
}}
260258
dragConfig={{
@@ -290,7 +288,7 @@ const GridLayout = ({
290288
widgetType={widgetType}
291289
widgetConfig={{
292290
...layoutItem,
293-
colWidth: effectiveWidth / activeColumns[layoutVariant],
291+
colWidth: effectiveWidth / columns[layoutVariant],
294292
config,
295293
maxH: layoutItem.maxH ?? widget.defaults.maxH,
296294
minH: layoutItem.minH ?? widget.defaults.minH,

packages/module/src/WidgetLayout/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export { default as WidgetDrawer } from './WidgetDrawer';
55

66
export * from './types';
77
export {
8-
columns,
9-
breakpoints,
8+
defaultColumns,
9+
defaultBreakpoints,
1010
droppingElemId,
1111
getWidgetIdentifier,
1212
mapWidgetDefaults,

packages/module/src/WidgetLayout/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ export const widgetIdSeparator = '#';
55

66
export type Variants = 'sm' | 'md' | 'lg' | 'xl';
77

8+
export interface Breakpoints {
9+
sm: number;
10+
md: number;
11+
lg: number;
12+
xl: number;
13+
}
14+
815
export type LayoutWithTitle = LayoutItem & { title: string };
916

1017
export type TemplateConfig = {

packages/module/src/WidgetLayout/utils.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { ExtendedTemplateConfig, TemplateConfig, Variants, widgetIdSeparator } from './types';
1+
import { ExtendedTemplateConfig, TemplateConfig, Variants, widgetIdSeparator, Breakpoints } from './types';
22

33
export const droppingElemId = '__dropping-elem__';
44

5-
export const columns: Record<Variants, number> = { xl: 4, lg: 3, md: 2, sm: 1 };
5+
export const defaultColumns: Record<Variants, number> = { xl: 4, lg: 3, md: 2, sm: 1 };
66

7-
export const breakpoints: Record<Variants, number> = { xl: 1550, lg: 1400, md: 1100, sm: 800 };
7+
export const defaultBreakpoints: Breakpoints = { xl: 1550, lg: 1400, md: 1100, sm: 800 };
88

99
/**
1010
* Generate a unique widget identifier
@@ -52,15 +52,14 @@ export const extendLayout = (extendedTemplateConfig: ExtendedTemplateConfig): Ex
5252
/**
5353
* Get grid dimensions based on container width
5454
*/
55-
export function getGridDimensions(currentWidth: number, customBreakpoints?: Record<Variants, number>): Variants {
56-
const bp = customBreakpoints ?? breakpoints;
57-
if (currentWidth >= bp.xl) {
55+
export function getGridDimensions(currentWidth: number, breakpoints: Breakpoints = defaultBreakpoints): Variants {
56+
if (currentWidth >= breakpoints.xl) {
5857
return 'xl';
5958
}
60-
if (currentWidth >= bp.lg) {
59+
if (currentWidth >= breakpoints.lg) {
6160
return 'lg';
6261
}
63-
if (currentWidth >= bp.md) {
62+
if (currentWidth >= breakpoints.md) {
6463
return 'md';
6564
}
6665
return 'sm';

0 commit comments

Comments
 (0)