Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions modules/core/src/lib/deck.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1381,14 +1381,14 @@ export default class Deck<ViewsT extends ViewOrViews = null> {
touchAction: this.props.touchAction,
recognizers: Object.keys(RECOGNIZERS).map((eventName: string) => {
// Resolve recognizer settings
const [RecognizerConstructor, defaultOptions, recognizeWith, requestFailure] =
const [RecognizerConstructor, defaultOptions, recognizeWith, requireFailure] =
RECOGNIZERS[eventName];
const optionsOverride = this.props.eventRecognizerOptions?.[eventName];
const options = {...defaultOptions, ...optionsOverride, event: eventName};
return {
recognizer: new RecognizerConstructor(options),
recognizeWith,
requestFailure
requireFailure
};
}),
events: {
Expand Down
34 changes: 34 additions & 0 deletions test/modules/core/lib/deck.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,40 @@ test('Deck#constructor', async () => {
console.log('Deck constructor did not throw');
});

test('Deck wires mjolnir requireFailure between recognizers', async () => {
// Regression guard: deck.gl previously emitted `requestFailure` instead of
// `requireFailure`, which mjolnir silently dropped — so pinch/pan/click no
// longer waited for their blocking recognizer to fail.
await new Promise<void>((resolve, reject) => {
const deck = new Deck({
device,
width: 1,
height: 1,
viewState: {longitude: 0, latitude: 0, zoom: 0},
layers: [],
controller: true,
onLoad: () => {
try {
const recognizers = (deck as any).eventManager?.manager?.recognizers ?? [];
const requiredFailures = (event: string): string[] =>
(recognizers.find(r => r.options.event === event)?.requireFail ?? []).map(
(r: any) => r.options.event
);

expect(requiredFailures('pinch'), 'pinch waits for multipan').toContain('multipan');
expect(requiredFailures('pan'), 'pan waits for multipan').toContain('multipan');
expect(requiredFailures('click'), 'click waits for dblclick').toContain('dblclick');

deck.finalize();
resolve();
} catch (error) {
reject(error);
}
}
});
});
});

test('Deck#abort', async () => {
const deck = new Deck({
device,
Expand Down
Loading