mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-10-31 19:04:35 +01:00 
			
		
		
		
	fix(app.tsx): add safe check for readyPromise (#2489)
* fix(app.tsx): add safe check for readyPromise * make type-safe Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
		| @@ -301,9 +301,9 @@ class App extends React.Component<ExcalidrawProps, AppState> { | |||||||
|     }; |     }; | ||||||
|     if (excalidrawRef) { |     if (excalidrawRef) { | ||||||
|       const readyPromise = |       const readyPromise = | ||||||
|         typeof excalidrawRef === "function" |         ("current" in excalidrawRef && excalidrawRef.current?.readyPromise) || | ||||||
|           ? resolvablePromise<ExcalidrawImperativeAPI>() |         resolvablePromise<ExcalidrawImperativeAPI>(); | ||||||
|           : excalidrawRef.current!.readyPromise; |  | ||||||
|       const api: ExcalidrawImperativeAPI = { |       const api: ExcalidrawImperativeAPI = { | ||||||
|         ready: true, |         ready: true, | ||||||
|         readyPromise, |         readyPromise, | ||||||
|   | |||||||
| @@ -24,7 +24,9 @@ import { ExcalidrawElement } from "../element/types"; | |||||||
| import { SAVE_TO_LOCAL_STORAGE_TIMEOUT } from "./app_constants"; | import { SAVE_TO_LOCAL_STORAGE_TIMEOUT } from "./app_constants"; | ||||||
| import { EVENT_LOAD, EVENT_SHARE, trackEvent } from "../analytics"; | import { EVENT_LOAD, EVENT_SHARE, trackEvent } from "../analytics"; | ||||||
|  |  | ||||||
| const excalidrawRef: React.MutableRefObject<ExcalidrawAPIRefValue> = { | const excalidrawRef: React.MutableRefObject< | ||||||
|  |   MarkRequired<ExcalidrawAPIRefValue, "ready" | "readyPromise"> | ||||||
|  | > = { | ||||||
|   current: { |   current: { | ||||||
|     readyPromise: resolvablePromise(), |     readyPromise: resolvablePromise(), | ||||||
|     ready: false, |     ready: false, | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								src/global.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								src/global.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -43,6 +43,9 @@ type ResolutionType<T extends (...args: any) => any> = T extends ( | |||||||
| // https://github.com/krzkaczor/ts-essentials | // https://github.com/krzkaczor/ts-essentials | ||||||
| type MarkOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>; | type MarkOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>; | ||||||
|  |  | ||||||
|  | type MarkRequired<T, RK extends keyof T> = Exclude<T, RK> & | ||||||
|  |   Required<Pick<T, RK>>; | ||||||
|  |  | ||||||
| // PNG encoding/decoding | // PNG encoding/decoding | ||||||
| // ----------------------------------------------------------------------------- | // ----------------------------------------------------------------------------- | ||||||
| type TEXtChunk = { name: "tEXt"; data: Uint8Array }; | type TEXtChunk = { name: "tEXt"; data: Uint8Array }; | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/types.ts
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/types.ts
									
									
									
									
									
								
							| @@ -133,14 +133,16 @@ export declare class GestureEvent extends UIEvent { | |||||||
| export type LibraryItem = readonly NonDeleted<ExcalidrawElement>[]; | export type LibraryItem = readonly NonDeleted<ExcalidrawElement>[]; | ||||||
| export type LibraryItems = readonly LibraryItem[]; | export type LibraryItems = readonly LibraryItem[]; | ||||||
|  |  | ||||||
|  | // NOTE ready/readyPromise props are optional for host apps' sake (our own | ||||||
|  | // implem guarantees existence) | ||||||
| export type ExcalidrawAPIRefValue = | export type ExcalidrawAPIRefValue = | ||||||
|   | (ExcalidrawImperativeAPI & { |   | (ExcalidrawImperativeAPI & { | ||||||
|       readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>; |       readyPromise?: ResolvablePromise<ExcalidrawImperativeAPI>; | ||||||
|       ready: true; |       ready?: true; | ||||||
|     }) |     }) | ||||||
|   | { |   | { | ||||||
|       readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>; |       readyPromise?: ResolvablePromise<ExcalidrawImperativeAPI>; | ||||||
|       ready: false; |       ready?: false; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
| export interface ExcalidrawProps { | export interface ExcalidrawProps { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Aakansha Doshi
					Aakansha Doshi