Skip to content

Commit 2f133d9

Browse files
authored
feat: allow layers to utilise CoreEventHandler mouseleave options (#705)
1 parent 48cb5cb commit 2f133d9

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

.changeset/smooth-elephants-clean.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@craftjs/core': patch
3+
'@craftjs/layers': patch
4+
---
5+
6+
Use removeHoverOnMouseleave option for layers package

packages/core/src/events/CoreEventHandlers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export interface CreateHandlerOptions {
88
}
99

1010
export class CoreEventHandlers<O = {}> extends EventHandlers<
11-
{ store: EditorStore } & O
11+
{ store: EditorStore; removeHoverOnMouseleave: boolean } & O
1212
> {
1313
handlers() {
1414
return {

packages/core/src/events/DefaultEventHandlers.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,14 @@ export class DefaultEventHandlers<O = {}> extends CoreEventHandlers<
138138
let unbindMouseleave: (() => void) | null = null;
139139

140140
if (this.options.removeHoverOnMouseleave) {
141-
this.addCraftEventListener(el, 'mouseleave', (e) => {
142-
e.craft.stopPropagation();
143-
store.actions.setNodeEvent('hovered', null);
144-
});
141+
unbindMouseleave = this.addCraftEventListener(
142+
el,
143+
'mouseleave',
144+
(e) => {
145+
e.craft.stopPropagation();
146+
store.actions.setNodeEvent('hovered', null);
147+
}
148+
);
145149
}
146150

147151
return () => {

packages/layers/src/events/LayerHandlers.ts

+19
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ export class LayerHandlers extends DerivedCoreEventHandlers<{
4242
}
4343
);
4444

45+
let unbindMouseleave: (() => void) | null = null;
46+
47+
if (this.derived.options.removeHoverOnMouseleave) {
48+
unbindMouseleave = this.addCraftEventListener(
49+
el,
50+
'mouseleave',
51+
(e) => {
52+
e.craft.stopPropagation();
53+
layerStore.actions.setLayerEvent('hovered', null);
54+
}
55+
);
56+
}
57+
4558
const unbindDragOver = this.addCraftEventListener(
4659
el,
4760
'dragover',
@@ -174,6 +187,12 @@ export class LayerHandlers extends DerivedCoreEventHandlers<{
174187
unbindMouseOver();
175188
unbindDragOver();
176189
unbindDragEnter();
190+
191+
if (!unbindMouseleave) {
192+
return;
193+
}
194+
195+
unbindMouseleave();
177196
};
178197
},
179198
layerHeader: (el: HTMLElement, layerId: NodeId) => {

0 commit comments

Comments
 (0)