Skip to content

Commit e6d08d4

Browse files
committed
feat: adding custom breakpoint interface
1 parent 17d1d26 commit e6d08d4

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

packages/module/src/WidgetLayout/GridLayout.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,12 @@ export interface GridLayoutProps {
6060
onActiveWidgetsChange?: (widgetTypes: string[]) => void;
6161
/** Widget type currently being dragged from drawer */
6262
droppingWidgetType?: string;
63-
/** Resize configuration options */
63+
/** Resize configuration overrides */
6464
resizeWidgetConfig?: Partial<ResizeConfig>;
65+
/** Custom breakpoints for responsive layout (container width thresholds in px) */
66+
customBreakpoints?: Record<Variants, number>;
67+
/** Custom column counts per breakpoint variant */
68+
customColumns?: Record<Variants, number>;
6569
}
6670

6771
const LayoutEmptyState = ({
@@ -107,7 +111,10 @@ const GridLayout = ({
107111
onActiveWidgetsChange,
108112
droppingWidgetType,
109113
resizeWidgetConfig,
114+
customBreakpoints,
115+
customColumns,
110116
}: GridLayoutProps) => {
117+
const activeColumns = customColumns ?? columns;
111118
const [isDragging, setIsDragging] = useState(false);
112119
const [isInitialRender, setIsInitialRender] = useState(true);
113120
const [layoutVariant, setLayoutVariant] = useState<Variants>('xl');
@@ -172,8 +179,8 @@ const GridLayout = ({
172179
...layoutItem,
173180
...widget.defaults,
174181
// make sure the configuration is valid for all layout sizes
175-
w: size === layoutVariant ? layoutItem.w : Math.min(widget.defaults.w, columns[size as Variants]),
176-
x: size === layoutVariant ? layoutItem.x : Math.min(layoutItem.x, columns[size as Variants]),
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]),
177184
widgetType: data,
178185
i: getWidgetIdentifier(data),
179186
title: 'New title',
@@ -226,7 +233,7 @@ const GridLayout = ({
226233
// Update layout variant when container width changes
227234
useEffect(() => {
228235
if (mounted && layoutWidth > 0) {
229-
const variant: Variants = getGridDimensions(layoutWidth);
236+
const variant: Variants = getGridDimensions(layoutWidth, customBreakpoints);
230237
setLayoutVariant(variant);
231238
}
232239
}, [layoutWidth, mounted]);
@@ -247,7 +254,7 @@ const GridLayout = ({
247254
width={effectiveWidth}
248255
droppingItem={droppingItemTemplate}
249256
gridConfig={{
250-
cols: columns[layoutVariant],
257+
cols: activeColumns[layoutVariant],
251258
rowHeight: 56,
252259
}}
253260
dragConfig={{
@@ -283,7 +290,7 @@ const GridLayout = ({
283290
widgetType={widgetType}
284291
widgetConfig={{
285292
...layoutItem,
286-
colWidth: effectiveWidth / columns[layoutVariant],
293+
colWidth: effectiveWidth / activeColumns[layoutVariant],
287294
config,
288295
maxH: layoutItem.maxH ?? widget.defaults.maxH,
289296
minH: layoutItem.minH ?? widget.defaults.minH,

packages/module/src/WidgetLayout/utils.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,15 @@ export const extendLayout = (extendedTemplateConfig: ExtendedTemplateConfig): Ex
5252
/**
5353
* Get grid dimensions based on container width
5454
*/
55-
export function getGridDimensions(currentWidth: number): Variants {
56-
if (currentWidth >= breakpoints.xl) {
55+
export function getGridDimensions(currentWidth: number, customBreakpoints?: Record<Variants, number>): Variants {
56+
const bp = customBreakpoints ?? breakpoints;
57+
if (currentWidth >= bp.xl) {
5758
return 'xl';
5859
}
59-
if (currentWidth >= breakpoints.lg) {
60+
if (currentWidth >= bp.lg) {
6061
return 'lg';
6162
}
62-
if (currentWidth >= breakpoints.md) {
63+
if (currentWidth >= bp.md) {
6364
return 'md';
6465
}
6566
return 'sm';

0 commit comments

Comments
 (0)