Skip to content

Commit 7649a72

Browse files
authored
Merge pull request #23 from Jakub007d/breakpoint
feat: adding custom breakpoint interface
2 parents 17d1d26 + d01cf1e commit 7649a72

File tree

4 files changed

+23
-11
lines changed

4 files changed

+23
-11
lines changed

packages/module/src/WidgetLayout/GridLayout.tsx

Lines changed: 10 additions & 5 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; }
@@ -62,6 +61,10 @@ export interface GridLayoutProps {
6261
droppingWidgetType?: string;
6362
/** Resize configuration options */
6463
resizeWidgetConfig?: Partial<ResizeConfig>;
64+
/** Custom breakpoints for responsive layout (container width thresholds in px) */
65+
breakpoints?: Breakpoints;
66+
/** Custom column counts per breakpoint variant */
67+
columns?: Record<Variants, number>;
6568
}
6669

6770
const LayoutEmptyState = ({
@@ -107,6 +110,8 @@ const GridLayout = ({
107110
onActiveWidgetsChange,
108111
droppingWidgetType,
109112
resizeWidgetConfig,
113+
breakpoints = defaultBreakpoints,
114+
columns = defaultColumns,
110115
}: GridLayoutProps) => {
111116
const [isDragging, setIsDragging] = useState(false);
112117
const [isInitialRender, setIsInitialRender] = useState(true);
@@ -226,10 +231,10 @@ const GridLayout = ({
226231
// Update layout variant when container width changes
227232
useEffect(() => {
228233
if (mounted && layoutWidth > 0) {
229-
const variant: Variants = getGridDimensions(layoutWidth);
234+
const variant: Variants = getGridDimensions(layoutWidth, breakpoints);
230235
setLayoutVariant(variant);
231236
}
232-
}, [layoutWidth, mounted]);
237+
}, [layoutWidth, mounted, breakpoints]);
233238

234239
const activeLayout = internalTemplate[layoutVariant] || [];
235240

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: 4 additions & 4 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,7 +52,7 @@ export const extendLayout = (extendedTemplateConfig: ExtendedTemplateConfig): Ex
5252
/**
5353
* Get grid dimensions based on container width
5454
*/
55-
export function getGridDimensions(currentWidth: number): Variants {
55+
export function getGridDimensions(currentWidth: number, breakpoints: Breakpoints = defaultBreakpoints): Variants {
5656
if (currentWidth >= breakpoints.xl) {
5757
return 'xl';
5858
}

0 commit comments

Comments
 (0)