Skip to content

Commit 89b8484

Browse files
committed
better GridStackEventHandlerCallback types
* GridStackEventHandlerCallback is not a list of specific callbacks so user can have better method signatures.
1 parent 21167d3 commit 89b8484

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

demo/events.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ function addEvents(grid, id) {
3838
console.log(g + 'dragstop ' + el.textContent + ' pos: (' + node.x + ',' + node.y + ') = (' + x + ',' + y + ')');
3939
});
4040

41-
grid.on('dropped', function(event, previousWidget, newWidget) {
42-
if (previousWidget) {
43-
console.log(g + 'dropped - Removed widget from grid:', previousWidget);
41+
grid.on('dropped', function(event, previousNode, newNode) {
42+
if (previousNode) {
43+
console.log(g + 'dropped - Removed widget from grid:', previousNode);
4444
}
45-
if (newWidget) {
46-
console.log(g + 'dropped - Added widget in grid:', newWidget);
45+
if (newNode) {
46+
console.log(g + 'dropped - Added widget in grid:', newNode);
4747
}
4848
});
4949

doc/CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ Change log
8080
## 7.1.1-dev (TBD)
8181
* fix [#939](https://github.com/gridstack/gridstack.js/issues/2039) 'prototype' undefined error for dd-gridstack.js
8282
* add [#939](https://github.com/gridstack/gridstack.js/issues/2105) disable/enable are methods now recursive by default
83+
* add better GridStackEventHandlerCallback spelled out types
8384

8485
## 7.1.1 (2022-11-13)
8586
* fix [#939](https://github.com/gridstack/gridstack.js/issues/939) editable elements focus (regression in v6). Thank you [@Gezdy](https://github.com/Gezdy)

src/gridstack.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
import { GridStackEngine } from './gridstack-engine';
99
import { Utils, HeightData, obsolete } from './utils';
1010
import { gridDefaults, ColumnOptions, GridItemHTMLElement, GridStackElement, GridStackEventHandlerCallback,
11-
GridStackNode, GridStackWidget, numberOrString, DDUIData, DDDragInOpt, GridStackPosition, GridStackOptions, dragInDefaultOptions } from './types';
11+
GridStackNode, GridStackWidget, numberOrString, DDUIData, DDDragInOpt, GridStackPosition, GridStackOptions,
12+
dragInDefaultOptions, GridStackEventHandler, GridStackNodesHandler } from './types';
1213

1314
/*
1415
* and include D&D by default
@@ -984,9 +985,9 @@ export class GridStack {
984985
// native CustomEvent handlers - cash the generic handlers so we can easily remove
985986
let noData = (name === 'enable' || name === 'disable');
986987
if (noData) {
987-
this._gsEventHandler[name] = (event: Event) => callback(event);
988+
this._gsEventHandler[name] = (event: Event) => (callback as GridStackEventHandler)(event);
988989
} else {
989-
this._gsEventHandler[name] = (event: CustomEvent) => callback(event, event.detail);
990+
this._gsEventHandler[name] = (event: CustomEvent) => (callback as GridStackNodesHandler)(event, event.detail);
990991
}
991992
this.el.addEventListener(name, this._gsEventHandler[name]);
992993
} else if (name === 'drag' || name === 'dragstart' || name === 'dragstop' || name === 'resizestart' || name === 'resize' || name === 'resizestop' || name === 'dropped') {

src/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ export interface GridItemHTMLElement extends HTMLElement {
6666

6767
export type GridStackElement = string | HTMLElement | GridItemHTMLElement;
6868

69-
export type GridStackEventHandlerCallback = (event: Event, arg2?: GridItemHTMLElement | GridStackNode | GridStackNode[], newNode?: GridStackNode) => void;
69+
/** specific and general event handlers for the .on() method */
70+
export type GridStackEventHandler = (event: Event) => void;
71+
export type GridStackElementHandler = (event: Event, el: GridItemHTMLElement) => void;
72+
export type GridStackNodesHandler = (event: Event, node: GridStackNode[]) => void;
73+
export type GridStackDroppedHandler = (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => void;
74+
export type GridStackEventHandlerCallback = GridStackEventHandler | GridStackElementHandler | GridStackNodesHandler | GridStackDroppedHandler;
7075

7176
/**
7277
* Defines the options for a Grid

0 commit comments

Comments
 (0)