Skip to content

Commit b0f4ca9

Browse files
committed
More widget playground fixes
1 parent 5f06a80 commit b0f4ca9

1 file changed

Lines changed: 23 additions & 24 deletions

File tree

  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/widget-playground

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/widget-playground/page-client.tsx

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,8 @@ const widgets: Widget<any, any>[] = [
824824
const grid = WidgetInstanceGrid.fromSerialized(options.state.serializedGrid);
825825
const minSize = grid.getMinResizableSize();
826826
return {
827-
widthInGridUnits: minSize.width + 1,
828-
heightInGridUnits: minSize.height + 1,
827+
widthInGridUnits: Math.max(minSize.width, WidgetInstanceGrid.MIN_ELEMENT_WIDTH) + 1,
828+
heightInGridUnits: Math.max(minSize.height, WidgetInstanceGrid.MIN_ELEMENT_HEIGHT) + 1,
829829
};
830830
},
831831
},
@@ -1016,6 +1016,7 @@ const SwappableWidgetInstanceGridContext = React.createContext<{
10161016

10171017
function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGrid>, isSingleColumnMode: boolean | "auto", allowVariableHeight: boolean, isStatic: boolean }) {
10181018
const [draggingType, setDraggingType] = useState<"element" | "var-height" | null>(null);
1019+
const [activeElementInitialRect, setActiveElementInitialRect] = useState<DOMRect | null>(null); // onDragOver's event.active.rect.current.initial is the intial rect when the *swap* starts, not the drag, so we want to store the initial rect of the drag somewhere
10191020
const [overElementPosition, setOverElementPosition] = useState<[number, number] | null>(null);
10201021
const [overVarHeightSlot, setOverVarHeightSlot] = useState<["before", string] | ["end-of", number] | null>(null);
10211022
const [hoverElementSwap, setHoverElementSwap] = useState<[string, [number, number, number, number, number, number]] | null>(null);
@@ -1180,24 +1181,28 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
11801181
onDragStart={(event) => {
11811182
setActiveInstanceId(event.active.id as string);
11821183
setDraggingType("element");
1184+
setActiveElementInitialRect(event.activatorEvent.target.getBoundingClientRect());
11831185
}}
11841186
onDragAbort={() => {
11851187
setHoverElementSwap(null);
11861188
setActiveInstanceId(null);
11871189
setOverElementPosition(null);
11881190
setDraggingType(null);
1191+
setActiveElementInitialRect(null);
11891192
}}
11901193
onDragCancel={() => {
1191-
/*setHoverElementSwap(null);
1194+
setHoverElementSwap(null);
11921195
setActiveInstanceId(null);
11931196
setOverElementPosition(null);
1194-
setDraggingType(null);*/
1197+
setDraggingType(null);
1198+
setActiveElementInitialRect(null);
11951199
}}
11961200
onDragEnd={(event) => {
11971201
setHoverElementSwap(null);
11981202
setActiveInstanceId(null);
11991203
setOverElementPosition(null);
12001204
setDraggingType(null);
1205+
setActiveElementInitialRect(null);
12011206

12021207
const widgetId = event.active.id;
12031208
const widgetElement = [...props.gridRef.current.elements()].find(({ instance }) => instance?.id === widgetId);
@@ -1210,6 +1215,8 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
12101215
if (props.gridRef.current.canSwap(...swapArgs)) {
12111216
const newGrid = props.gridRef.current.withSwappedElements(...swapArgs);
12121217
props.gridRef.set(newGrid);
1218+
} else {
1219+
alert("Cannot swap elements; make sure the new locations are big enough for the widgets");
12131220
}
12141221
}
12151222
}}
@@ -1234,22 +1241,14 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
12341241
}
12351242
const overId = props.gridRef.current.getElementAt(overCoordinates[0], overCoordinates[1]).instance?.id;
12361243
if (overId && overId !== widgetId) {
1237-
setHoverElementSwap([overId, [
1238-
event.over.rect.left - event.active.rect.current.initial.left,
1239-
event.over.rect.top - event.active.rect.current.initial.top,
1240-
event.active.rect.current.initial.width,
1241-
event.active.rect.current.initial.height,
1242-
event.over.rect.width,
1243-
event.over.rect.height,
1244-
]]);
1245-
console.log("newHoverElementSwap", [
1246-
event.over.rect.left - event.active.rect.current.initial.left,
1247-
event.over.rect.top - event.active.rect.current.initial.top,
1248-
event.active.rect.current.initial.width,
1249-
event.active.rect.current.initial.height,
1250-
event.over.rect.width,
1251-
event.over.rect.height,
1252-
]);
1244+
setHoverElementSwap([overId, [
1245+
event.over.rect.left - activeElementInitialRect.left,
1246+
event.over.rect.top - activeElementInitialRect.top,
1247+
activeElementInitialRect.width,
1248+
activeElementInitialRect.height,
1249+
event.over.rect.width,
1250+
event.over.rect.height,
1251+
]]);
12531252
} else {
12541253
setHoverElementSwap(null);
12551254
}
@@ -1300,8 +1299,8 @@ function SwappableWidgetInstanceGrid(props: { gridRef: RefState<WidgetInstanceGr
13001299
isEditing={context.isEditing}
13011300
style={{
13021301
transform: isHoverSwap ? `translate(${-hoverElementSwap[1][0]}px, ${-hoverElementSwap[1][1]}px)` : undefined,
1303-
width: isHoverSwap ? `${hoverElementSwap[1][2]}px` : (hoverElementSwap && activeWidgetId === instance.id ? `${hoverElementSwap[1][4]}px` : undefined),
1304-
height: isHoverSwap ? `${hoverElementSwap[1][3]}px` : (hoverElementSwap && activeWidgetId === instance.id ? `${hoverElementSwap[1][5]}px` : undefined),
1302+
minWidth: isHoverSwap ? `${hoverElementSwap[1][2]}px` : (hoverElementSwap && activeWidgetId === instance.id ? `${hoverElementSwap[1][4]}px` : undefined),
1303+
minHeight: isHoverSwap ? `${hoverElementSwap[1][3]}px` : (hoverElementSwap && activeWidgetId === instance.id ? `${hoverElementSwap[1][5]}px` : undefined),
13051304
}}
13061305
isSingleColumnMode={isSingleColumnMode}
13071306
onDeleteWidget={async () => {
@@ -1575,8 +1574,8 @@ function Draggable(props: {
15751574
transition: [
15761575
'border-width 0.1s ease',
15771576
'box-shadow 0.1s ease',
1578-
props.activeWidgetId !== props.widgetInstance.id && (props.activeWidgetId !== null) ? 'transform 0.2s ease, width 0.2s ease, height 0.2s ease' : undefined,
1579-
props.activeWidgetId === props.widgetInstance.id ? 'width 0.2s ease, height 0.2s ease' : undefined,
1577+
props.activeWidgetId !== props.widgetInstance.id && (props.activeWidgetId !== null) ? 'transform 0.2s ease, min-width 0.2s ease, min-height 0.2s ease' : undefined,
1578+
props.activeWidgetId === props.widgetInstance.id ? 'min-width 0.2s ease, min-height 0.2s ease' : undefined,
15801579
].filter(Boolean).join(', '),
15811580
...filterUndefined(props.style ?? {}),
15821581
transform: `translate3d(${transform?.x ?? 0}px, ${transform?.y ?? 0}px, 0) ${props.style?.transform ?? ''}`,

0 commit comments

Comments
 (0)