Skip to content

Commit 203feb8

Browse files
:sparkles feat(agenda-events): select surface to create timed events (#1392)
chore: update dev dependencies add jest-canvas-mock
1 parent d83bc25 commit 203feb8

File tree

73 files changed

+2031
-1046
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2031
-1046
lines changed

jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ const config = {
166166
"<rootDir>/packages/core/src/__tests__/core.test.init.ts",
167167
"<rootDir>/packages/core/src/__tests__/core.test.start.ts",
168168
"<rootDir>/packages/web/src/__tests__/web.test.init.ts",
169+
"jest-canvas-mock",
169170
],
170171
setupFilesAfterEnv: [
171172
"<rootDir>/packages/web/src/__tests__/web.test.start.ts",

packages/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@
7373
"autoprefixer": "^10.4.21",
7474
"babel-jest": "^29.3.1",
7575
"babel-plugin-styled-components": "^2.0.2",
76-
"canvas": "^3.2.0",
7776
"eslint-plugin-jest-dom": "^4.0.3",
7877
"eslint-plugin-jsx-a11y": "^6.5.1",
7978
"eslint-plugin-react": "^7.28.0",
8079
"eslint-plugin-react-hooks": "^5.1.0",
8180
"eslint-plugin-testing-library": "^5.0.5",
8281
"jest": "^29.0.3",
82+
"jest-canvas-mock": "^2.5.2",
8383
"jest-environment-jsdom": "^29.7.0",
8484
"jest-styled-components": "^7.0.5",
8585
"msw": "^1.0.1",

packages/web/src/__tests__/jsdom.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,49 @@ class MediaQuery implements MediaQueryList {
5959
}
6060
}
6161

62+
function getPointerEvent(mouseEvent: typeof globalThis.MouseEvent) {
63+
class PointerEvent extends mouseEvent implements globalThis.PointerEvent {
64+
altitudeAngle: number;
65+
azimuthAngle: number;
66+
height: number;
67+
isPrimary: boolean;
68+
pointerId: number;
69+
pointerType: string;
70+
pressure: number;
71+
tangentialPressure: number;
72+
tiltX: number;
73+
tiltY: number;
74+
twist: number;
75+
width: number;
76+
77+
constructor(type: string, eventInitDict?: PointerEventInit) {
78+
super(type, eventInitDict);
79+
this.altitudeAngle = eventInitDict?.altitudeAngle ?? 0;
80+
this.azimuthAngle = eventInitDict?.azimuthAngle ?? 0;
81+
this.height = eventInitDict?.height ?? 1;
82+
this.isPrimary = eventInitDict?.isPrimary ?? false;
83+
this.pointerId = eventInitDict?.pointerId ?? 0;
84+
this.pointerType = eventInitDict?.pointerType ?? "";
85+
this.pressure = eventInitDict?.pressure ?? 0;
86+
this.tangentialPressure = eventInitDict?.tangentialPressure ?? 0;
87+
this.tiltX = eventInitDict?.tiltX ?? 0;
88+
this.tiltY = eventInitDict?.tiltY ?? 0;
89+
this.twist = eventInitDict?.twist ?? 0;
90+
this.width = eventInitDict?.width ?? 1;
91+
}
92+
93+
getCoalescedEvents(): globalThis.PointerEvent[] {
94+
throw new Error("Method not implemented.");
95+
}
96+
97+
getPredictedEvents(): globalThis.PointerEvent[] {
98+
throw new Error("Method not implemented.");
99+
}
100+
}
101+
102+
return PointerEvent;
103+
}
104+
62105
export default class WASMEnvironment extends TestEnvironment {
63106
override async setup(): Promise<void> {
64107
const css = await getTailwindCss();
@@ -73,6 +116,7 @@ export default class WASMEnvironment extends TestEnvironment {
73116
this.global.window.HTMLElement.prototype.scroll = () => {};
74117
this.global.window.HTMLElement.prototype.scrollIntoView = () => {};
75118
this.global.window.document.elementFromPoint = () => null;
119+
this.global.PointerEvent = getPointerEvent(this.global.MouseEvent);
76120

77121
this.global.fetch = fetch as unknown as typeof globalThis.fetch;
78122
this.global.Blob = globalThis.Blob;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import "@testing-library/jest-dom";
2+
import { Schema_Event } from "@core/types/event.types";
3+
import { createStoreWithEvents } from "@web/__tests__/utils/state/store.test.util";
4+
import * as eventSelectors from "@web/ducks/events/selectors/event.selectors";
5+
import * as reduxStore from "@web/store";
6+
import { store } from "@web/store";
7+
import { Agenda } from "@web/views/Day/components/Agenda/Agenda";
8+
import { renderWithDayProviders } from "@web/views/Day/util/day.test-util";
9+
10+
export const selectIsDayEventsProcessingSpy = jest.spyOn(
11+
eventSelectors,
12+
"selectIsDayEventsProcessing",
13+
);
14+
15+
export const renderAgenda = (
16+
events: Schema_Event[] = [],
17+
options?: { isProcessing?: boolean },
18+
) => {
19+
selectIsDayEventsProcessingSpy.mockReturnValue(!!options?.isProcessing);
20+
21+
const newStore = createStoreWithEvents(events, options);
22+
23+
jest.replaceProperty(
24+
reduxStore,
25+
"store",
26+
newStore as unknown as typeof reduxStore.store,
27+
);
28+
29+
const utils = renderWithDayProviders(<Agenda />, { store });
30+
return { ...utils, store };
31+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { PropsWithChildren, createContext, useRef } from "react";
2+
3+
interface CompassRefs {
4+
nowLineRef: React.MutableRefObject<HTMLDivElement | null>;
5+
timedEventsContainerRef: React.MutableRefObject<HTMLDivElement | null>;
6+
timedEventsGridRef: React.MutableRefObject<HTMLDivElement | null>;
7+
allDayEventsGridRef: React.MutableRefObject<HTMLDivElement | null>;
8+
}
9+
10+
export const CompassRefsContext = createContext<CompassRefs | null>(null);
11+
12+
export function CompassRefsProvider({ children }: PropsWithChildren) {
13+
const nowLineRef = useRef<HTMLDivElement | null>(null);
14+
const timedEventsContainerRef = useRef<HTMLDivElement | null>(null);
15+
const timedEventsGridRef = useRef<HTMLDivElement | null>(null);
16+
const allDayEventsGridRef = useRef<HTMLDivElement | null>(null);
17+
18+
return (
19+
<CompassRefsContext.Provider
20+
value={{
21+
timedEventsContainerRef,
22+
nowLineRef,
23+
timedEventsGridRef,
24+
allDayEventsGridRef,
25+
}}
26+
>
27+
{children}
28+
</CompassRefsContext.Provider>
29+
);
30+
}

packages/web/src/common/context/mouse-position.tsx

Lines changed: 0 additions & 149 deletions
This file was deleted.

0 commit comments

Comments
 (0)